127 lines
4.1 KiB
Go
127 lines
4.1 KiB
Go
package service
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
func TestChanQueryEndpoints(t *testing.T) {
|
|
service, err := NewService(t.TempDir()+"/onelink_mock.db")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := service.store.GenerateCards(2); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cards := service.store.Snapshot().Cards
|
|
body, _ := json.Marshal(map[string]any{
|
|
"simKeys": []map[string]string{{"chanKey": "channel_yd_mock", "iccid": cards[0].ICCID, "imsi": cards[0].IMSI, "msisdn": cards[0].MSISDN}},
|
|
"reqData": map[string]string{"queryDate": "20260101"},
|
|
})
|
|
paths := []string{
|
|
"/sim/query/sim-basic-info",
|
|
"/sim/query/sim-session",
|
|
"/sim/query/sim-status",
|
|
"/sim/query/sim-status-batch",
|
|
"/sim/query/sim-card-bind-status",
|
|
"/sim/query/sim-device-status",
|
|
"/sim/query/sim-region-limit-status",
|
|
"/sim/query/sim-imei",
|
|
"/sim/query/sim-datausage",
|
|
"/sim/query/sim-datausage-monthly",
|
|
"/sim/query/sim-datausage-monthly-batch",
|
|
"/sim/query/sim-datausage-daily",
|
|
"/sim/query/sim-datausage-daily-batch",
|
|
"/sim/query/sim-apn-info",
|
|
}
|
|
for _, path := range paths {
|
|
t.Run(path, func(t *testing.T) {
|
|
req := httptest.NewRequest(http.MethodPost, path, bytes.NewReader(body))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
res := httptest.NewRecorder()
|
|
service.Router().ServeHTTP(res, req)
|
|
if res.Code != http.StatusOK {
|
|
t.Fatalf("status = %d body=%s", res.Code, res.Body.String())
|
|
}
|
|
var responses []struct {
|
|
Code int `json:"code"`
|
|
SimKey chanSimKey `json:"simKey"`
|
|
}
|
|
if err := json.Unmarshal(res.Body.Bytes(), &responses); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(responses) != 1 || responses[0].Code != chanSuccessCode || responses[0].SimKey.ICCID != cards[0].ICCID {
|
|
t.Fatalf("responses = %#v", responses)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestChanBatchAndQueryStringCompatibility(t *testing.T) {
|
|
service, err := NewService(t.TempDir()+"/onelink_mock.db")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := service.store.GenerateCards(2); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
cards := service.store.Snapshot().Cards
|
|
req := httptest.NewRequest(http.MethodGet, "/sim/query/sim-status-batch?iccids="+cards[0].ICCID+"_"+cards[1].ICCID, nil)
|
|
res := httptest.NewRecorder()
|
|
service.Router().ServeHTTP(res, req)
|
|
if res.Code != http.StatusOK {
|
|
t.Fatalf("status = %d body=%s", res.Code, res.Body.String())
|
|
}
|
|
var responses []chanResponse[chanCardStatus]
|
|
if err := json.Unmarshal(res.Body.Bytes(), &responses); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(responses) != 2 || responses[0].Code != chanSuccessCode || responses[1].Code != chanSuccessCode {
|
|
t.Fatalf("responses = %#v", responses)
|
|
}
|
|
}
|
|
|
|
func TestChanChangesPersistAndCreateOrders(t *testing.T) {
|
|
service, err := NewService(t.TempDir()+"/onelink_mock.db")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := service.store.GenerateCards(1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
card := service.store.Snapshot().Cards[0]
|
|
statusBody := []byte(`{"simKeys":[{"iccid":"` + card.ICCID + `"}],"reqData":{"operType":"0"}}`)
|
|
res := httptest.NewRecorder()
|
|
req := httptest.NewRequest(http.MethodPost, "/sim/change/sim-status", bytes.NewReader(statusBody))
|
|
service.Router().ServeHTTP(res, req)
|
|
if res.Code != http.StatusOK {
|
|
t.Fatalf("status change status = %d body=%s", res.Code, res.Body.String())
|
|
}
|
|
if got := service.store.Snapshot().Cards[0].CardStatus; got != "4" {
|
|
t.Fatalf("card status = %s, want 4", got)
|
|
}
|
|
apnBody := []byte(`{"simKeys":[{"iccid":"` + card.ICCID + `"}],"reqData":{"apnName":"TEST_APN","operType":"0"}}`)
|
|
res = httptest.NewRecorder()
|
|
req = httptest.NewRequest(http.MethodPost, "/sim/change/sim-apn", bytes.NewReader(apnBody))
|
|
service.Router().ServeHTTP(res, req)
|
|
if res.Code != http.StatusOK {
|
|
t.Fatalf("apn change status = %d body=%s", res.Code, res.Body.String())
|
|
}
|
|
updated := service.store.Snapshot()
|
|
if len(updated.Orders) != 2 {
|
|
t.Fatalf("orders = %d, want 2", len(updated.Orders))
|
|
}
|
|
found := false
|
|
for _, apn := range updated.Cards[0].APNs {
|
|
if apn.Name == "TEST_APN" && apn.Status == "1" {
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
t.Fatalf("updated APNs = %#v", updated.Cards[0].APNs)
|
|
}
|
|
}
|