mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-11 00:14:00 +00:00
test: cover PostgreSQL season rollover
This commit is contained in:
@@ -285,6 +285,48 @@ func TestPostgreSQLResultCompletionAndOutboxAreAtomicAndReplayable(t *testing.T)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPostgreSQLRankedSeasonRolloverIsExactlyOnce(t *testing.T) {
|
||||
db := openIntegrationPostgres(t)
|
||||
applyIntegrationMigrations(t, db)
|
||||
now := time.Now().UTC().Truncate(time.Microsecond)
|
||||
ctx := context.Background()
|
||||
if _, err := db.ExecContext(ctx, `INSERT INTO identities (player_id, steam_id) VALUES ('season-player', 'season-steam')`); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := db.ExecContext(ctx, `INSERT INTO ratings (player_id, rating, deviation, volatility, ranked_games) VALUES ('season-player', 1900, 100, 0.12, 25)`); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
profile := domain.RankedProfile{Rating: domain.Rating{Value: 1900, RD: 100, Volatility: 0.12}, RankedGames: 25}
|
||||
updated, applied, err := ApplyRankedSeasonRollover(ctx, db, "season-player", "season-1", profile, now)
|
||||
if err != nil || !applied {
|
||||
t.Fatalf("first season rollover = %+v applied=%v err=%v", updated, applied, err)
|
||||
}
|
||||
if updated.Value != 1800 || updated.RD != 200 {
|
||||
t.Fatalf("unexpected rolled rating: %+v", updated)
|
||||
}
|
||||
var rating float64
|
||||
var markers int
|
||||
if err := db.QueryRow(`SELECT rating FROM ratings WHERE player_id = 'season-player'`).Scan(&rating); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.QueryRow(`SELECT count(*) FROM ranked_season_rollovers WHERE player_id = 'season-player' AND season_id = 'season-1'`).Scan(&markers); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if rating != 1800 || markers != 1 {
|
||||
t.Fatalf("durable rollover state rating=%v markers=%d", rating, markers)
|
||||
}
|
||||
_, applied, err = ApplyRankedSeasonRollover(ctx, db, "season-player", "season-1", profile, now.Add(time.Second))
|
||||
if err != nil || applied {
|
||||
t.Fatalf("duplicate season rollover applied=%v err=%v", applied, err)
|
||||
}
|
||||
if err := db.QueryRow(`SELECT rating FROM ratings WHERE player_id = 'season-player'`).Scan(&rating); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if rating != 1800 {
|
||||
t.Fatalf("duplicate rollover changed rating to %v", rating)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPostgreSQLMigrationsAreForwardExecutable(t *testing.T) {
|
||||
db := openIntegrationPostgres(t)
|
||||
applyIntegrationMigrations(t, db)
|
||||
|
||||
Reference in New Issue
Block a user