aboutsummaryrefslogtreecommitdiff
path: root/internal/casino/blackjack_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/casino/blackjack_test.go')
-rw-r--r--internal/casino/blackjack_test.go21
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) {