diff options
Diffstat (limited to 'internal/casino/casino_review_regression_test.go')
| -rw-r--r-- | internal/casino/casino_review_regression_test.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/internal/casino/casino_review_regression_test.go b/internal/casino/casino_review_regression_test.go new file mode 100644 index 0000000..8860bd7 --- /dev/null +++ b/internal/casino/casino_review_regression_test.go @@ -0,0 +1,89 @@ +package casino + +import ( + "reflect" + "strings" + "testing" +) + +func TestCrapsRoundedOddsRespectTableMaximum(t *testing.T) { + for _, kind := range []string{"pass", "dontpass"} { + t.Run(kind, func(t *testing.T) { + table := crapsFixture() + table.Config.MaxBet = 11 + table.join("a") + w := &testWallet{chips: 100} + table.bet("a", kind, 10, w) + table.resolveRoll(3, 3) + // Eleven rounds to 15 for pass odds, or 12 for don't odds. + events := table.bet("a", "odds "+kind, 11, w) + if !hasMessage(events, "above the table maximum") || len(w.open) != 1 || table.players.get("a").bets[0].odds.Total != 0 { + t.Fatalf("rounded odds bypassed maximum: %+v", events) + } + }) + } +} + +func TestCrapsFailedUnbetPreservesAllLiveWagers(t *testing.T) { + for _, retry := range []bool{false, true} { + t.Run(map[bool]string{false: "roll", true: "retry"}[retry], func(t *testing.T) { + table := crapsFixture() + table.join("a") + w := &pokerTestWallet{testWallet: testWallet{chips: 1000}} + table.bet("a", "pass", 10, w) + table.resolveRoll(3, 3) + table.bet("a", "odds pass", 10, w) + table.bet("a", "place 8", 12, w) + before := table.view().Bets + w.fail = true + events := table.action("a", "unbet") + if !hasMessage(events, "All wagers remain live") || !reflect.DeepEqual(before, table.view().Bets) || len(w.open) != 3 || !table.players.get("a").HasBet { + t.Fatalf("failed refund changed live wagers: %+v", events) + } + w.fail = false + if retry { + table.action("a", "unbet") + table.action("a", "unbet") + if w.paid != 22 || len(w.open) != 1 || table.players.get("a").bets[0].odds.Total != 0 { + t.Fatalf("refund retry was not exact: %+v", w) + } + } else { + table.resolveRoll(3, 3) + if w.paid != 42 || len(w.open) != 1 { + t.Fatalf("preserved pass/odds failed to settle: %+v", w) + } + } + }) + } +} + +func TestPokerPreparationClearsPreviousBonusPresentation(t *testing.T) { + for _, command := range []string{"coins", "coins 1", "unbet", "denom 10", "hands 5", "game ddb", "feature off"} { + t.Run(command, func(t *testing.T) { + table, w, _ := pokerTestCabinet(t, VideoPokerConfig{Cabinet: CabinetHotRoll}) + pokerDeal(t, table, w) + table.action("alice", "draw") + p := table.players["alice"] + p.multiplier, p.dice = 12, [2]int{6, 6} + p.loaded = 5 + events := table.action("alice", command) + snap, ok := events[0].Snapshot.(*VideoPokerSnapshot) + if !ok { + t.Fatalf("command rejected: %+v", events) + } + if snap.Multiplier != 1 || snap.Dice != [2]int{} || snap.NoWin || snap.Held != [5]bool{} || len(snap.Cards) != 0 || len(snap.Lines) != 0 || len(snap.Current) != 0 { + t.Fatalf("stale result after %s: %+v", command, snap) + } + if len(w.open) != 0 { + t.Fatal("preparation created a wager") + } + }) + } +} + +func TestBonusPokerDeluxeRuleDescribesFlatQuadAward(t *testing.T) { + cfg := (VideoPokerConfig{Variant: "bonus_poker_deluxe"}).Normalize() + if rule := cfg.PairRule(); !strings.Contains(rule, "80 per coin") || strings.Contains(rule, "by rank") { + t.Fatalf("incorrect Deluxe rule: %s", rule) + } +} |
