[READY][Gameplay] #310 Host transition idempotency and error catalog for scoreboard -> next round / finish #320
@@ -1831,6 +1831,53 @@ class RevealRoundFlowTests(TestCase):
|
|||||||
self.assertIsNone(detail_payload["reveal"])
|
self.assertIsNone(detail_payload["reveal"])
|
||||||
self.assertIsNone(detail_payload["scoreboard"])
|
self.assertIsNone(detail_payload["scoreboard"])
|
||||||
|
|
||||||
|
def test_start_next_round_repairs_reused_bootstrap_question_with_drifted_category(self):
|
||||||
|
self.client.login(username="host_reveal", password="secret123")
|
||||||
|
self.client.get(reverse("lobby:reveal_scoreboard", kwargs={"code": self.session.code}))
|
||||||
|
|
||||||
|
stale_category = Category.objects.create(name="Drift reveal", slug="drift-reveal", is_active=True)
|
||||||
|
stale_question = Question.objects.create(
|
||||||
|
category=stale_category,
|
||||||
|
prompt="Hvem vandt EM i 1992?",
|
||||||
|
correct_answer="Danmark",
|
||||||
|
is_active=True,
|
||||||
|
)
|
||||||
|
stale_round_question = RoundQuestion.objects.create(
|
||||||
|
session=self.session,
|
||||||
|
round_number=2,
|
||||||
|
question=stale_question,
|
||||||
|
correct_answer=stale_question.correct_answer,
|
||||||
|
shown_at=timezone.now() - timedelta(minutes=10),
|
||||||
|
mixed_answers=["Stale truth", "Stale lie"],
|
||||||
|
)
|
||||||
|
LieAnswer.objects.create(round_question=stale_round_question, player=self.player_one, text="Tyskland")
|
||||||
|
Guess.objects.create(
|
||||||
|
round_question=stale_round_question,
|
||||||
|
player=self.player_two,
|
||||||
|
selected_text="Stale truth",
|
||||||
|
is_correct=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.client.post(reverse("lobby:start_next_round", kwargs={"code": self.session.code}))
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.session.refresh_from_db()
|
||||||
|
stale_round_question.refresh_from_db()
|
||||||
|
self.assertEqual(self.session.status, GameSession.Status.LIE)
|
||||||
|
self.assertEqual(self.session.current_round, 2)
|
||||||
|
self.assertEqual(stale_round_question.question.category_id, self.round_config.category_id)
|
||||||
|
self.assertEqual(stale_round_question.question_id, self.next_question.id)
|
||||||
|
self.assertEqual(stale_round_question.correct_answer, self.next_question.correct_answer)
|
||||||
|
self.assertEqual(stale_round_question.mixed_answers, [])
|
||||||
|
self.assertEqual(stale_round_question.lies.count(), 0)
|
||||||
|
self.assertEqual(stale_round_question.guesses.count(), 0)
|
||||||
|
payload = response.json()
|
||||||
|
self.assertEqual(payload["round_question"]["id"], stale_round_question.id)
|
||||||
|
self.assertEqual(payload["round_question"]["prompt"], self.next_question.prompt)
|
||||||
|
detail_payload = self.client.get(reverse("lobby:session_detail", kwargs={"code": self.session.code})).json()
|
||||||
|
self.assertEqual(detail_payload["round_question"]["id"], stale_round_question.id)
|
||||||
|
self.assertEqual(detail_payload["round_question"]["prompt"], self.next_question.prompt)
|
||||||
|
|
||||||
def test_start_next_round_requires_host(self):
|
def test_start_next_round_requires_host(self):
|
||||||
self.session.status = GameSession.Status.SCOREBOARD
|
self.session.status = GameSession.Status.SCOREBOARD
|
||||||
self.session.save(update_fields=["status"])
|
self.session.save(update_fields=["status"])
|
||||||
|
|||||||
Reference in New Issue
Block a user