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)
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):
def setUp(self):
@@ -699,3 +719,26 @@ class RoomActionsViewTest(TestCase):
reverse("epic:abandon_room", kwargs={"room_id": self.room.id})
)
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 apps.applets.models import Applet, UserApplet
from apps.lyric.models import User
from apps.lyric.models import Token, User
class GameboardViewTest(TestCase):
@@ -101,3 +101,17 @@ class ToggleGameAppletsViewTest(TestCase):
)
self.client.post(self.url, {"applets": ["new-game", "my-games"]})
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):
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())