154 lines
4.2 KiB
Go
154 lines
4.2 KiB
Go
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)
|
|
}
|
|
if string(response.ExpireTime) != "2026-05-01 10:00:00" {
|
|
t.Fatalf("unexpected expireTime: %s", response.ExpireTime)
|
|
}
|
|
}
|
|
|
|
func TestGetServiceURLWithNumericExpireTime(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": map[string]interface{}{
|
|
"webToken": "token-2",
|
|
"url": "https://example.test/h5-2",
|
|
"expireTime": 1745918720,
|
|
},
|
|
})
|
|
}))
|
|
defer server.Close()
|
|
|
|
client := NewClient(server.URL, "test-app", "test-secret")
|
|
response, err := client.GetServiceURL(GetServiceURLRequest{
|
|
CertType: "Personal",
|
|
Type: "CERT_APPLY",
|
|
EntityID: "user-2",
|
|
UserName: "Bob",
|
|
UserIDCard: "654321",
|
|
UserPhone: "13900000000",
|
|
AuthMethod: "face",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("GetServiceURL error: %v", err)
|
|
}
|
|
|
|
if string(response.ExpireTime) != "1745918720" {
|
|
t.Fatalf("unexpected expireTime: %s", response.ExpireTime)
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|