2026-05-29 19:56:14 +08:00

59 lines
1.9 KiB
Go

package teamsalarypolicy
import "testing"
func TestPolicyModelFromRequestBuildsBDLevels(t *testing.T) {
item, err := policyModelFromRequest("lalu", 7, policyRequest{
PolicyType: "bd",
Name: "BD 默认政策",
RegionID: 101,
Status: "active",
SettlementTriggerMode: "manual",
Levels: []levelRequest{
{Level: 2, ThresholdUSD: "200", RatePercent: "8", SalaryUSD: "16"},
{Level: 1, ThresholdUSD: "100", RatePercent: "8", SalaryUSD: "8"},
},
})
if err != nil {
t.Fatalf("policy should be valid: %v", err)
}
if item.PolicyType != policyTypeBD || item.CreatedByAdminID != 7 || item.SettlementTriggerMode != settlementTriggerManual {
t.Fatalf("policy fields mismatch: %+v", item)
}
if len(item.Levels) != 2 || item.Levels[0].LevelNo != 1 || item.Levels[1].ThresholdUSD != "200.00" {
t.Fatalf("levels should be sorted and normalized: %+v", item.Levels)
}
if item.Levels[0].RatePercent != "8.0000" || item.Levels[1].SalaryUSD != "16.00" {
t.Fatalf("level decimals mismatch: %+v", item.Levels)
}
}
func TestPolicyModelFromRequestRejectsNonIncreasingThreshold(t *testing.T) {
_, err := policyModelFromRequest("lalu", 1, policyRequest{
PolicyType: "admin",
Name: "Invalid",
RegionID: 101,
Levels: []levelRequest{
{Level: 1, ThresholdUSD: "500", RatePercent: "20", SalaryUSD: "100"},
{Level: 2, ThresholdUSD: "200", RatePercent: "20", SalaryUSD: "200"},
},
})
if err == nil {
t.Fatal("expected non-increasing threshold to fail")
}
}
func TestPolicyModelFromRequestRejectsInvalidPolicyType(t *testing.T) {
_, err := policyModelFromRequest("lalu", 1, policyRequest{
PolicyType: "host",
Name: "Invalid",
RegionID: 101,
Levels: []levelRequest{
{Level: 1, ThresholdUSD: "100", RatePercent: "8", SalaryUSD: "8"},
},
})
if err == nil {
t.Fatal("expected invalid policy type to fail")
}
}