Files

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)
}
}