fix(gameplay): refresh stale next-round bootstrap config
This commit is contained in:
@@ -1643,6 +1643,51 @@ class RevealRoundFlowTests(TestCase):
|
||||
|
||||
detail_payload = self.client.get(reverse("lobby:session_detail", kwargs={"code": self.session.code})).json()
|
||||
self.assertEqual(detail_payload["session"]["status"], GameSession.Status.LIE)
|
||||
|
||||
def test_start_next_round_reuses_existing_next_round_config_with_refreshed_canonical_values(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="Sport reveal", slug="sport-reveal", is_active=True)
|
||||
stale_round_config = RoundConfig.objects.create(
|
||||
session=self.session,
|
||||
number=2,
|
||||
category=stale_category,
|
||||
lie_seconds=12,
|
||||
guess_seconds=18,
|
||||
points_correct=9,
|
||||
points_bluff=7,
|
||||
started_from_scoreboard=False,
|
||||
)
|
||||
stale_round_question = RoundQuestion.objects.create(
|
||||
session=self.session,
|
||||
round_number=2,
|
||||
question=self.next_question,
|
||||
correct_answer=self.next_question.correct_answer,
|
||||
shown_at=timezone.now() - timedelta(minutes=10),
|
||||
mixed_answers=["Stale truth"],
|
||||
)
|
||||
|
||||
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_config.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(RoundConfig.objects.filter(session=self.session, number=2).count(), 1)
|
||||
self.assertEqual(stale_round_config.category_id, self.round_config.category_id)
|
||||
self.assertEqual(stale_round_config.lie_seconds, self.round_config.lie_seconds)
|
||||
self.assertEqual(stale_round_config.guess_seconds, self.round_config.guess_seconds)
|
||||
self.assertEqual(stale_round_config.points_correct, self.round_config.points_correct)
|
||||
self.assertEqual(stale_round_config.points_bluff, self.round_config.points_bluff)
|
||||
self.assertTrue(stale_round_config.started_from_scoreboard)
|
||||
self.assertEqual(response.json()["round_question"]["id"], stale_round_question.id)
|
||||
self.assertEqual(response.json()["config"]["lie_seconds"], self.round_config.lie_seconds)
|
||||
expected_deadline = stale_round_question.shown_at + timedelta(seconds=self.round_config.lie_seconds)
|
||||
self.assertEqual(response.json()["round_question"]["lie_deadline_at"], expected_deadline.isoformat())
|
||||
detail_payload = self.client.get(reverse("lobby:session_detail", kwargs={"code": self.session.code})).json()
|
||||
self.assertEqual(detail_payload["session"]["current_round"], 2)
|
||||
self.assertEqual(detail_payload["round_question"]["id"], stale_round_question.id)
|
||||
self.assertEqual(detail_payload["round_question"]["answers"], [])
|
||||
|
||||
Reference in New Issue
Block a user