From 1662d7d197313c3d1ca336d10c088b89cd8c850d Mon Sep 17 00:00:00 2001 From: Asger Geel Weirsoee Date: Fri, 27 Feb 2026 14:23:30 +0100 Subject: [PATCH] Add lie phase timer API tests --- fupogfakta/tests.py | 94 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 2 deletions(-) diff --git a/fupogfakta/tests.py b/fupogfakta/tests.py index 7ce503c..7c93609 100644 --- a/fupogfakta/tests.py +++ b/fupogfakta/tests.py @@ -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")