package casino import ( "strings" "testing" ) func TestBlackjackRuleCardDefaultsAndOverrides(t *testing.T) { yes, no := true, false cases := []struct { cfg BlackjackConfig want []string }{ {BlackjackConfig{}, []string{"Number of decks: 8", "Blackjack pays 3:2", "Dealer stands on soft 17", "Double after split: Yes", "Maximum split hands: 4", "Surrender: Not offered"}}, {BlackjackConfig{Decks: 1, BlackjackPayout: 1.2, DealerHitSoft17: &yes, DoubleAfterSplit: &no, MaxSplitHands: 2, DoubleSplitBlackjack: &no}, []string{"Number of decks: 1", "Blackjack pays 6:5", "Dealer hits soft 17", "Double after split: No", "Re-splitting: No", "Split-and-doubled 21 receives blackjack payout: No"}}, {BlackjackConfig{Decks: 6, ResplitAces: &yes, Surrender: &yes}, []string{"Number of decks: 6", "Re-splitting aces: Yes", "Surrender: Late"}}, } for _, tc := range cases { cfg := TableConfig{ID: "test", Game: GameBlackjack, Blackjack: tc.cfg} text := cfg.BlackjackRulesText() for _, want := range tc.want { if !strings.Contains(text, want) { t.Errorf("missing %q in %s", want, text) } } table := newBlackjackTable(42, cfg, newTestRand()) events := table.join("alice") found := false for _, e := range events { if view, ok := e.Snapshot.(*BlackjackRulesView); ok && view.Config.Blackjack == table.Config.Blackjack { found = true if e.Public { t.Error("rules broadcast to bystanders") } } } if !found { t.Fatal("joining did not ship the rules view") } } } func TestSixToFiveNaturalPayout(t *testing.T) { hand := &blackjackHand{bet: 10, cards: []card{{rank: "A"}, {rank: "K"}}} _, payout, err := settleHand(hand, 20, false, BlackjackConfig{BlackjackPayout: 1.2}) if err != nil || payout != 22 { t.Fatalf("payout=%d err=%v", payout, err) } }