Files
kra-new/internal/service/business/ledger_excel_test.go
T

72 lines
2.7 KiB
Go

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("订单号前导零丢失")
}
}