Files
iotlcm/admin-svr/server/internal/logic/common/batch_main_channel_test.go
T

75 lines
2.8 KiB
Go

package common
import (
"testing"
"github.com/gogf/gf/v2/frame/g"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/consts"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model/request"
)
func TestInboundBatchChannelFiltering(t *testing.T) {
ctx := setupBatchExecutionLogListDB(t)
for _, statement := range []string{
"ALTER TABLE batch_main ADD target_dept_id INTEGER DEFAULT 0",
"CREATE TABLE t_sim_card_stock(batch_no TEXT,tenant_id TEXT)",
"INSERT INTO t_sim_card_stock VALUES('A-NESTED',''),('A-NESTED','')",
} {
if _, err := g.DB().Exec(ctx, statement); err != nil {
t.Fatal(err)
}
}
fixtures := []struct {
name string
info string
batchType int
runResult int
}{
{"A-NESTED", `{"inboundOptions":{"chanKey":"A"}}`, 1, consts.BatchRunResultSuccess},
{"A-LEGACY", `{"chanKey":"A"}`, 1, consts.BatchRunResultSuccess},
{"B-NESTED", `{"inboundOptions":{"chanKey":"B"},"chanKey":"A"}`, 1, consts.BatchRunResultSuccess},
{"A-EMPTY-NESTED", `{"inboundOptions":{"chanKey":""},"chanKey":"A"}`, 1, consts.BatchRunResultSuccess},
{"NO-CHANNEL", "{}", 1, consts.BatchRunResultSuccess},
{"INVALID-JSON", "broken", 1, consts.BatchRunResultSuccess},
{"OTHER-TYPE", `{"chanKey":"A"}`, 2, consts.BatchRunResultSuccess},
{"NOT-SUCCESS", `{"chanKey":"A"}`, 1, consts.BatchRunResultFailed},
}
for _, fixture := range fixtures {
if _, err := g.DB().Exec(ctx, "INSERT INTO batch_main(batch_no,batch_type,batch_info,total_count,run_result) VALUES(?,?,?,?,?)", fixture.name, fixture.batchType, fixture.info, 2, fixture.runResult); err != nil {
t.Fatal(err)
}
}
for _, test := range []struct {
name string
channel string
page int
size int
wantTotal int
wantRows int
}{
{"渠道A兼容新旧格式", "A", 1, 20, 3, 3},
{"渠道B优先使用嵌套编码", "B", 1, 20, 1, 1},
{"清空恢复全部入库批次", "", 1, 20, 6, 6},
{"前后空白不影响筛选", " A ", 1, 20, 3, 3},
{"总数按渠道过滤后分页", "A", 2, 2, 3, 1},
{"不存在的渠道返回空", "missing", 1, 20, 0, 0},
{"特殊字符作为参数而不是SQL", "A' OR 1=1 --", 1, 20, 0, 0},
} {
t.Run(test.name, func(t *testing.T) {
rows, total, err := NewCommonBatchMain().SuccessList(ctx, &model.BatchMainSuccessListParam{BatchType: consts.BatchTypeInbound, ChanKey: test.channel, PageInfo: request.PageInfo{Page: test.page, PageSize: test.size}})
if err != nil || total != test.wantTotal || len(rows) != test.wantRows {
t.Fatalf("total=%d rows=%d err=%v", total, len(rows), err)
}
for _, row := range rows {
if row.BatchNo == "A-NESTED" && row.StockCount != 2 {
t.Fatalf("stock count changed: %+v", row)
}
if test.channel == "B" && row.BatchNo != "B-NESTED" {
t.Fatalf("nested channel priority violated: %+v", row)
}
}
})
}
}