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