diff --git a/src/apps/epic/migrations/0006_add_deck_variant_to_tableseat.py b/src/apps/epic/migrations/0006_add_deck_variant_to_tableseat.py new file mode 100644 index 0000000..43579bc --- /dev/null +++ b/src/apps/epic/migrations/0006_add_deck_variant_to_tableseat.py @@ -0,0 +1,19 @@ +# Generated by Django 6.0 on 2026-04-28 02:35 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('epic', '0005_seed_astro_reference_tables'), + ] + + operations = [ + migrations.AddField( + model_name='tableseat', + name='deck_variant', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='active_seats', to='epic.deckvariant'), + ), + ] diff --git a/src/apps/epic/models.py b/src/apps/epic/models.py index 6bf6e97..a2f1883 100644 --- a/src/apps/epic/models.py +++ b/src/apps/epic/models.py @@ -185,6 +185,10 @@ class TableSeat(models.Model): "TarotCard", null=True, blank=True, on_delete=models.SET_NULL, related_name="significator_seats", ) + deck_variant = models.ForeignKey( + "DeckVariant", null=True, blank=True, + on_delete=models.SET_NULL, related_name="active_seats", + ) class DeckVariant(models.Model): diff --git a/src/apps/epic/tests/integrated/test_views.py b/src/apps/epic/tests/integrated/test_views.py index 588327b..964e7e8 100644 --- a/src/apps/epic/tests/integrated/test_views.py +++ b/src/apps/epic/tests/integrated/test_views.py @@ -680,6 +680,27 @@ class SelectRoleViewTest(TestCase): ) mock_notify.assert_called_once_with(self.room.id) + def test_select_role_assigns_equipped_deck_to_seat(self): + earthman = DeckVariant.objects.get(slug="earthman") + self.founder.equipped_deck = earthman + self.founder.save(update_fields=["equipped_deck"]) + self.client.post( + reverse("epic:select_role", kwargs={"room_id": self.room.id}), + data={"role": "PC"}, + ) + seat = TableSeat.objects.get(room=self.room, slot_number=1) + self.assertEqual(seat.deck_variant, earthman) + + def test_select_role_no_deck_leaves_deck_variant_null(self): + self.founder.equipped_deck = None + self.founder.save(update_fields=["equipped_deck"]) + self.client.post( + reverse("epic:select_role", kwargs={"room_id": self.room.id}), + data={"role": "PC"}, + ) + seat = TableSeat.objects.get(room=self.room, slot_number=1) + self.assertIsNone(seat.deck_variant) + def test_select_role_requires_login(self): self.client.logout() response = self.client.post( diff --git a/src/apps/epic/views.py b/src/apps/epic/views.py index 8371d37..0702713 100644 --- a/src/apps/epic/views.py +++ b/src/apps/epic/views.py @@ -575,6 +575,7 @@ def select_role(request, room_id): if room.table_seats.filter(role=role).exists(): return HttpResponse(status=409) active_seat.role = role + active_seat.deck_variant = request.user.equipped_deck active_seat.save() record(room, GameEvent.ROLE_SELECTED, actor=request.user, role=role, slot_number=active_seat.slot_number,