client_test.go (1521B)
1 package backend 2 3 import ( 4 "context" 5 "encoding/json" 6 "net/http" 7 "net/http/httptest" 8 "net/url" 9 "testing" 10 ) 11 12 func TestClientResolvesInstancePathAndAuthenticates(t *testing.T) { 13 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 14 if r.URL.Path != "/instances/demo/private/orders" { 15 t.Errorf("path = %q", r.URL.Path) 16 } 17 if r.URL.Query().Get("session_id") != "session" { 18 t.Errorf("query = %q", r.URL.RawQuery) 19 } 20 if r.Header.Get("Authorization") != "Bearer secret-token:test" { 21 t.Errorf("authorization = %q", r.Header.Get("Authorization")) 22 } 23 _ = json.NewEncoder(w).Encode(map[string]any{"orders": []any{}}) 24 })) 25 defer server.Close() 26 27 client, err := New(server.URL+"/instances/demo", "secret-token:test") 28 if err != nil { 29 t.Fatal(err) 30 } 31 var history OrderHistory 32 err = client.Get(context.Background(), "private/orders", url.Values{"session_id": {"session"}}, &history) 33 if err != nil { 34 t.Fatalf("GET: %v", err) 35 } 36 } 37 38 func TestPostReportsBackendHint(t *testing.T) { 39 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { 40 w.WriteHeader(http.StatusConflict) 41 _ = json.NewEncoder(w).Encode(map[string]any{"hint": "duplicate order"}) 42 })) 43 defer server.Close() 44 client, err := New(server.URL, "") 45 if err != nil { 46 t.Fatal(err) 47 } 48 err = client.Post(context.Background(), "private/orders", PostOrderRequest{}, nil) 49 if err == nil || err.Error() != "duplicate order" { 50 t.Fatalf("unexpected error: %v", err) 51 } 52 }