new _room_gear.html to manage room actions for various gamers (e.g., founders & guests); new _room.scss for gatekeeper styling (still flimsy); added new .btn-abandon Bl-btn palette to _button-pad.scss; new FTs & epic view ITs assert functionality (100 percent coverage, fully passing test suite)

This commit is contained in:
Disco DeDisco
2026-03-14 00:10:40 -04:00
parent dddffd22d5
commit af3523c9bb
10 changed files with 297 additions and 1 deletions

View File

@@ -2,7 +2,7 @@ from django.test import TestCase
from django.urls import reverse
from apps.lyric.models import User
from apps.epic.models import Room
from apps.epic.models import Room, RoomInvite
class RoomCreationViewTest(TestCase):
@@ -74,3 +74,58 @@ class GateStatusViewTest(TestCase):
)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "gate-modal")
class RoomActionsViewTest(TestCase):
def setUp(self):
self.owner = User.objects.create(email="owner@test.io")
self.gamer = User.objects.create(email="gamer@test.io")
self.room = Room.objects.create(name="Test Room", owner=self.owner)
self.slot = self.room.gate_slots.get(slot_number=2)
self.slot.gamer = self.gamer
self.slot.status = "FILLED"
self.slot.save()
RoomInvite.objects.create(
room=self.room, inviter=self.owner,
invitee_email=self.gamer.email
)
def test_owner_delete_removes_room(self):
self.client.force_login(self.owner)
self.client.post(reverse("epic:delete_room", kwargs={"room_id": self.room.id}))
self.assertFalse(Room.objects.filter(pk=self.room.pk).exists())
def test_non_owner_delete_does_not_remove_room(self):
self.client.force_login(self.gamer)
self.client.post(reverse("epic:delete_room", kwargs={"room_id": self.room.id}))
self.assertTrue(Room.objects.filter(pk=self.room.pk).exists())
def test_delete_redirects_to_gameboard(self):
self.client.force_login(self.owner)
response = self.client.post(
reverse("epic:delete_room", kwargs={"room_id": self.room.id})
)
self.assertRedirects(response, "/gameboard/")
def test_abandon_clears_slot(self):
self.client.force_login(self.gamer)
self.client.post(reverse("epic:abandon_room", kwargs={"room_id": self.room.id}))
self.slot.refresh_from_db()
self.assertEqual(self.slot.status, "EMPTY")
self.assertIsNone(self.slot.gamer)
def test_abandon_deletes_pending_invite(self):
self.client.force_login(self.gamer)
self.client.post(reverse("epic:abandon_room", kwargs={"room_id": self.room.id}))
self.assertFalse(
RoomInvite.objects.filter(
room=self.room, invitee_email=self.gamer.email
).exists()
)
def test_abandon_redirects_to_gameboard(self):
self.client.force_login(self.gamer)
response = self.client.post(
reverse("epic:abandon_room", kwargs={"room_id": self.room.id})
)
self.assertRedirects(response, "/gameboard/")