aboutsummaryrefslogtreecommitdiff
path: root/internal/game/look_casino_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/look_casino_test.go')
-rw-r--r--internal/game/look_casino_test.go121
1 files changed, 121 insertions, 0 deletions
diff --git a/internal/game/look_casino_test.go b/internal/game/look_casino_test.go
new file mode 100644
index 0000000..37205cd
--- /dev/null
+++ b/internal/game/look_casino_test.go
@@ -0,0 +1,121 @@
+package game
+
+import (
+ "strings"
+ "testing"
+
+ "thehouseoficarus/internal/casino"
+)
+
+// A room with one table of each kind, so look targets and aliases resolve.
+const lookCasinoRoom = `name: Look Room
+casino_tables:
+ - id: bjtable
+ game: blackjack
+ blackjack:
+ decks: 2
+ blackjack_payout: 2
+ - id: crock
+ game: craps
+ craps:
+ variant: simplified
+ - id: wheel
+ game: roulette
+ - id: pgtable
+ game: paigow
+ pai_gow:
+ variant: classic
+ envy: true
+`
+
+func TestLookCasinoTableShowsDetailsWithoutInvariantBoards(t *testing.T) {
+ g, sess, conn := casinoCrapsGame(t, lookCasinoRoom)
+
+ // Craps: details only. The graphical felt and the full rule dump are gone.
+ conn.data = nil
+ if !g.lookCrapsTable(sess, "craps") {
+ t.Fatal("look craps did not match")
+ }
+ text := stripANSI(string(conn.data))
+ for _, want := range []string{"Craps", "Limits", "Seats", "State", "Rules", "Simplified Craps", "Seated"} {
+ if !strings.Contains(text, want) {
+ t.Fatalf("look craps missing %q: %s", want, text)
+ }
+ }
+ for _, gone := range []string{"PASS ONLY", "bet <amount> on pass", "HOUSE EDITION"} {
+ if strings.Contains(text, gone) {
+ t.Fatalf("look craps showed invariant content %q: %s", gone, text)
+ }
+ }
+
+ // Roulette: details only, no betting board or payout reference.
+ conn.data = nil
+ if !g.lookRouletteTable(sess, "roulette") {
+ t.Fatal("look roulette did not match")
+ }
+ text = stripANSI(string(conn.data))
+ if !strings.Contains(text, "Roulette / Single zero") || !strings.Contains(text, "single-zero wheel") {
+ t.Fatalf("look roulette missing variant summary: %s", text)
+ }
+ for _, gone := range []string{"Roulette payouts", "History: last"} {
+ if strings.Contains(text, gone) {
+ t.Fatalf("look roulette showed invariant board %q: %s", gone, text)
+ }
+ }
+}
+
+func TestLookCasinoTableAliasesAndFeltGames(t *testing.T) {
+ g, sess, conn := casinoCrapsGame(t, lookCasinoRoom)
+
+ // Play shortcuts resolve through look too, and the felt games keep their
+ // per-table rule card.
+ for target, want := range map[string]string{"bj": "BLACKJACK PAYS 2 TO 1", "paigow": "FORTUNE", "pai": "FORTUNE"} {
+ conn.data = nil
+ g.doLookTarget(sess, target)
+ text := stripANSI(string(conn.data))
+ if !strings.Contains(text, want) {
+ t.Fatalf("look %s missing %q: %s", target, want, text)
+ }
+ }
+ if g.lookCrapsTable(sess, "bj") {
+ t.Fatal("look craps matched a blackjack target")
+ }
+}
+
+func TestLookCasinoUsesLiveNormalizedConfig(t *testing.T) {
+ // The room fixture omits max_players and limits; look must report the
+ // defaults EnsureTable fills in, not zero values.
+ g, sess, conn := casinoCrapsGame(t, "name: Bare\ncasino_tables:\n - id: wheel\n game: roulette\n")
+ conn.data = nil
+ if !g.lookRouletteTable(sess, "wheel") {
+ t.Fatal("look by fixture id did not match")
+ }
+ text := stripANSI(string(conn.data))
+ if !strings.Contains(text, "Seats 0/8") || !strings.Contains(text, "Limits 1-") {
+ t.Fatalf("look missed normalized config: %s", text)
+ }
+}
+
+func TestPaigowGameNameAndRoomListing(t *testing.T) {
+ g, sess, _ := casinoCrapsGame(t, "name: Pai Gow\ncasino_tables:\n - id: fortune\n game: paigow\n pai_gow:\n envy: true\n")
+ g.executePlay(sess, []string{"paigow"}, "play paigow")
+ table, ok := g.Casino.Participation(sess.Player.Name)
+ if !ok || table == nil || table.Config.Game != casino.GamePaiGow {
+ t.Fatalf("play paigow did not join: %v %v", ok, table)
+ }
+ if string(table.Config.Game) != "paigow" {
+ t.Fatalf("game name = %q, want paigow", table.Config.Game)
+ }
+ // The room listing advertises the short name and no longer leaks limits.
+ room, err := g.World.LoadRoom(sess.Player.RoomID)
+ if err != nil {
+ t.Fatal(err)
+ }
+ text := stripANSI(strings.Join(g.showRoomCasinos(sess, room), "\n"))
+ if !strings.Contains(text, "play paigow") || !strings.Contains(text, "Pai Gow Poker | 1/6 seated") {
+ t.Fatalf("room listing wrong: %s", text)
+ }
+ if strings.Contains(text, "Limits") {
+ t.Fatalf("room listing still shows limits: %s", text)
+ }
+}