95 lines
2.9 KiB
Go
95 lines
2.9 KiB
Go
package store
|
|
|
|
import "testing"
|
|
|
|
func TestResolveEffectiveBillingConfigKeepsPricingRulesAuthoritative(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input EffectiveBillingConfigInput
|
|
want float64
|
|
}{
|
|
{
|
|
name: "inherited rule replaces stale platform snapshot",
|
|
input: EffectiveBillingConfigInput{
|
|
BaseConfig: videoBillingConfig(100),
|
|
LegacyPlatformModelConfig: videoBillingConfig(100),
|
|
InheritedRuleSetConfig: videoBillingConfig(416),
|
|
},
|
|
want: 416,
|
|
},
|
|
{
|
|
name: "legacy snapshot remains a fallback without a rule",
|
|
input: EffectiveBillingConfigInput{
|
|
BaseConfig: videoBillingConfig(100),
|
|
LegacyPlatformModelConfig: videoBillingConfig(125),
|
|
},
|
|
want: 125,
|
|
},
|
|
{
|
|
name: "model rule remains an explicit pricing exception",
|
|
input: EffectiveBillingConfigInput{
|
|
BaseConfig: videoBillingConfig(100),
|
|
LegacyPlatformModelConfig: videoBillingConfig(125),
|
|
InheritedRuleSetConfig: videoBillingConfig(416),
|
|
ModelRuleSetConfig: videoBillingConfig(500),
|
|
},
|
|
want: 500,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
config := ResolveEffectiveBillingConfig(test.input)
|
|
video, ok := config["video"].(map[string]any)
|
|
if !ok {
|
|
t.Fatalf("expected video billing config, got %#v", config)
|
|
}
|
|
if got := video["basePrice"]; got != test.want {
|
|
t.Fatalf("video base price = %#v, want %v", got, test.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestResolveEffectiveBillingConfigAppliesOverrideLast(t *testing.T) {
|
|
config := ResolveEffectiveBillingConfig(EffectiveBillingConfigInput{
|
|
InheritedRuleSetConfig: videoBillingConfig(416),
|
|
Override: videoBillingConfig(600),
|
|
})
|
|
video, ok := config["video"].(map[string]any)
|
|
if !ok || video["basePrice"] != float64(600) {
|
|
t.Fatalf("expected override price 600, got %#v", config)
|
|
}
|
|
}
|
|
|
|
func TestResolveEffectiveBillingConfigPreservesBaseResourcesMissingFromRuleSet(t *testing.T) {
|
|
config := ResolveEffectiveBillingConfig(EffectiveBillingConfigInput{
|
|
BaseConfig: map[string]any{
|
|
"music": map[string]any{"basePrice": float64(20)},
|
|
"audio": map[string]any{"basePrice": float64(1)},
|
|
"video": map[string]any{"basePrice": float64(100)},
|
|
},
|
|
InheritedRuleSetConfig: map[string]any{
|
|
"video": map[string]any{"basePrice": float64(416)},
|
|
},
|
|
})
|
|
|
|
assertBillingBasePrice(t, config, "music", 20)
|
|
assertBillingBasePrice(t, config, "audio", 1)
|
|
assertBillingBasePrice(t, config, "video", 416)
|
|
}
|
|
|
|
func assertBillingBasePrice(t *testing.T, config map[string]any, resource string, want float64) {
|
|
t.Helper()
|
|
resourceConfig, ok := config[resource].(map[string]any)
|
|
if !ok || resourceConfig["basePrice"] != want {
|
|
t.Fatalf("%s base price = %#v, want %v", resource, config[resource], want)
|
|
}
|
|
}
|
|
|
|
func videoBillingConfig(basePrice float64) map[string]any {
|
|
return map[string]any{
|
|
"video": map[string]any{"basePrice": basePrice},
|
|
}
|
|
}
|