added PICK SKY ready gate: SigReservation.ready + countdown_remaining fields, Room.SKY_SELECT status + sig_select_started_at, sig_ready + sig_confirm views, WS notifiers for countdown_start/cancel/polarity_room_done/pick_sky_available, migration 0031, PICK SKY btn in hex center at SKY_SELECT, tray cell 2 sig card placeholder; FTs SRG1-8 written (pending JS/consumer)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-04-09 01:17:24 -04:00
parent 3800c5bdad
commit df421fb6c0
9 changed files with 1003 additions and 1 deletions

View File

@@ -530,3 +530,66 @@ class TarotCardCautionsTest(TestCase):
for caution in schizo.cautions:
self.assertIn("reverse", caution)
self.assertNotIn("transform", caution)
# ── SigReservation ready gate ─────────────────────────────────────────────────
class SigReservationReadyGateTest(TestCase):
"""SigReservation.ready and countdown_remaining fields."""
def setUp(self):
self.earthman = DeckVariant.objects.get(slug="earthman")
owner = User.objects.create(email="owner@test.io")
room = Room.objects.create(name="R", owner=owner)
card = TarotCard.objects.get(
deck_variant=self.earthman, arcana="MIDDLE", suit="BRANDS", number=11
)
self.res = SigReservation.objects.create(
room=room, gamer=owner, card=card, role="PC", polarity="levity"
)
def test_ready_defaults_to_false(self):
self.assertFalse(self.res.ready)
def test_countdown_remaining_defaults_to_none(self):
self.assertIsNone(self.res.countdown_remaining)
def test_ready_can_be_set_true(self):
self.res.ready = True
self.res.save()
self.res.refresh_from_db()
self.assertTrue(self.res.ready)
def test_countdown_remaining_can_be_saved(self):
self.res.countdown_remaining = 7
self.res.save()
self.res.refresh_from_db()
self.assertEqual(self.res.countdown_remaining, 7)
# ── Room SKY_SELECT status ────────────────────────────────────────────────────
class RoomSkySelectStatusTest(TestCase):
"""Room.SKY_SELECT constant and sig_select_started_at field."""
def setUp(self):
owner = User.objects.create(email="owner@test.io")
self.room = Room.objects.create(name="R", owner=owner)
def test_sky_select_constant_value(self):
self.assertEqual(Room.SKY_SELECT, "SKY_SELECT")
def test_sky_select_is_valid_table_status_choice(self):
choices = [c[0] for c in Room.TABLE_STATUS_CHOICES]
self.assertIn(Room.SKY_SELECT, choices)
def test_sig_select_started_at_defaults_to_none(self):
self.assertIsNone(self.room.sig_select_started_at)
def test_sig_select_started_at_can_be_set(self):
from django.utils import timezone
now = timezone.now()
self.room.sig_select_started_at = now
self.room.save()
self.room.refresh_from_db()
self.assertIsNotNone(self.room.sig_select_started_at)