plugged some test coverage lacunae, incl. tests for release_slot for the Carte Blanche; select_role for ROLE_CHOICES & ROLE_SELECT; equip_trinket non-POST paths; & tooltip_shoptalk for the Tithe Token
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Disco DeDisco
2026-03-19 00:00:00 -04:00
parent 8c2a5d24ec
commit 5a811d0079
3 changed files with 68 additions and 1 deletions

View File

@@ -608,6 +608,26 @@ class SelectRoleViewTest(TestCase):
) )
self.assertEqual(response.status_code, 409) self.assertEqual(response.status_code, 409)
def test_select_role_redirects_when_not_role_select_phase(self):
self.room.table_status = None
self.room.save()
response = self.client.post(
reverse("epic:select_role", kwargs={"room_id": self.room.id}),
data={"role": "PC"},
)
self.assertRedirects(
response, reverse("epic:gatekeeper", args=[self.room.id])
)
def test_select_role_redirects_for_invalid_role_code(self):
response = self.client.post(
reverse("epic:select_role", kwargs={"room_id": self.room.id}),
data={"role": "BOGUS"},
)
self.assertRedirects(
response, reverse("epic:gatekeeper", args=[self.room.id])
)
class RevealPhaseRenderingTest(TestCase): class RevealPhaseRenderingTest(TestCase):
def setUp(self): def setUp(self):
@@ -699,3 +719,26 @@ class RoomActionsViewTest(TestCase):
reverse("epic:abandon_room", kwargs={"room_id": self.room.id}) reverse("epic:abandon_room", kwargs={"room_id": self.room.id})
) )
self.assertRedirects(response, "/gameboard/") self.assertRedirects(response, "/gameboard/")
class ReleaseSlotViewTest(TestCase):
def setUp(self):
self.gamer = User.objects.create(email="gamer@test.io")
self.client.force_login(self.gamer)
owner = User.objects.create(email="owner@test.io")
self.room = Room.objects.create(name="Test Room", owner=owner)
self.slot = self.room.gate_slots.get(slot_number=1)
self.slot.gamer = self.gamer
self.slot.status = GateSlot.FILLED
self.slot.debited_token_type = Token.CARTE
self.slot.save()
def test_release_slot_downgrades_open_room_to_gathering(self):
self.room.gate_status = Room.OPEN
self.room.save()
self.client.post(
reverse("epic:release_slot", kwargs={"room_id": self.room.id}),
data={"slot_number": self.slot.slot_number},
)
self.room.refresh_from_db()
self.assertEqual(self.room.gate_status, Room.GATHERING)

View File

@@ -4,7 +4,7 @@ from django.test import TestCase
from django.urls import reverse from django.urls import reverse
from apps.applets.models import Applet, UserApplet from apps.applets.models import Applet, UserApplet
from apps.lyric.models import User from apps.lyric.models import Token, User
class GameboardViewTest(TestCase): class GameboardViewTest(TestCase):
@@ -101,3 +101,17 @@ class ToggleGameAppletsViewTest(TestCase):
) )
self.client.post(self.url, {"applets": ["new-game", "my-games"]}) self.client.post(self.url, {"applets": ["new-game", "my-games"]})
self.assertFalse(UserApplet.objects.filter(user=self.user, applet=dash_applet).exists()) self.assertFalse(UserApplet.objects.filter(user=self.user, applet=dash_applet).exists())
class EquipTrinketViewTest(TestCase):
def setUp(self):
self.user = User.objects.create(email="gamer@test.io")
self.client.force_login(self.user)
self.token = Token.objects.filter(user=self.user, token_type=Token.COIN).first()
def test_get_returns_trinket_button_partial(self):
response = self.client.get(
reverse("equip_trinket", kwargs={"token_id": self.token.pk})
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "apps/gameboard/_partials/_equip_trinket_btn.html")

View File

@@ -73,3 +73,13 @@ class CarteTooltipTest(SimpleTestCase):
def test_tooltip_contains_no_expiry(self): def test_tooltip_contains_no_expiry(self):
self.assertIn("no expiry", self.token.tooltip_text()) self.assertIn("no expiry", self.token.tooltip_text())
class TitheTooltipTest(SimpleTestCase):
def setUp(self):
self.token = Token()
self.token.token_type = Token.TITHE
self.token.expires_at = None
def test_tooltip_shoptalk_returns_none(self):
self.assertIsNone(self.token.tooltip_shoptalk())