gogcli/internal/googleapi/errors_test.go
2025-12-31 19:47:32 +01:00

84 lines
2.4 KiB
Go

package googleapi
import (
"errors"
"strings"
"testing"
"time"
)
var errBase = errors.New("base")
func TestErrors_IsHelpers(t *testing.T) {
if !IsAuthRequiredError(&AuthRequiredError{Service: "gmail", Email: "a@b.com", Cause: errBase}) {
t.Fatalf("expected IsAuthRequiredError")
}
if !IsRateLimitError(&RateLimitError{RetryAfter: time.Second, Retries: 2}) {
t.Fatalf("expected IsRateLimitError")
}
if !IsCircuitBreakerError(&CircuitBreakerError{}) {
t.Fatalf("expected IsCircuitBreakerError")
}
if !IsQuotaExceededError(&QuotaExceededError{Resource: "gmail"}) {
t.Fatalf("expected IsQuotaExceededError")
}
if !IsNotFoundError(&NotFoundError{Resource: "msg", ID: "id"}) {
t.Fatalf("expected IsNotFoundError")
}
if !IsPermissionDeniedError(&PermissionDeniedError{Resource: "file", Action: "read"}) {
t.Fatalf("expected IsPermissionDeniedError")
}
}
func TestErrors_Messages(t *testing.T) {
authErr := &AuthRequiredError{Service: "gmail", Email: "a@b.com", Cause: errBase}
if got := authErr.Error(); got != "auth required for gmail a@b.com" {
t.Fatalf("unexpected: %q", got)
}
if !errors.Is(authErr, errBase) {
t.Fatalf("expected unwrap to match base")
}
if got := (&RateLimitError{RetryAfter: 2 * time.Second, Retries: 3}).Error(); !strings.Contains(got, "retry after 2s") {
t.Fatalf("unexpected: %q", got)
}
if got := (&RateLimitError{Retries: 1}).Error(); !strings.Contains(got, "after 1 retries") {
t.Fatalf("unexpected: %q", got)
}
if got := (&NotFoundError{Resource: "file"}).Error(); got != "file not found" {
t.Fatalf("unexpected: %q", got)
}
if got := (&NotFoundError{Resource: "file", ID: "id1"}).Error(); got != "file not found: id1" {
t.Fatalf("unexpected: %q", got)
}
if got := (&PermissionDeniedError{Resource: "file"}).Error(); got != "permission denied for file" {
t.Fatalf("unexpected: %q", got)
}
if got := (&PermissionDeniedError{Resource: "file", Action: "delete"}).Error(); got != "permission denied: cannot delete file" {
t.Fatalf("unexpected: %q", got)
}
if got := (&CircuitBreakerError{}).Error(); got == "" {
t.Fatalf("expected circuit breaker message")
}
if got := (&QuotaExceededError{Resource: "drive"}).Error(); got != "API quota exceeded for drive" {
t.Fatalf("unexpected: %q", got)
}
if got := (&QuotaExceededError{}).Error(); got != "API quota exceeded" {
t.Fatalf("unexpected: %q", got)
}
}