new migrations in apps.epic & apps.lyric apps; new Token fields of latter articulate upon Room model helper fns of former; new FTs, ITs & UTs capture new behavior accordingly; new template partial content in templates/apps/gameboard
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
from datetime import timedelta
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
|
||||
from apps.lyric.models import User
|
||||
from apps.epic.models import Room, GateSlot
|
||||
from apps.lyric.models import Token, User
|
||||
from apps.epic.models import Room, GateSlot, debit_token
|
||||
|
||||
|
||||
class RoomCreationTest(TestCase):
|
||||
@@ -9,3 +11,54 @@ class RoomCreationTest(TestCase):
|
||||
owner = User.objects.create(email="founder@example.com")
|
||||
room = Room.objects.create(name="Test Room", owner=owner)
|
||||
self.assertEqual(GateSlot.objects.filter(room=room).count(), 6)
|
||||
|
||||
|
||||
class DebitTokenTest(TestCase):
|
||||
def setUp(self):
|
||||
self.owner = User.objects.create(email="founder@example.com")
|
||||
self.room = Room.objects.create(
|
||||
name="Test Room",
|
||||
owner=self.owner,
|
||||
renewal_period=timedelta(days=7)
|
||||
)
|
||||
self.slot = self.room.gate_slots.get(slot_number=1)
|
||||
|
||||
def test_debit_free_token_consumes_token_and_fills_slot(self):
|
||||
free_token = Token.objects.get(user=self.owner, token_type=Token.FREE)
|
||||
debit_token(self.owner, self.slot, free_token)
|
||||
self.assertFalse(Token.objects.filter(pk=free_token.pk).exists())
|
||||
self.slot.refresh_from_db()
|
||||
self.assertEqual(self.slot.status, GateSlot.FILLED)
|
||||
self.assertEqual(self.slot.gamer, self.owner)
|
||||
|
||||
def test_debit_coin_does_not_consume_token(self):
|
||||
coin_token = Token.objects.get(user=self.owner, token_type=Token.COIN)
|
||||
debit_token(self.owner, self.slot, coin_token)
|
||||
self.assertTrue(Token.objects.filter(pk=coin_token.pk).exists())
|
||||
self.slot.refresh_from_db()
|
||||
self.assertEqual(self.slot.status, GateSlot.FILLED)
|
||||
self.assertEqual(self.slot.gamer, self.owner)
|
||||
|
||||
|
||||
class CoinTokenInUseTest(TestCase):
|
||||
def setUp(self):
|
||||
self.owner = User.objects.create(email="founder@example.com")
|
||||
self.room = Room.objects.create(
|
||||
name="Dragon's Den",
|
||||
owner=self.owner,
|
||||
renewal_period=timedelta(days=7),
|
||||
)
|
||||
self.slot = self.room.gate_slots.get(slot_number=1)
|
||||
self.coin = Token.objects.get(user=self.owner, token_type=Token.COIN)
|
||||
debit_token(self.owner, self.slot, self.coin)
|
||||
self.coin.refresh_from_db()
|
||||
|
||||
def test_coin_tooltip_expiry_shows_next_ready_date(self):
|
||||
expected_date = self.coin.next_ready_at.strftime("%Y-%m-%d")
|
||||
self.assertIn(expected_date, self.coin.tooltip_expiry())
|
||||
|
||||
def test_coin_tooltip_room_html_contains_anchor(self):
|
||||
room_url = reverse("epic:gatekeeper", kwargs={"room_id": self.room.id})
|
||||
html = self.coin.tooltip_room_html()
|
||||
self.assertIn(f'href="{room_url}"', html)
|
||||
self.assertIn(self.room.name, html)
|
||||
|
||||
@@ -29,3 +29,24 @@ class RoomCreationViewTest(TestCase):
|
||||
reverse("epic:create_room"),
|
||||
data={"name": "Test Room"},
|
||||
)
|
||||
|
||||
|
||||
class MyGamesContextTest(TestCase):
|
||||
def setUp(self):
|
||||
self.user = User.objects.create(email="gamer@example.com")
|
||||
self.client.force_login(self.user)
|
||||
|
||||
def test_gameboard_context_includes_owned_rooms(self):
|
||||
room = Room.objects.create(name="Durango", owner=self.user)
|
||||
response = self.client.get("/gameboard/")
|
||||
self.assertIn(room, response.context["my_games"])
|
||||
|
||||
def test_gameboard_context_includes_rooms_with_filled_slot(self):
|
||||
other = User.objects.create(email="friend@example.com")
|
||||
room = Room.objects.create(name="Their Room", owner=other)
|
||||
slot = room.gate_slots.get(slot_number=2)
|
||||
slot.gamer = self.user
|
||||
slot.status = "FILLED"
|
||||
slot.save()
|
||||
response = self.client.get("/gameboard/")
|
||||
self.assertIn(room, response.context["my_games"])
|
||||
|
||||
Reference in New Issue
Block a user