test(gameplay): lock canonical reveal payload across scoreboard
All checks were successful
CI / test-and-quality (push) Successful in 2m55s
CI / test-and-quality (pull_request) Successful in 2m56s

This commit is contained in:
2026-03-15 13:27:25 +00:00
parent 207c934b48
commit 076ca4ebbb
2 changed files with 114 additions and 0 deletions

View File

@@ -1463,11 +1463,48 @@ class SessionDetailRoundQuestionTests(TestCase):
self.assertEqual(payload["reveal"]["round_question_id"], round_question.id)
self.assertEqual(payload["reveal"]["correct_answer"], "Edison")
self.assertEqual(payload["reveal"]["lies"][0]["player_id"], liar.id)
self.assertEqual(payload["reveal"]["lies"][0]["nickname"], "Løgnhals")
self.assertEqual(payload["reveal"]["lies"][0]["text"], "Tesla")
self.assertEqual(payload["reveal"]["guesses"][0]["player_id"], guesser.id)
self.assertEqual(payload["reveal"]["guesses"][0]["selected_text"], "Tesla")
self.assertEqual(payload["reveal"]["guesses"][0]["fooled_player_id"], liar.id)
self.assertEqual(payload["reveal"]["guesses"][0]["fooled_player_nickname"], "Løgnhals")
self.assertTrue(payload["reveal"]["guesses"][1]["is_correct"])
self.assertEqual(payload["reveal"]["guesses"][1]["selected_text"], "Edison")
self.assertIsNone(payload["reveal"]["guesses"][1]["fooled_player_id"])
self.assertIsNone(payload["reveal"]["guesses"][1].get("fooled_player_nickname"))
def test_session_detail_preserves_canonical_reveal_payload_across_reveal_and_scoreboard(self):
round_question = RoundQuestion.objects.create(
session=self.session,
round_number=1,
question=self.question,
correct_answer=self.question.correct_answer,
)
liar = Player.objects.create(session=self.session, nickname="Løgnhals")
guesser = Player.objects.create(session=self.session, nickname="Detektiv")
LieAnswer.objects.create(round_question=round_question, player=liar, text="Tesla")
Guess.objects.create(
round_question=round_question,
player=guesser,
selected_text="Tesla",
is_correct=False,
fooled_player=liar,
)
self.session.status = GameSession.Status.REVEAL
self.session.save(update_fields=["status"])
reveal_payload = self.client.get(reverse("lobby:session_detail", kwargs={"code": self.session.code})).json()
self.session.status = GameSession.Status.SCOREBOARD
self.session.save(update_fields=["status"])
scoreboard_payload = self.client.get(reverse("lobby:session_detail", kwargs={"code": self.session.code})).json()
self.assertEqual(reveal_payload["reveal"], scoreboard_payload["reveal"])
self.assertTrue(reveal_payload["phase_view_model"]["host"]["can_reveal_scoreboard"])
self.assertFalse(scoreboard_payload["phase_view_model"]["host"]["can_reveal_scoreboard"])
self.assertFalse(reveal_payload["phase_view_model"]["host"]["can_start_next_round"])
self.assertTrue(scoreboard_payload["phase_view_model"]["host"]["can_start_next_round"])
class SessionDetailPhaseViewModelTests(TestCase):