sync: 同步 v1.0.4 并脱敏配置与镜像

This commit is contained in:
MiFaZhan
2026-10-29 14:36:49 +08:00
parent 743e8e6e6e
commit 2206a393f7
516 changed files with 18119 additions and 2253 deletions
@@ -0,0 +1,183 @@
package change
import (
"context"
"os"
"path/filepath"
"testing"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/batchimport"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model"
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model/entity"
"github.com/xuri/excelize/v2"
)
func TestExcelTemplateHeaders(t *testing.T) {
got := ExcelTemplateHeaders()
want := []string{"ICCID", "MSISDN", "IMSI", "newPackageCode", "durationMonths", "giftDurationMonths", "effectiveMode", "offlineContractCompleted"}
if len(got) != len(want) {
t.Fatalf("headers len = %d, want %d", len(got), len(want))
}
for i := range want {
if got[i] != want[i] {
t.Fatalf("header[%d] = %q, want %q", i, got[i], want[i])
}
}
}
func TestParseExcelFileRows(t *testing.T) {
path := buildTestExcelFile(t, [][]string{
ExcelTemplateHeaders(),
{"8986001", "", "", "PKG_NEW", "12", "", "immediate", "true"},
})
rows, opts, err := ParseExcelFileRows(context.Background(), path)
if err != nil {
t.Fatalf("ParseExcelFileRows error = %v", err)
}
if len(rows) != 1 {
t.Fatalf("rows len = %d, want 1", len(rows))
}
if rows[0].GiftDurationMonths != 0 {
t.Fatalf("giftDurationMonths = %d, want 0", rows[0].GiftDurationMonths)
}
if opts == nil || opts.GiftDurationMonths != 0 || !opts.OfflineContractCompleted {
t.Fatalf("opts = %#v", opts)
}
}
func TestParseExcelFileRowsRequireTrueOfflineContractCompleted(t *testing.T) {
path := buildTestExcelFile(t, [][]string{
ExcelTemplateHeaders(),
{"8986001", "", "", "PKG_NEW", "12", "", "immediate", "false"},
})
rows, _, err := ParseExcelFileRows(context.Background(), path)
if err != nil {
t.Fatalf("ParseExcelFileRows error = %v", err)
}
if len(rows) != 1 {
t.Fatalf("rows len = %d, want 1", len(rows))
}
if rows[0].Reason == "" {
t.Fatal("expected row error when offlineContractCompleted is false")
}
}
func TestValidateChangeRowSourceBatchOptional(t *testing.T) {
operator := batchimport.OperatorContext{DeptId: 100}
row := &Row{Iccid: "8986001"}
card := &entity.TSimCardInfo{
Iccid: "8986001",
Msisdn: "13800008000",
Imsi: "460001234567890",
DeptId: 100,
CurrentPackageCode: "PKG_OLD",
PackageStatus: 1,
}
bind := &entity.TSimCardBindPkg{
Iccid: "8986001",
Msisdn: "13800008000",
PackageCode: "PKG_OLD",
BatchNo: "BATCH-OTHER",
}
if reason := validateChangeRow("", operator, row, card, bind); reason != "" {
t.Fatalf("validateChangeRow without sourceBatchNo = %q, want empty", reason)
}
if reason := validateChangeRow("BATCH-REQ", operator, row, card, bind); reason == "" {
t.Fatal("expected sourceBatchNo mismatch error")
}
}
func TestValidateChangeRowIdentityMatch(t *testing.T) {
operator := batchimport.OperatorContext{DeptId: 100}
card := &entity.TSimCardInfo{
Iccid: "8986001",
Msisdn: "13800008000",
Imsi: "460001234567890",
DeptId: 100,
CurrentPackageCode: "PKG_OLD",
PackageStatus: 1,
}
bind := &entity.TSimCardBindPkg{
Iccid: "8986001",
Msisdn: "13800008000",
PackageCode: "PKG_OLD",
}
if reason := validateChangeRow("", operator, &Row{Iccid: "8986001", Msisdn: "bad"}, card, bind); reason == "" {
t.Fatal("expected MSISDN mismatch error")
}
if reason := validateChangeRow("", operator, &Row{Iccid: "8986001", Imsi: "bad"}, card, bind); reason == "" {
t.Fatal("expected IMSI mismatch error")
}
}
func TestBuildBatchInfoOmitsEmptySourceBatchNo(t *testing.T) {
p := NewProcessor()
info := p.BuildBatchInfo(context.Background(), batchimport.SubmitRequest{
BizParams: &model.TSimCardChangeBatchSubmitParam{
NewPackageCode: "PKG_NEW",
DurationMonths: 12,
GiftDurationMonths: 0,
EffectiveMode: "immediate",
OfflineContractCompleted: true,
},
ExecutionResult: &CompleteOutput{
SourceBatchNo: "",
SourceMode: 0,
NewPackageCode: "PKG_NEW",
NewPackageName: "New Package",
OldPackageCode: "PKG_OLD",
OldPackageName: "Old Package",
DurationMonths: 12,
GiftDurationMonths: 0,
EffectiveMode: "immediate",
OfflineContractCompleted: true,
},
}, nil, nil, nil, 0)
if info == nil {
t.Fatal("info is nil")
}
data := info.Map()
if _, ok := data["sourceBatchNo"]; ok {
t.Fatalf("sourceBatchNo should be omitted when empty: %#v", data)
}
if _, ok := data["remark"]; ok {
t.Fatalf("remark should not exist: %#v", data)
}
if _, ok := data["buyerNote"]; ok {
t.Fatalf("buyerNote should not exist: %#v", data)
}
if _, ok := data["adminNote"]; ok {
t.Fatalf("adminNote should not exist: %#v", data)
}
}
func buildTestExcelFile(t *testing.T, rows [][]string) string {
t.Helper()
dir := t.TempDir()
path := filepath.Join(dir, "change.xlsx")
f := excelize.NewFile()
for i, row := range rows {
cell, err := excelize.CoordinatesToCellName(1, i+1)
if err != nil {
t.Fatalf("CoordinatesToCellName error = %v", err)
}
if err = f.SetSheetRow("Sheet1", cell, &row); err != nil {
t.Fatalf("SetSheetRow error = %v", err)
}
}
if err := f.SaveAs(path); err != nil {
t.Fatalf("SaveAs error = %v", err)
}
_ = f.Close()
if _, err := os.Stat(path); err != nil {
t.Fatalf("Stat error = %v", err)
}
return path
}