Add lie phase timer API tests

This commit is contained in:
agw
2026-02-27 14:23:30 +01:00
parent 1c78b856fb
commit 1662d7d197
+92 -2
View File
@@ -1,3 +1,93 @@
from django.test import TestCase
from datetime import timedelta
# Create your tests here.
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from django.utils import timezone
from .models import Category, GameSession, LieAnswer, Player, Question, RoundConfig, RoundQuestion
User = get_user_model()
class LiePhaseFlowTests(TestCase):
def setUp(self):
self.host = User.objects.create_user(username="host", password="secret123")
self.session = GameSession.objects.create(host=self.host, code="ABCD23", status=GameSession.Status.LIE)
self.category = Category.objects.create(name="Historie", slug="historie", is_active=True)
self.question = Question.objects.create(
category=self.category,
prompt="Hvilket år faldt muren?",
correct_answer="1989",
is_active=True,
)
RoundConfig.objects.create(
session=self.session,
number=self.session.current_round,
category=self.category,
lie_seconds=20,
)
self.player = Player.objects.create(session=self.session, nickname="Luna")
def test_host_can_start_lie_question_with_deadline(self):
self.client.login(username="host", password="secret123")
response = self.client.post(reverse("fupogfakta:start_lie_question", kwargs={"code": self.session.code}))
self.assertEqual(response.status_code, 201)
payload = response.json()["question"]
self.assertEqual(payload["round"], 1)
self.assertEqual(payload["prompt"], self.question.prompt)
self.assertEqual(payload["lie_seconds"], 20)
round_question = RoundQuestion.objects.get(session=self.session, round_number=1)
self.assertIsNotNone(round_question.lie_deadline_at)
def test_submit_lie_before_deadline_is_accepted(self):
round_question = RoundQuestion.objects.create(
session=self.session,
round_number=1,
question=self.question,
correct_answer=self.question.correct_answer,
lie_deadline_at=timezone.now() + timedelta(seconds=10),
)
response = self.client.post(
reverse("fupogfakta:submit_lie", kwargs={"code": self.session.code}),
data={"player_id": self.player.id, "text": "1991"},
content_type="application/json",
)
self.assertEqual(response.status_code, 201)
self.assertTrue(
LieAnswer.objects.filter(round_question=round_question, player=self.player, text="1991").exists()
)
self.assertEqual(response.json()["progress"]["submitted_count"], 1)
def test_submit_lie_after_deadline_is_rejected(self):
RoundQuestion.objects.create(
session=self.session,
round_number=1,
question=self.question,
correct_answer=self.question.correct_answer,
lie_deadline_at=timezone.now() - timedelta(seconds=1),
)
response = self.client.post(
reverse("fupogfakta:submit_lie", kwargs={"code": self.session.code}),
data={"player_id": self.player.id, "text": "1991"},
content_type="application/json",
)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "Lie timer expired")
self.assertEqual(LieAnswer.objects.count(), 0)
def test_non_host_cannot_start_lie_question(self):
User.objects.create_user(username="other", password="secret123")
self.client.login(username="other", password="secret123")
response = self.client.post(reverse("fupogfakta:start_lie_question", kwargs={"code": self.session.code}))
self.assertEqual(response.status_code, 403)
self.assertEqual(response.json()["error"], "Only host can start lie question")