package renewchange import ( "context" "testing" rc "git.5iot.com/iotlcm-public/iotlcm-worker-svr/internal/repository/renewchange" ) type fakeRenewEffectivePriceStore struct { depts map[int64]*rc.SysDeptRow prices map[renewEffectivePriceKey]*rc.FlowPackagePrice } type renewEffectivePriceKey struct { deptID int64 targetAgentID int64 scopeType int packageCode string } func (s fakeRenewEffectivePriceStore) LoadDept(ctx context.Context, tenantID string, deptID int64) (*rc.SysDeptRow, error) { return s.depts[deptID], nil } func (s fakeRenewEffectivePriceStore) LoadPriceOverride(ctx context.Context, tenantID string, deptID, targetAgentID int64, scopeType int, packageCode string) (*rc.FlowPackagePrice, error) { return s.prices[renewEffectivePriceKey{ deptID: deptID, targetAgentID: targetAgentID, scopeType: scopeType, packageCode: packageCode, }], nil } func TestResolveRenewEffectiveSalePriceUsesRecursiveParentCost(t *testing.T) { store := fakeRenewEffectivePriceStore{ depts: map[int64]*rc.SysDeptRow{ 100: {DeptId: 100, ParentId: 0}, 117: {DeptId: 117, ParentId: 100}, 131: {DeptId: 131, ParentId: 117}, }, prices: map[renewEffectivePriceKey]*rc.FlowPackagePrice{ {deptID: 100, targetAgentID: 117, scopeType: PriceScopeTargetAgent, packageCode: "yd-100m-3y"}: { Id: 86, AgentCostRatio: 1, AgentCostProfit: 4, }, {deptID: 117, targetAgentID: 0, scopeType: PriceScopeAgentDefault, packageCode: "yd-100m-3y"}: { Id: 91, AgentCostRatio: 1, AgentCostProfit: 1, }, {deptID: 117, targetAgentID: 131, scopeType: PriceScopeTargetAgent, packageCode: "yd-100m-3y"}: { Id: 92, AgentCostRatio: 1, AgentCostProfit: 5, }, }, } got, err := resolveRenewEffectiveSalePrice( context.Background(), store, "000000", 117, 131, &rc.FlowPackageInfo{ PackageCode: "yd-100m-3y", CostPrice: 10, SysDefaultRatio: 1, }, ) if err != nil { t.Fatalf("resolveRenewEffectiveSalePrice() error = %v", err) } if got.BaseAgentCost != 14 { t.Fatalf("base agent cost = %.2f, want 14.00", got.BaseAgentCost) } if got.AgentShipmentPrice != 19 { t.Fatalf("agent shipment price = %.2f, want 19.00", got.AgentShipmentPrice) } if got.Rule.PriceSource != PriceSourceTarget || got.Rule.TargetPriceId != 92 { t.Fatalf("rule = %+v, want target price 92", got.Rule) } }