diff options
| author | historia <[not public]> | 2026-09-18 21:50:17 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-09-18 21:50:17 -0400 |
| commit | 2c38386484cdb507c4687caceb37e0b963e33594 (patch) | |
| tree | b25ecf9f509a48d8126f5a4b3a0482de42676239 /internal/game/wallet_test.go | |
| parent | e7848ea79a9a57fdf391d30c48ce649f3d2f6180 (diff) | |
| download | thehouseoficarus-2c38386484cdb507c4687caceb37e0b963e33594.tar.gz | |
fix: make slot payout and stake resolution one durable save
Diffstat (limited to 'internal/game/wallet_test.go')
| -rw-r--r-- | internal/game/wallet_test.go | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/internal/game/wallet_test.go b/internal/game/wallet_test.go index 218ce36..f20f96f 100644 --- a/internal/game/wallet_test.go +++ b/internal/game/wallet_test.go @@ -96,9 +96,9 @@ func TestWagerDebitsDurablyAndLeavesPendingStake(t *testing.T) { t.Fatalf("durable state after wager = credits %d, pending %+v; want 90 and one stake", loaded.Credits, loaded.PendingWagers) } - // A settlement that covers the stake credits and clears it in one save. + // A settlement that resolves the stake credits and clears it in one save. h.g.RunOnOwner(func() { - if err := w.PayStakeCover(10, []string{wager.ID}); err != nil { + if err := w.PayCredits(10, wager.ID); err != nil { t.Error(err) } }) @@ -108,6 +108,38 @@ func TestWagerDebitsDurablyAndLeavesPendingStake(t *testing.T) { } } +// TestWinningPayoutConsumesStakeInSameSave: PayCredits credits the payout and +// removes the stakes it resolves in ONE character save, so the durable file +// never holds a paid win with the stake still pending (which startup would +// refund on top of the win). +func TestWinningPayoutConsumesStakeInSameSave(t *testing.T) { + h := newHarness(t) + h.seedAccount("alice") + p := h.seedCharacter("alice", "alice") + h.g.RunOnOwner(func() { + p.Credits = 100 + w := casinoWallet{g: h.g, p: p} + wager, err := w.Wager(10) + if err != nil { + t.Error(err) + return + } + if err := w.PayCredits(20, wager.ID); err != nil { + t.Error(err) + } + }) + loaded, err := h.g.AccountStore.LoadCharacter("alice") + if err != nil { + t.Fatal(err) + } + if loaded.Credits != 110 { + t.Fatalf("credits after winning payout = %d, want 110", loaded.Credits) + } + if len(loaded.PendingWagers) != 0 { + t.Fatalf("durable pending wagers after a winning payout = %+v, want none (credited and consumed in one save)", loaded.PendingWagers) + } +} + func TestFailedWagerSaveReverts(t *testing.T) { h := newHarness(t) h.seedAccount("alice") |
