From 08269639606c0481037cbde7ebaf2e0455460883 Mon Sep 17 00:00:00 2001 From: salmonik Date: Thu, 29 Oct 2026 18:43:09 +0100 Subject: v2.2.1: forfeit blackjack bets when leaving or disconnecting --- tests/blackjack.rs | 11 +++++++++++ tests/client_core.rs | 19 ++++++++++++------- tests/server_core.rs | 20 ++++++++++---------- 3 files changed, 33 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/blackjack.rs b/tests/blackjack.rs index 79721d3..f90ca8d 100644 --- a/tests/blackjack.rs +++ b/tests/blackjack.rs @@ -79,6 +79,17 @@ fn doubling_adds_the_base_bet_and_draws_one_card() { assert_eq!(hand.winnings, 40); } +#[test] +fn forfeiting_loses_the_bet() { + let mut hand = hand(&["10S", "9D", "6H", "8C"], 10); + hand.forfeit(); + + assert!(hand.is_done()); + assert_eq!(hand.result, "forfeit"); + assert_eq!(hand.winnings, 0); + assert_eq!(hand.bet, 10); +} + #[test] fn the_dealer_busts_and_the_player_wins() { let mut hand = hand(&["10S", "7H", "8H", "9C", "10H"], 10); diff --git a/tests/client_core.rs b/tests/client_core.rs index cfcf608..ec444bd 100644 --- a/tests/client_core.rs +++ b/tests/client_core.rs @@ -722,6 +722,7 @@ fn blackjack_deals_hits_and_settles() { assert!(h.board()[3].contains("You: [10♠] [6♥] 16")); assert!(h.board()[4].contains("Hit, stand or double.")); assert!(h.board()[5].contains("[D]ouble")); + assert!(h.board()[5].contains("[Q] Forfeit")); h.key(Key::Char('h')); assert_eq!( @@ -757,7 +758,7 @@ fn blackjack_deals_hits_and_settles() { } #[test] -fn blackjack_cancel_sends_a_cancel_action() { +fn blackjack_forfeit_is_sent_when_leaving_an_active_hand() { let mut h = Harness::new(); h.enter_blackjack(); h.key(Key::Char(' ')); @@ -784,10 +785,10 @@ fn blackjack_cancel_sends_a_cancel_action() { h.key(Key::Char('q')); assert_eq!( h.sent.last().map(String::as_str), - Some("BLACKJACK_ACTION bj1 cancel") + Some("BLACKJACK_ACTION bj1 forfeit") ); - let cancelled = bj_state( + let forfeited = bj_state( "bj1", "done", &["10S", "6H"], @@ -796,18 +797,22 @@ fn blackjack_cancel_sends_a_cancel_action() { 9, 10, 10, - 1000, + 990, &[], - "cancelled", + "forfeit", 0, ); h.reply(&format!( "BLACKJACK_STATE {}", - serde_json::to_string(&cancelled).unwrap() + serde_json::to_string(&forfeited).unwrap() )); assert!(h.board().is_empty()); - assert!(h.screen.lines.iter().any(|line| line == "Game exited.")); + assert!(h + .screen + .lines + .iter() + .any(|line| line.contains("forfeited (10 PLN lost)"))); } #[test] diff --git a/tests/server_core.rs b/tests/server_core.rs index 3ad277a..08a2bf2 100644 --- a/tests/server_core.rs +++ b/tests/server_core.rs @@ -457,7 +457,7 @@ fn blackjack_natural_settles_immediately() { } #[test] -fn blackjack_cancel_refunds_the_reserved_bet() { +fn blackjack_forfeit_keeps_the_reserved_bet() { let (mut core, _path) = setup_blackjack("blackjack-cancel", &["10S", "9D", "6H", "8C"]); let mut state = ConnectionState::default(); @@ -467,20 +467,20 @@ fn blackjack_cancel_refunds_the_reserved_bet() { let current = blackjack_state(&core.handle_message(&mut state, "PLAY_START blackjack 10")); assert_eq!(current.balance, 990); - let cancelled = blackjack_state(&core.handle_message( + let forfeited = blackjack_state(&core.handle_message( &mut state, - &format!("BLACKJACK_ACTION {} cancel", current.session_id), + &format!("BLACKJACK_ACTION {} forfeit", current.session_id), )); - assert_eq!(cancelled.result, "cancelled"); - assert_eq!(cancelled.balance, 1000); - assert_eq!(core.balance("alice"), Some(1000)); - assert_eq!(core.play_count("alice"), 0); + assert_eq!(forfeited.result, "forfeit"); + assert_eq!(forfeited.balance, 990); + assert_eq!(core.balance("alice"), Some(990)); + assert_eq!(core.play_count("alice"), 1); assert_eq!(core.session_count(), 0); } #[test] -fn blackjack_disconnect_refunds_the_reserved_bet() { +fn blackjack_disconnect_forfeits_the_reserved_bet() { let (mut core, _path) = setup_blackjack("blackjack-disconnect", &["10S", "9D", "6H", "8C"]); let mut state = ConnectionState::default(); @@ -492,7 +492,7 @@ fn blackjack_disconnect_refunds_the_reserved_bet() { core.disconnect(&state); - assert_eq!(core.balance("alice"), Some(1000)); - assert_eq!(core.play_count("alice"), 0); + assert_eq!(core.balance("alice"), Some(990)); + assert_eq!(core.play_count("alice"), 1); assert_eq!(core.session_count(), 0); } -- cgit v1.2.3