aboutsummaryrefslogtreecommitdiff
path: root/internal/game/wallet_test.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-09-18 21:50:17 -0400
committerhistoria <[not public]>2026-09-18 21:50:17 -0400
commit2c38386484cdb507c4687caceb37e0b963e33594 (patch)
treeb25ecf9f509a48d8126f5a4b3a0482de42676239 /internal/game/wallet_test.go
parente7848ea79a9a57fdf391d30c48ce649f3d2f6180 (diff)
downloadthehouseoficarus-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.go36
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")