package business import ( "bytes" "context" "testing" "github.com/xuri/excelize/v2" "kra/internal/biz/business" "kra/internal/service/dto" ) type ledgerExportFake struct{ LedgerUsecase } func (ledgerExportFake) ExportRegistrations(context.Context, business.LedgerFilter) ([]*business.Registration, error) { amount := "9007199254740993.10" stamp := int64(1793577600) return []*business.Registration{{ChannelKey: business.ChannelKey{SourceDB: "lx", ID: 9007199254740993}, RegisterTime: &stamp, FirstGameName: "游戏", TotalPayAmount: &amount, LedgerNames: business.LedgerNames{PromoteAccount: "=1+1"}}}, nil } func (ledgerExportFake) ExportSpends(context.Context, business.LedgerFilter) ([]*business.Spend, error) { amount := "123.45" return []*business.Spend{{ChannelKey: business.ChannelKey{SourceDB: "lx", ID: 9007199254740995}, OrderNumber: "000000000000000001", PayAmount: &amount}}, nil } func TestLedgerWorkbookPreservesNumbersAndText(t *testing.T) { s := &LedgerService{uc: ledgerExportFake{}} data, err := s.ExportRegistrations(context.Background(), &dto.LedgerQuery{}) if err != nil { t.Fatal(err) } f, err := excelize.OpenReader(bytes.NewReader(data)) if err != nil { t.Fatal(err) } defer f.Close() if dimension, err := f.GetSheetDimension("注册明细"); err != nil || dimension != "A1:M2" { t.Fatalf("注册导出范围不完整: %s %v", dimension, err) } amount, _ := f.GetCellValue("注册明细", "H2", excelize.Options{RawCellValue: true}) formula, _ := f.GetCellFormula("注册明细", "K2") text, _ := f.GetCellValue("注册明细", "K2") if amount != "9007199254740993.10" || formula != "" || text != "=1+1" { t.Fatalf("导出丢失金额精度或把账号当成公式: %s %s %s", amount, formula, text) } for _, cell := range []string{"C2", "D2"} { value, _ := f.GetCellValue("注册明细", cell) kind, _ := f.GetCellType("注册明细", cell) if value != "9007199254740993" || kind != excelize.CellTypeSharedString { t.Fatalf("ID must be exact text: %s %v", value, kind) } } rows, err := f.GetRows("注册明细") if err != nil || len(rows) != 2 || rows[0][0] != "sourceDb" || rows[0][12] != "所属商务" { t.Fatal("原导出字段与顺序丢失") } data, err = s.ExportSpends(context.Background(), &dto.LedgerQuery{}) if err != nil { t.Fatal(err) } pay, err := excelize.OpenReader(bytes.NewReader(data)) if err != nil { t.Fatal(err) } defer pay.Close() if dimension, err := pay.GetSheetDimension("充值明细"); err != nil || dimension != "A1:R2" { t.Fatalf("充值导出范围不完整: %s %v", dimension, err) } order, _ := pay.GetCellValue("充值明细", "E2") if order != "000000000000000001" { t.Fatal("订单号前导零丢失") } }