@@ -170,3 +170,26 @@ func TestOverviewAggregates(t *testing.T) {
|
||||
t.Errorf("cost days = %d, want 1", len(out.Cost.Days))
|
||||
}
|
||||
}
|
||||
|
||||
// TestAggregateCostDaysSplitsCurrencies 锁定多币种聚合:不同币种不相加,
|
||||
// 顶层字段恒为合计最大的主币种,其余币种进 Series。
|
||||
func TestAggregateCostDaysSplitsCurrencies(t *testing.T) {
|
||||
snaps := []model.CostSnapshot{
|
||||
{OciConfigID: 1, Day: "2026-07-20", Amount: 1.5, Currency: "USD"},
|
||||
{OciConfigID: 2, Day: "2026-07-20", Amount: 9.0, Currency: "EUR"},
|
||||
{OciConfigID: 1, Day: "2026-07-21", Amount: 2.5, Currency: "USD"},
|
||||
{OciConfigID: 3, Day: "2026-07-21", Amount: 3.0, Currency: "USD"},
|
||||
}
|
||||
var cost OverviewCost
|
||||
aggregateCostDays(&cost, snaps)
|
||||
if cost.CoveredConfigs != 3 || len(cost.Series) != 2 {
|
||||
t.Fatalf("covered=%d series=%d, want 3, 2", cost.CoveredConfigs, len(cost.Series))
|
||||
}
|
||||
if cost.Currency != "EUR" || cost.Total != 9.0 {
|
||||
t.Errorf("主币种 = %s %.1f, want EUR 9.0(合计最大)", cost.Currency, cost.Total)
|
||||
}
|
||||
usd := cost.Series[1]
|
||||
if usd.Currency != "USD" || usd.Total != 7.0 || len(usd.Days) != 2 || usd.Days[1].Amount != 5.5 {
|
||||
t.Errorf("USD 序列 = %+v, want 两日合计 7.0 且 21 日 5.5", usd)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user