package sub2api import ( "context" "io" "net/http" "strings" "testing" ) func TestDisableOpenAIResponsesAPISkipsEmptyAccountIDs(t *testing.T) { t.Parallel() client, err := NewClient("https://sub2api.example.com", WithHTTPClient(&http.Client{ Transport: roundTripperFunc(func(*http.Request) (*http.Response, error) { t.Fatal("unexpected HTTP request for empty account ids") return nil, nil }), })) if err != nil { t.Fatalf("NewClient() error = %v", err) } if err := client.DisableOpenAIResponsesAPI(context.Background(), []string{" ", ""}); err != nil { t.Fatalf("DisableOpenAIResponsesAPI() error = %v", err) } } func TestDisableOpenAIResponsesAPIReturnsHTTPError(t *testing.T) { t.Parallel() var gotPath string client, err := NewClient("https://sub2api.example.com", WithHTTPClient(&http.Client{ Transport: roundTripperFunc(func(req *http.Request) (*http.Response, error) { gotPath = req.URL.Path return &http.Response{ StatusCode: http.StatusForbidden, Header: make(http.Header), Body: io.NopCloser(strings.NewReader(`{"error":"forbidden"}`)), }, nil }), })) if err != nil { t.Fatalf("NewClient() error = %v", err) } err = client.DisableOpenAIResponsesAPI(context.Background(), []string{"account-1"}) if err == nil { t.Fatal("DisableOpenAIResponsesAPI() error = nil, want HTTP error") } httpErr, ok := err.(*HTTPError) if !ok { t.Fatalf("DisableOpenAIResponsesAPI() error type = %T, want *HTTPError", err) } if gotPath != "/api/v1/admin/accounts/account-1" { t.Fatalf("request path = %q, want /api/v1/admin/accounts/account-1", gotPath) } if httpErr.StatusCode != http.StatusForbidden { t.Fatalf("HTTPError.StatusCode = %d, want %d", httpErr.StatusCode, http.StatusForbidden) } } func TestClearTempUnschedulableSkipsEmptyAccountIDs(t *testing.T) { t.Parallel() client, err := NewClient("https://sub2api.example.com", WithHTTPClient(&http.Client{ Transport: roundTripperFunc(func(*http.Request) (*http.Response, error) { t.Fatal("unexpected HTTP request for empty account ids") return nil, nil }), })) if err != nil { t.Fatalf("NewClient() error = %v", err) } if err := client.ClearTempUnschedulable(context.Background(), []string{" ", ""}); err != nil { t.Fatalf("ClearTempUnschedulable() error = %v", err) } } func TestClearTempUnschedulableReturnsHTTPError(t *testing.T) { t.Parallel() var gotPath string client, err := NewClient("https://sub2api.example.com", WithHTTPClient(&http.Client{ Transport: roundTripperFunc(func(req *http.Request) (*http.Response, error) { gotPath = req.URL.Path return &http.Response{ StatusCode: http.StatusForbidden, Header: make(http.Header), Body: io.NopCloser(strings.NewReader(`{"error":"forbidden"}`)), }, nil }), })) if err != nil { t.Fatalf("NewClient() error = %v", err) } err = client.ClearTempUnschedulable(context.Background(), []string{"account-1"}) if err == nil { t.Fatal("ClearTempUnschedulable() error = nil, want HTTP error") } httpErr, ok := err.(*HTTPError) if !ok { t.Fatalf("ClearTempUnschedulable() error type = %T, want *HTTPError", err) } if gotPath != "/api/v1/admin/accounts/account-1/temp-unschedulable" { t.Fatalf("request path = %q, want /api/v1/admin/accounts/account-1/temp-unschedulable", gotPath) } if httpErr.StatusCode != http.StatusForbidden { t.Fatalf("HTTPError.StatusCode = %d, want %d", httpErr.StatusCode, http.StatusForbidden) } } type roundTripperFunc func(*http.Request) (*http.Response, error) func (fn roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) { return fn(req) }