package osi import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" "time" ) func TestTransportPostJSONSendsPayloadAndHeaders(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { t.Fatalf("method = %s, want POST", r.Method) } if r.Header.Get("Content-Type") != "application/json" { t.Fatalf("Content-Type = %q", r.Header.Get("Content-Type")) } if r.Header.Get("orgCode") != "org-001" { t.Fatalf("orgCode = %q", r.Header.Get("orgCode")) } for _, name := range []string{"Cookie", "Origin", "Referer", "X-Requested-With"} { if got := r.Header.Get(name); got != "" { t.Fatalf("unexpected browser/cookie header %s=%q", name, got) } } var payload map[string]any if err := json.NewDecoder(r.Body).Decode(&payload); err != nil { t.Fatalf("decode payload: %v", err) } if payload["serviceId"] != "JKDA00002" { t.Fatalf("serviceId = %v", payload["serviceId"]) } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusAccepted) _, _ = w.Write([]byte(`{"code":"01"}`)) })) defer server.Close() transport, err := NewTransport(TransportConfig{Timeout: time.Second}) if err != nil { t.Fatalf("NewTransport: %v", err) } status, raw, err := transport.PostJSON( context.Background(), server.URL, map[string]any{"serviceId": "JKDA00002"}, map[string]string{"Content-Type": "application/json", "orgCode": "org-001"}, ) if err != nil { t.Fatalf("PostJSON: %v", err) } if status != http.StatusAccepted { t.Fatalf("status = %d, want %d", status, http.StatusAccepted) } if string(raw) != `{"code":"01"}` { t.Fatalf("raw = %s", raw) } } func TestNewTransportKeepsTimeout(t *testing.T) { transport, err := NewTransport(TransportConfig{Timeout: 3 * time.Second}) if err != nil { t.Fatalf("NewTransport: %v", err) } if transport.client.Timeout != 3*time.Second { t.Fatalf("timeout = %s, want 3s", transport.client.Timeout) } } func TestNewTransportRejectsInvalidSOCKS5Proxy(t *testing.T) { if _, err := NewTransport(TransportConfig{Socks5Proxy: "missing-port"}); err == nil { t.Fatal("NewTransport accepted invalid SOCKS5 proxy") } }