package cav2 import ( "encoding/json" "net/http" "net/http/httptest" "net/url" "testing" ) func TestGetServiceURL(t *testing.T) { var gotForm url.Values signClient := NewClient("http://unused", "test-app", "test-secret") server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/open/api/data/getServiceUrl" { t.Fatalf("unexpected path: %s", r.URL.Path) } if r.Method != http.MethodPost { t.Fatalf("unexpected method: %s", r.Method) } if err := r.ParseForm(); err != nil { t.Fatalf("parse form: %v", err) } gotForm = r.PostForm expectedSignature := signClient.signature(r.PostForm) if r.Header.Get("app_id") != "test-app" { t.Fatalf("unexpected app_id: %s", r.Header.Get("app_id")) } if r.Header.Get("signature") != expectedSignature { t.Fatalf("unexpected signature: %s", r.Header.Get("signature")) } _ = json.NewEncoder(w).Encode(map[string]interface{}{ "result_code": 0, "result_msg": "", "success": true, "body": map[string]string{ "webToken": "token-1", "url": "https://example.test/h5", "expireTime": "2026-05-01 10:00:00", }, }) })) defer server.Close() client := NewClient(server.URL, "test-app", "test-secret") response, err := client.GetServiceURL(GetServiceURLRequest{ CertType: "Personal", Type: "CERT_APPLY", EntityID: "user-1", UserName: "Alice", UserIDCard: "123456", UserPhone: "13800000000", AuthMethod: "face", }) if err != nil { t.Fatalf("GetServiceURL error: %v", err) } if gotForm.Get("entityId") != "user-1" { t.Fatalf("unexpected entityId: %s", gotForm.Get("entityId")) } if response.WebToken != "token-1" || response.URL != "https://example.test/h5" { t.Fatalf("unexpected response: %+v", response) } } func TestFetchH5FaceURLWithStringBody(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _ = json.NewEncoder(w).Encode(map[string]interface{}{ "result_code": 0, "result_msg": "", "success": true, "body": "https://example.test/face-h5", }) })) defer server.Close() client := NewClient(server.URL, "test-app", "test-secret") link, err := client.FetchH5FaceURL(FetchH5FaceURLRequest{ CName: "Alice", CID: "123456", OrderNo: "order-1", RedirectURL: "https://callback.test/result", }) if err != nil { t.Fatalf("FetchH5FaceURL error: %v", err) } if link != "https://example.test/face-h5" { t.Fatalf("unexpected link: %s", link) } } func TestCheckEnterpriseSuccessWithoutBody(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _ = json.NewEncoder(w).Encode(map[string]interface{}{ "result_code": 0, "result_msg": "", "success": true, "body": nil, }) })) defer server.Close() client := NewClient(server.URL, "test-app", "test-secret") err := client.CheckEnterprise(CheckEnterpriseRequest{ CName: "法人A", CID: "510000000000000000", RegistrationNumber: "91510000TEST", EnterpriseName: "测试企业", }) if err != nil { t.Fatalf("CheckEnterprise error: %v", err) } }