78 lines
3.2 KiB
Python
78 lines
3.2 KiB
Python
|
|
from django.test import TestCase
|
||
|
|
from django.urls import reverse
|
||
|
|
from django.utils import timezone
|
||
|
|
|
||
|
|
from apps.drama.models import GameEvent
|
||
|
|
from apps.epic.models import GateSlot, Room, TableSeat
|
||
|
|
from apps.lyric.models import Token, User
|
||
|
|
|
||
|
|
|
||
|
|
class ConfirmTokenRecordsSlotFilledTest(TestCase):
|
||
|
|
def setUp(self):
|
||
|
|
self.user = User.objects.create(email="gamer@test.io")
|
||
|
|
self.client.force_login(self.user)
|
||
|
|
self.room = Room.objects.create(name="Test Room", owner=self.user)
|
||
|
|
self.token = Token.objects.create(user=self.user, token_type=Token.TITHE)
|
||
|
|
self.slot = self.room.gate_slots.get(slot_number=1)
|
||
|
|
self.slot.gamer = self.user
|
||
|
|
self.slot.status = GateSlot.RESERVED
|
||
|
|
self.slot.reserved_at = timezone.now()
|
||
|
|
self.slot.save()
|
||
|
|
|
||
|
|
def test_confirm_token_records_slot_filled_event(self):
|
||
|
|
session = self.client.session
|
||
|
|
session["kit_token_id"] = str(self.token.id)
|
||
|
|
session.save()
|
||
|
|
self.client.post(reverse("epic:confirm_token", args=[self.room.id]))
|
||
|
|
event = GameEvent.objects.get(room=self.room, verb=GameEvent.SLOT_FILLED)
|
||
|
|
self.assertEqual(event.actor, self.user)
|
||
|
|
self.assertEqual(event.data["slot_number"], 1)
|
||
|
|
self.assertEqual(event.data["token_type"], Token.TITHE)
|
||
|
|
|
||
|
|
def test_no_event_recorded_if_no_reserved_slot(self):
|
||
|
|
self.slot.gamer = None
|
||
|
|
self.slot.status = GateSlot.EMPTY
|
||
|
|
self.slot.save()
|
||
|
|
self.client.post(reverse("epic:confirm_token", args=[self.room.id]))
|
||
|
|
self.assertEqual(GameEvent.objects.filter(verb=GameEvent.SLOT_FILLED).count(), 0)
|
||
|
|
|
||
|
|
|
||
|
|
class SelectRoleRecordsRoleSelectedTest(TestCase):
|
||
|
|
def setUp(self):
|
||
|
|
self.user = User.objects.create(email="player@test.io")
|
||
|
|
self.client.force_login(self.user)
|
||
|
|
self.room = Room.objects.create(
|
||
|
|
name="Role Room", owner=self.user, table_status=Room.ROLE_SELECT
|
||
|
|
)
|
||
|
|
self.seat = TableSeat.objects.create(
|
||
|
|
room=self.room, gamer=self.user, slot_number=1
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_select_role_records_role_selected_event(self):
|
||
|
|
self.client.post(
|
||
|
|
reverse("epic:select_role", args=[self.room.id]),
|
||
|
|
data={"role": "PC"},
|
||
|
|
)
|
||
|
|
event = GameEvent.objects.get(room=self.room, verb=GameEvent.ROLE_SELECTED)
|
||
|
|
self.assertEqual(event.actor, self.user)
|
||
|
|
self.assertEqual(event.data["role"], "PC")
|
||
|
|
self.assertEqual(event.data["slot_number"], 1)
|
||
|
|
|
||
|
|
def test_roles_revealed_event_recorded_when_all_seats_assigned(self):
|
||
|
|
# Only one seat — assigning it triggers roles_revealed
|
||
|
|
self.client.post(
|
||
|
|
reverse("epic:select_role", args=[self.room.id]),
|
||
|
|
data={"role": "PC"},
|
||
|
|
)
|
||
|
|
self.assertTrue(
|
||
|
|
GameEvent.objects.filter(room=self.room, verb=GameEvent.ROLES_REVEALED).exists()
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_no_event_if_role_already_taken(self):
|
||
|
|
TableSeat.objects.create(room=self.room, gamer=self.user, slot_number=2, role="PC")
|
||
|
|
self.client.post(
|
||
|
|
reverse("epic:select_role", args=[self.room.id]),
|
||
|
|
data={"role": "PC"},
|
||
|
|
)
|
||
|
|
self.assertEqual(GameEvent.objects.filter(verb=GameEvent.ROLE_SELECTED).count(), 0)
|