diff options
Diffstat (limited to 'internal/casino/blackjack_test.go')
| -rw-r--r-- | internal/casino/blackjack_test.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/internal/casino/blackjack_test.go b/internal/casino/blackjack_test.go index 510077d..0f7527c 100644 --- a/internal/casino/blackjack_test.go +++ b/internal/casino/blackjack_test.go @@ -323,6 +323,27 @@ func TestBlackjackDisconnectEarlierSeatPreservesTurn(t *testing.T) { } } +func TestBlackjackNonBettorMayLeaveMidRound(t *testing.T) { + table := newBlackjackTable(1, TableConfig{ID: "blackjack", Game: GameBlackjack, MaxPlayers: 2}, newTestRand()) + table.join("alice") + table.join("bob") + wa := &testWallet{credits: 100} + table.bet("alice", "", 10, wa) // opens the betting window + if events := table.leave("bob"); !hasMessage(events, "You stand up.") { + t.Fatalf("non-bettor leave blocked mid-round: %+v", events) + } + if table.players.count() != 1 { + t.Fatalf("bob's seat was not freed: count=%d", table.players.count()) + } + // The bettor's round still proceeds on the next tick. + if events := table.tick(); !hasSnapshot(events) { + t.Fatalf("round did not start after the non-bettor left: %+v", events) + } + if events := table.leave("alice"); !hasMessage(events, "middle of a blackjack round") { + t.Fatalf("bettor leave not blocked: %+v", events) + } +} + func hasMessage(events []Event, fragment string) bool { for _, event := range events { if contains(event.Message, fragment) || contains(event.PrivateMessage, fragment) { |
