taler-merchant-demos

Python-based Frontends for the Demonstration Web site
Log | Files | Refs | README | LICENSE

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 }