Add lie phase timer API tests
This commit is contained in:
+92
-2
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user