2026-07-12 00:47:20 +08:00

61 lines
2.0 KiB
Go

package appconfig
import "testing"
func TestStoredGiftComboConfigFromRequestPreservesExplicitKillSwitch(t *testing.T) {
config, err := storedGiftComboConfigFromRequest(GiftComboConfigRequest{
Enabled: false,
APIVersion: 2,
WindowMS: 300,
MaxGiftCountPerBatch: 999,
MaxGiftUnitsPerBatch: 5_000,
MaxInFlight: 2,
MaxPendingBatches: 20,
RetryMaxAttempts: 5,
RetryBaseDelayMS: 250,
RolloutBasisPoints: 5_000,
})
if err != nil {
t.Fatalf("storedGiftComboConfigFromRequest failed: %v", err)
}
if config.Enabled || config.RolloutBasisPoints != 5_000 {
t.Fatalf("explicit kill switch changed during normalization: %+v", config)
}
}
func TestNormalizeStoredGiftComboConfigRejectsQueueWithoutBackpressure(t *testing.T) {
config := defaultStoredGiftComboConfig()
config.APIVersion = 1
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
t.Fatal("apiVersion 1 must not turn the current Flutter back to the legacy HTTP contract")
}
config = defaultStoredGiftComboConfig()
config.MaxInFlight = 3
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
t.Fatal("maxInFlight above the server contract must be rejected")
}
config = defaultStoredGiftComboConfig()
config.MaxPendingBatches = 0
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
t.Fatal("unbounded/empty pending queue policy must be rejected")
}
config = defaultStoredGiftComboConfig()
config.MaxInFlight = 2
config.MaxPendingBatches = 1
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
t.Fatal("pending queue smaller than in-flight concurrency must be rejected")
}
}
func TestNormalizeStoredGiftComboConfigForReadPromotesLegacyVersionMarker(t *testing.T) {
config := defaultStoredGiftComboConfig()
config.APIVersion = 1
resolved, err := normalizeStoredGiftComboConfigForRead(config)
if err != nil {
t.Fatalf("legacy stored config must remain readable: %v", err)
}
if resolved.APIVersion != 2 {
t.Fatalf("legacy stored marker was not promoted to V2: %+v", resolved)
}
}