package upstreamimpl import ( "context" "net/http" "net/http/httptest" "testing" "git.5iot.com/iotlcm-public/iotlcm-upstream-chan/internal/logic/upstreamimpl/dx" "git.5iot.com/iotlcm-public/iotlcm-upstream-chan/internal/model" "git.5iot.com/iotlcm-public/iotlcm-upstream-chan/internal/model/entity" ) type diagnosisTestToken struct{} func (diagnosisTestToken) GetToken(context.Context) (string, error) { return "test-token", nil } func (diagnosisTestToken) RecoverToken(context.Context, string) (string, error) { return "test-token", nil } func TestYdImeiUsesTerminalDeviceInfo(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/v5/ec/query/sim-terminal-device-info" || r.URL.Query().Get("iccid") != "89860000000000000004" { t.Errorf("unexpected request %s", r.URL.String()) } _, _ = w.Write([]byte(`{"status":"0","message":"正确","result":[{"terminalDeviceImei":"123456789012345"}]}`)) })) defer server.Close() sim := &sSimYD{ channelConfig: &model.SimChannelConfigItemCache{Channel: &entity.TSimChannels{ChanKey: "test", AppKey: "test"}}, tokenProvider: diagnosisTestToken{}, apiConfig: &oneLinkAPIConfig{BaseURL: server.URL + "/v5"}, } result, err := sim.QuerySimImei(context.Background(), &model.SimImeiInput{SimKeys: []*model.SimKey{{ICCID: "89860000000000000004"}}}) if err != nil { t.Fatal(err) } if len(result) != 1 || result[0].Code != 0 || result[0].ResData.Imei != "123456789012345" { t.Fatalf("unexpected IMEI response: %+v", result) } } func TestYdStopReasonCombination(t *testing.T) { for _, tc := range []struct{ input, want string }{ {"020000002000", "机卡分离停机、主动申请双向停机"}, {"200000000000", "窄带网商品到期失效停机"}, {"002000000000", "002000000000"}, } { if got := mapYdStopReasonText(tc.input); got != tc.want { t.Errorf("%s => %s, want %s", tc.input, got, tc.want) } } } func TestDxRegionLimitStatusByOrder(t *testing.T) { for _, tc := range []struct{ order, limit, want string }{ {"1", "", "2"}, {"0", "0", "1"}, {"0", "1", "0"}, {"0", "-", "2"}, } { if got := mapDxRegionLimitStatusByOrder(tc.order, tc.limit); got != tc.want { t.Errorf("%s/%s => %s, want %s", tc.order, tc.limit, got, tc.want) } } } func TestDxCardBindingUsesDedicatedEndpoint(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/api/v1/corp/connect/chkDeviceBindingInfo" || r.URL.Query().Get("iccid") != "8986000000000000007" { t.Errorf("unexpected request %s", r.URL.String()) } _, _ = w.Write([]byte(`{"code":"0","data":{"orderStaus":"0","bindType":"1","bindImei":"123456789012345","bindStaus":"1"}}`)) })) defer server.Close() sim := &sSimDX{client: dx.NewClient(dx.Config{BaseURL: server.URL, AppKey: "test", AppSecret: "secret"})} result, err := sim.QuerySimCardBindStatus(context.Background(), &model.SimCardBindStatusInput{SimKeys: []*model.SimKey{{ICCID: "8986000000000000007"}}}) if err != nil { t.Fatal(err) } if len(result) != 1 || result[0].Code != 0 || result[0].ResData.OrderStatus != "0" || result[0].ResData.BindStatus != "1" || result[0].ResData.BindImei != "123456789012345" { t.Fatalf("unexpected response: %+v", result) } } func TestDxImeiReadsNQ003Response(t *testing.T) { for _, tc := range []struct { body string wantCode int wantImei, wantMessage string }{ {`{"RESULT":"0","MESSAGE":"查询成功","IMEI":"863644077218049"}`, 0, "863644077218049", "查询成功"}, {`{"RESULT":"S00004","MESSAGE":"没有查询权限"}`, 9999, "", "没有查询权限"}, } { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/openapi/v1/prodinst/gete2einfo" || r.URL.Query().Get("iccid") != "8986000000000000007" { t.Errorf("unexpected request: %s", r.URL.String()) } _, _ = w.Write([]byte(tc.body)) })) sim := &sSimDX{client: dx.NewClient(dx.Config{BaseURL: server.URL, AppKey: "test", AppSecret: "secret"})} results, err := sim.QuerySimImei(context.Background(), &model.SimImeiInput{SimKeys: []*model.SimKey{{ICCID: "8986000000000000007"}}}) server.Close() if err != nil || len(results) != 1 || results[0].Code != tc.wantCode || results[0].ResData.Imei != tc.wantImei || results[0].Message != tc.wantMessage { t.Errorf("response = %+v, error = %v", results, err) } } }