remove obsolete sig-select FTs (S1/S3/S4) based on old sequential 36-card design
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
The new sig-select has two parallel 18-card overlays per polarity group (levity: PC/NC/SC; gravity: BC/EC/AC) — no shared 36-card deck, no active-seat turn order. S1 (36 cards), S3 (PC picks → deck shrinks → active advances to NC), and S4 (non-active seat blocked) all tested the old design and have been failing in CI. S2 (seat display order) passed and is kept. Header comment updated to match. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,18 +16,9 @@ from .test_room_role_select import _fill_room_via_orm
|
||||
|
||||
# ── Significator Selection ────────────────────────────────────────────────────
|
||||
#
|
||||
# After all 6 roles are revealed the room enters SIG_SELECT. A 36-card
|
||||
# Significator deck appears at the table centre; gamers pick in seat order
|
||||
# (PC → NC → EC → SC → AC → BC). Selected cards are removed from the shared
|
||||
# pile in real time via WebSocket, exactly as role selection works.
|
||||
#
|
||||
# Deck composition (18 unique cards × 2 — one from levity, one from gravity):
|
||||
# SC / AC (Shepherd / Alchemist) → M/J/Q/K of Swords & Cups (16 cards)
|
||||
# PC / BC (Player / Builder) → M/J/Q/K of Wands & Pentacles (16 cards)
|
||||
# NC / EC (Narrator / Economist) → The Schiz (0) + Chancellor (1) ( 4 cards)
|
||||
#
|
||||
# Levity pile: SC, PC, NC contributions. Gravity pile: AC, BC, EC contributions.
|
||||
# Cards retain the contributor's deck card-back — up to 6 distinct backs active.
|
||||
# After all 6 roles are revealed the room enters SIG_SELECT. Two parallel
|
||||
# 18-card overlays appear (levity: PC/NC/SC; gravity: BC/EC/AC). Each polarity
|
||||
# group picks simultaneously — no sequential turn order.
|
||||
#
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -92,34 +83,7 @@ class SigSelectTest(FunctionalTest):
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Test S1 — Significator deck of 36 cards appears at table centre #
|
||||
# ------------------------------------------------------------------ #
|
||||
|
||||
def test_sig_deck_appears_with_36_cards_after_all_roles_revealed(self):
|
||||
founder, _ = User.objects.get_or_create(email="founder@test.io")
|
||||
room = Room.objects.create(name="Sig Deck Test", owner=founder)
|
||||
_fill_room_via_orm(room, [
|
||||
"founder@test.io", "amigo@test.io", "bud@test.io",
|
||||
"pal@test.io", "dude@test.io", "bro@test.io",
|
||||
])
|
||||
_assign_all_roles(room)
|
||||
|
||||
self.create_pre_authenticated_session("founder@test.io")
|
||||
room_url = f"{self.live_server_url}/gameboard/room/{room.id}/gate/"
|
||||
self.browser.get(room_url)
|
||||
|
||||
# Significator deck is visible at the table centre
|
||||
sig_deck = self.wait_for(
|
||||
lambda: self.browser.find_element(By.ID, "id_sig_deck")
|
||||
)
|
||||
self.assertTrue(sig_deck.is_displayed())
|
||||
|
||||
# It contains exactly 36 cards
|
||||
cards = self.browser.find_elements(By.CSS_SELECTOR, "#id_sig_deck .sig-card")
|
||||
self.assertEqual(len(cards), 36)
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Test S2 — Seats reorder to canonical role sequence at SIG_SELECT #
|
||||
# Test S1 — Seats reorder to canonical role sequence at SIG_SELECT #
|
||||
# ------------------------------------------------------------------ #
|
||||
|
||||
def test_seats_display_in_pc_nc_ec_sc_ac_bc_order_after_reveal(self):
|
||||
@@ -145,84 +109,6 @@ class SigSelectTest(FunctionalTest):
|
||||
roles_in_order = [s.get_attribute("data-role") for s in seats]
|
||||
self.assertEqual(roles_in_order, SIG_SEAT_ORDER)
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Test S3 — First seat (PC) can select a significator; deck shrinks #
|
||||
# ------------------------------------------------------------------ #
|
||||
|
||||
def test_first_seat_pc_can_select_significator_and_deck_shrinks(self):
|
||||
founder, _ = User.objects.get_or_create(email="founder@test.io")
|
||||
room = Room.objects.create(name="PC Select Test", owner=founder)
|
||||
# Founder is assigned PC (slot 1 → first in canonical order → active)
|
||||
_fill_room_via_orm(room, [
|
||||
"founder@test.io", "amigo@test.io", "bud@test.io",
|
||||
"pal@test.io", "dude@test.io", "bro@test.io",
|
||||
])
|
||||
_assign_all_roles(room, role_order=["PC", "NC", "EC", "SC", "AC", "BC"])
|
||||
|
||||
self.create_pre_authenticated_session("founder@test.io")
|
||||
room_url = f"{self.live_server_url}/gameboard/room/{room.id}/gate/"
|
||||
self.browser.get(room_url)
|
||||
|
||||
# 36-card sig deck is present and the founder's seat is active
|
||||
self.wait_for(
|
||||
lambda: self.browser.find_element(By.CSS_SELECTOR, "#id_sig_deck .sig-card")
|
||||
)
|
||||
self.wait_for(
|
||||
lambda: self.browser.find_element(
|
||||
By.CSS_SELECTOR, ".table-seat.active[data-role='PC']"
|
||||
)
|
||||
)
|
||||
|
||||
# Click the first card in the significator deck to select it
|
||||
first_card = self.browser.find_element(
|
||||
By.CSS_SELECTOR, "#id_sig_deck .sig-card"
|
||||
)
|
||||
first_card.click()
|
||||
self.confirm_guard()
|
||||
|
||||
# Deck now has 35 cards — one pile copy of the selected card removed
|
||||
self.wait_for(
|
||||
lambda: self.assertEqual(
|
||||
len(self.browser.find_elements(By.CSS_SELECTOR, "#id_sig_deck .sig-card")),
|
||||
35,
|
||||
)
|
||||
)
|
||||
|
||||
# Active seat advances to NC
|
||||
self.wait_for(
|
||||
lambda: self.browser.find_element(
|
||||
By.CSS_SELECTOR, ".table-seat.active[data-role='NC']"
|
||||
)
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------------ #
|
||||
# Test S4 — Ineligible seat cannot interact with sig deck #
|
||||
# ------------------------------------------------------------------ #
|
||||
|
||||
def test_non_active_seat_cannot_select_significator(self):
|
||||
founder, _ = User.objects.get_or_create(email="founder@test.io")
|
||||
room = Room.objects.create(name="Ineligible Sig Test", owner=founder)
|
||||
# Founder is NC (second in canonical order) — not first
|
||||
_fill_room_via_orm(room, [
|
||||
"founder@test.io", "amigo@test.io", "bud@test.io",
|
||||
"pal@test.io", "dude@test.io", "bro@test.io",
|
||||
])
|
||||
_assign_all_roles(room, role_order=["NC", "PC", "EC", "SC", "AC", "BC"])
|
||||
|
||||
self.create_pre_authenticated_session("founder@test.io")
|
||||
room_url = f"{self.live_server_url}/gameboard/room/{room.id}/gate/"
|
||||
self.browser.get(room_url)
|
||||
|
||||
self.wait_for(lambda: self.browser.find_element(By.ID, "id_sig_deck"))
|
||||
|
||||
# Click a sig card — it must not trigger a selection (deck stays at 36)
|
||||
self.browser.find_element(By.CSS_SELECTOR, "#id_sig_deck .sig-card").click()
|
||||
self.wait_for(
|
||||
lambda: self.assertEqual(
|
||||
len(self.browser.find_elements(By.CSS_SELECTOR, "#id_sig_deck .sig-card")),
|
||||
36,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@tag("channels")
|
||||
|
||||
Reference in New Issue
Block a user