chore: apply task changes
This commit is contained in:
292
internal/gateway/flow_card_test.go
Normal file
292
internal/gateway/flow_card_test.go
Normal file
@@ -0,0 +1,292 @@
|
||||
package gateway
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestQueryCardStatus_Success(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 200,
|
||||
Msg: "成功",
|
||||
Data: json.RawMessage(`{"iccid":"898608070422D0010269","cardStatus":"正常"}`),
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
result, err := client.QueryCardStatus(ctx, &CardStatusReq{
|
||||
CardNo: "898608070422D0010269",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("QueryCardStatus() error = %v", err)
|
||||
}
|
||||
|
||||
if result.ICCID != "898608070422D0010269" {
|
||||
t.Errorf("ICCID = %s, want 898608070422D0010269", result.ICCID)
|
||||
}
|
||||
if result.CardStatus != "正常" {
|
||||
t.Errorf("CardStatus = %s, want 正常", result.CardStatus)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueryCardStatus_InvalidResponse(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 200,
|
||||
Msg: "成功",
|
||||
Data: json.RawMessage(`invalid json`),
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
_, err := client.QueryCardStatus(ctx, &CardStatusReq{CardNo: "test"})
|
||||
if err == nil {
|
||||
t.Fatal("QueryCardStatus() expected JSON parse error")
|
||||
}
|
||||
|
||||
if !strings.Contains(err.Error(), "解析") {
|
||||
t.Errorf("error should contain '解析', got: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueryFlow_Success(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 200,
|
||||
Msg: "成功",
|
||||
Data: json.RawMessage(`{"usedFlow":1024,"unit":"MB"}`),
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
result, err := client.QueryFlow(ctx, &FlowQueryReq{
|
||||
CardNo: "898608070422D0010269",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("QueryFlow() error = %v", err)
|
||||
}
|
||||
|
||||
if result.UsedFlow != 1024 {
|
||||
t.Errorf("UsedFlow = %d, want 1024", result.UsedFlow)
|
||||
}
|
||||
if result.Unit != "MB" {
|
||||
t.Errorf("Unit = %s, want MB", result.Unit)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueryFlow_BusinessError(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 404,
|
||||
Msg: "卡号不存在",
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
_, err := client.QueryFlow(ctx, &FlowQueryReq{CardNo: "invalid"})
|
||||
if err == nil {
|
||||
t.Fatal("QueryFlow() expected business error")
|
||||
}
|
||||
|
||||
if !strings.Contains(err.Error(), "业务错误") {
|
||||
t.Errorf("error should contain '业务错误', got: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueryRealnameStatus_Success(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 200,
|
||||
Msg: "成功",
|
||||
Data: json.RawMessage(`{"status":"已实名"}`),
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
result, err := client.QueryRealnameStatus(ctx, &CardStatusReq{
|
||||
CardNo: "898608070422D0010269",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("QueryRealnameStatus() error = %v", err)
|
||||
}
|
||||
|
||||
if result.Status != "已实名" {
|
||||
t.Errorf("Status = %s, want 已实名", result.Status)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStopCard_Success(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 200,
|
||||
Msg: "成功",
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
err := client.StopCard(ctx, &CardOperationReq{
|
||||
CardNo: "898608070422D0010269",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("StopCard() error = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStopCard_WithExtend(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{Code: 200, Msg: "成功"}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
err := client.StopCard(ctx, &CardOperationReq{
|
||||
CardNo: "898608070422D0010269",
|
||||
Extend: "test-extend",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("StopCard() error = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStartCard_Success(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{Code: 200, Msg: "成功"}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
err := client.StartCard(ctx, &CardOperationReq{
|
||||
CardNo: "898608070422D0010269",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("StartCard() error = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStartCard_BusinessError(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{Code: 500, Msg: "操作失败"}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
err := client.StartCard(ctx, &CardOperationReq{CardNo: "test"})
|
||||
if err == nil {
|
||||
t.Fatal("StartCard() expected business error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetRealnameLink_Success(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 200,
|
||||
Msg: "成功",
|
||||
Data: json.RawMessage(`{"link":"https://realname.example.com/verify?token=abc123"}`),
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
result, err := client.GetRealnameLink(ctx, &CardStatusReq{
|
||||
CardNo: "898608070422D0010269",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("GetRealnameLink() error = %v", err)
|
||||
}
|
||||
|
||||
if result.Link != "https://realname.example.com/verify?token=abc123" {
|
||||
t.Errorf("Link = %s, want https://realname.example.com/verify?token=abc123", result.Link)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetRealnameLink_InvalidResponse(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
resp := GatewayResponse{
|
||||
Code: 200,
|
||||
Msg: "成功",
|
||||
Data: json.RawMessage(`{"invalid": "structure"}`),
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
result, err := client.GetRealnameLink(ctx, &CardStatusReq{CardNo: "test"})
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("GetRealnameLink() unexpected error = %v", err)
|
||||
}
|
||||
if result.Link != "" {
|
||||
t.Errorf("Link = %s, want empty string", result.Link)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBatchQuery_NotImplemented(t *testing.T) {
|
||||
client := NewClient("https://test.example.com", "testAppID", "testSecret")
|
||||
ctx := context.Background()
|
||||
|
||||
_, err := client.BatchQuery(ctx, &BatchQueryReq{
|
||||
CardNos: []string{"test1", "test2"},
|
||||
})
|
||||
|
||||
if err == nil {
|
||||
t.Fatal("BatchQuery() expected not implemented error")
|
||||
}
|
||||
|
||||
if !strings.Contains(err.Error(), "暂未实现") {
|
||||
t.Errorf("error should contain '暂未实现', got: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user