package commonv1

import "testing"

func TestValidFailureRetryAfter(t *testing.T) {
	tests := []struct {
		name    string
		failure *Failure
		valid   bool
	}{
		{name: "nil", valid: false},
		{name: "absent", failure: &Failure{Category: FailureForbidden}, valid: true},
		{name: "unavailable", failure: &Failure{Category: FailureUnavailable, RetryAfterMillis: 50}, valid: true},
		{name: "admission", failure: &Failure{Category: FailureResourceExhausted, LimitKind: LimitAdmission, RetryAfterMillis: 50}, valid: true},
		{name: "semantic request", failure: &Failure{Category: FailureResourceExhausted, LimitKind: LimitSemanticRequest, RetryAfterMillis: 50}, valid: false},
		{name: "forbidden", failure: &Failure{Category: FailureForbidden, RetryAfterMillis: 50}, valid: false},
	}
	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			if got := ValidFailureRetryAfter(test.failure); got != test.valid {
				t.Fatalf("ValidFailureRetryAfter(%#v) = %v, want %v", test.failure, got, test.valid)
			}
		})
	}
}
