Files
iotlcm/server/internal/logic/app/app_card_renew_result_test.go
T
MiFaZhan 2ed5dfa6a1 chore: 初始开源发布
iotlcm-app:小程序端 + 用户端服务。

- app/:uni-app 小程序前端(基于 unibest,MIT)
  - 微信 AppID → YOUR_WX_APPID,uni-app AppID → __UNI__YOURAPPID
  - 内网后端地址 → admin.iotlcm.example.com
  - 应用标题与 unibest 模板 README 重写(保留上游致谢与 MIT 声明)
- server/:GoFrame 用户端服务(基于 XiuAdmin,Apache-2.0)
  - module xiuadmin → git.5iot.com/iotlcm-public/iotlcm-app(360 文件)
  - 支付回调地址 → app.iotlcm.example.com,商户名与应用名泛化
  - 真实手机号 → 合法 11 位编造号(保留号段前 3 位 + 后 4 位)
  - 依赖号码尾部的断言同步更新
  - 补 server/LICENSE(Apache-2.0)
- 移除内部资产:CI 触发器
- 补根 README,LF 行尾 + .gitattributes

已知:TestSysDept_RefreshDeptAncestors 在源仓同一提交上同样失败,属既有缺陷。
2026-10-26 14:01:25 +08:00

176 lines
4.9 KiB
Go

package app
import (
"bytes"
"reflect"
"testing"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/model/entity"
"github.com/gogf/gf/v2/os/gtime"
"github.com/xuri/excelize/v2"
)
func TestAppBuildRenewBatchImportExcelMatchesRenewTemplate(t *testing.T) {
data, err := appBuildRenewBatchImportExcel(appRenewResultTestBatch(), "REN20260709164715A8F22BD5", 3, "测试备注", gtime.NewFromStr("2026-07-09 16:47:15"))
if err != nil {
t.Fatalf("build import excel: %v", err)
}
f, err := excelize.OpenReader(bytes.NewReader(data))
if err != nil {
t.Fatalf("open import excel: %v", err)
}
defer f.Close()
headers, err := f.GetRows("Sheet1")
if err != nil {
t.Fatalf("read import rows: %v", err)
}
wantHeaders := []string{"ICCID", "MSISDN", "IMSI", "续费年限", "是否走线下"}
if len(headers) < 2 || !reflect.DeepEqual(headers[0], wantHeaders) {
t.Fatalf("headers mismatch: %#v", headers)
}
wantRow := []string{"898604F4152391181413", "1441234567890", "460041234567890", "3", "TRUE"}
if !reflect.DeepEqual(headers[1], wantRow) {
t.Fatalf("row mismatch: %#v", headers[1])
}
for _, cell := range []string{"A1", "B1", "C1", "D1", "E1", "A2", "B2", "C2", "D2", "E2"} {
styleID, err := f.GetCellStyle("Sheet1", cell)
if err != nil {
t.Fatalf("get style %s: %v", cell, err)
}
style, err := f.GetStyle(styleID)
if err != nil {
t.Fatalf("get style detail %s: %v", cell, err)
}
if style.NumFmt != 49 {
t.Fatalf("%s numFmt = %d, want 49", cell, style.NumFmt)
}
}
for col, want := range map[string]float64{
"A": 24,
"B": 14,
"C": 18,
"D": 18,
"E": 18,
} {
got, err := f.GetColWidth("Sheet1", col)
if err != nil {
t.Fatalf("get width %s: %v", col, err)
}
if got != want {
t.Fatalf("width %s = %v, want %v", col, got, want)
}
}
}
func TestAppBuildRenewBatchResultExcelMatchesBatchResultFormat(t *testing.T) {
data, err := appBuildRenewBatchResultExcel(appRenewResultTestBatch(), &appRenewBatchLogFiles{
ImportOssId: 309,
ImportFileName: "REN20260709164715A8F22BD5-import.xlsx",
}, "REN20260709164715A8F22BD5", "SO202607091647150000875NYX", 3, 30, 30, nil, nil, nil, gtime.NewFromStr("2026-07-09 16:47:15"), 87, 310)
if err != nil {
t.Fatalf("build result excel: %v", err)
}
f, err := excelize.OpenReader(bytes.NewReader(data))
if err != nil {
t.Fatalf("open result excel: %v", err)
}
defer f.Close()
if sheets := f.GetSheetList(); !reflect.DeepEqual(sheets, []string{"导入结果", "批次信息"}) {
t.Fatalf("sheets mismatch: %#v", sheets)
}
resultRows, err := f.GetRows("导入结果")
if err != nil {
t.Fatalf("read result rows: %v", err)
}
if !reflect.DeepEqual(resultRows[0], []string{"源文件行号", "item_id", "处理状态", "异常原因"}) {
t.Fatalf("result headers mismatch: %#v", resultRows[0])
}
if !reflect.DeepEqual(resultRows[1][:3], []string{"2", "898604F4152391181413", "成功"}) {
t.Fatalf("result row mismatch: %#v", resultRows[1])
}
infoRows, err := f.GetRows("批次信息")
if err != nil {
t.Fatalf("read info rows: %v", err)
}
if !reflect.DeepEqual(infoRows[0], []string{"字段", "值"}) {
t.Fatalf("info headers mismatch: %#v", infoRows[0])
}
if !reflect.DeepEqual(infoRows[1], []string{"批次号", "REN20260709164715A8F22BD5"}) {
t.Fatalf("info row mismatch: %#v", infoRows[1])
}
}
func TestAppRenewBatchResultInfoRowsUsesBatchImportFileName(t *testing.T) {
rows := appRenewBatchResultInfoRows(
appRenewResultTestBatch(),
&appRenewBatchLogFiles{},
"REN202607091748552P7KDBXN",
3,
10,
10,
nil,
nil,
gtime.NewFromStr("2026-07-09 17:48:56"),
87,
340,
)
info := map[string]string{}
for _, row := range rows {
info[row[0]] = row[1]
}
if info["原始文件名"] != "REN202607091748552P7KDBXN-import.xlsx" {
t.Fatalf("source file name = %q, want batch import file name", info["原始文件名"])
}
if info["原始文件OSS ID"] != "" {
t.Fatalf("source file oss id = %q, want empty", info["原始文件OSS ID"])
}
if info["结果文件OSS ID"] != "340" {
t.Fatalf("result file oss id = %q, want 340", info["结果文件OSS ID"])
}
}
func appRenewResultTestBatch() *appRenewBatchContext {
return &appRenewBatchContext{
CurrentPackage: &entity.TSimFlowPackageInfo{
PackageCode: "OLDPKG",
PackageName: "原套餐",
},
Package: &entity.TSimFlowPackageInfo{
Id: 2001,
PackageCode: "NEWPKG",
PackageName: "续费套餐",
},
Price: &appRenewPriceSnapshot{
UnitPrice: 10,
PriceSource: "system",
},
Party: &appRenewOrderParty{
CustomerAgentId: 175,
CreatedDept: 175,
},
Durations: []int{1, 2, 3},
OwnerType: appCardOwnerAgent,
RenewablePackageCodes: []string{"NEWPKG"},
Items: []*appRenewPackageContext{
{
ExpectedCurrentPackageCode: "OLDPKG",
Card: &appCardQueryRow{
TSimCardInfo: entity.TSimCardInfo{
Id: 1001,
Iccid: "898604F4152391181413",
Msisdn: "1441234567890",
Imsi: "460041234567890",
},
},
},
},
}
}