Files

57 lines
1.4 KiB
Go

package rainyun
import (
"context"
"net/http"
"net/http/httptest"
"testing"
)
func TestClientAuthHeader(t *testing.T) {
var gotKey string
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
gotKey = r.Header.Get("X-Api-Key")
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"code":0,"data":{"id":1,"name":"test"}}`))
}))
defer srv.Close()
c := newClient(srv.URL, "sk-test", false)
var result struct {
ID int `json:"id"`
Name string `json:"name"`
}
if err := c.get(context.Background(), "/test", &result); err != nil {
t.Fatalf("get() error: %v", err)
}
if gotKey != "sk-test" {
t.Errorf("X-Api-Key = %q, want %q", gotKey, "sk-test")
}
if result.Name != "test" {
t.Errorf("Name = %q, want %q", result.Name, "test")
}
}
func TestClientAPIError(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(404)
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"code":1002,"msg":"not found"}`))
}))
defer srv.Close()
c := newClient(srv.URL, "sk-test", false)
var result any
err := c.get(context.Background(), "/error", &result)
if err == nil {
t.Fatal("expected error for 404")
}
apiErr, ok := err.(*APIError)
if !ok {
t.Fatalf("expected *APIError, got %T", err)
}
if apiErr.StatusCode != 404 {
t.Errorf("error code = %d, want 404", apiErr.StatusCode)
}
}