feat(lobby): align canonical round flow for issue 287
This commit is contained in:
@@ -19,6 +19,7 @@ from fupogfakta.models import (
|
||||
Question,
|
||||
RoundConfig,
|
||||
RoundQuestion,
|
||||
ScoreEvent,
|
||||
)
|
||||
from lobby.i18n import i18n_locale_config, lobby_i18n_catalog, resolve_error_message, resolve_locale
|
||||
|
||||
@@ -947,6 +948,33 @@ class RevealRoundFlowTests(TestCase):
|
||||
self.session = GameSession.objects.create(host=self.host, code="RVL123", status=GameSession.Status.REVEAL)
|
||||
self.player_one = Player.objects.create(session=self.session, nickname="Luna", score=9)
|
||||
self.player_two = Player.objects.create(session=self.session, nickname="Mads", score=3)
|
||||
self.category = Category.objects.create(name="Reveal", slug="reveal", is_active=True)
|
||||
self.question = Question.objects.create(
|
||||
category=self.category,
|
||||
prompt="Hvad er Danmarks hovedstad?",
|
||||
correct_answer="København",
|
||||
is_active=True,
|
||||
)
|
||||
self.next_question = Question.objects.create(
|
||||
category=self.category,
|
||||
prompt="Hvad er Sveriges hovedstad?",
|
||||
correct_answer="Stockholm",
|
||||
is_active=True,
|
||||
)
|
||||
self.round_config = RoundConfig.objects.create(session=self.session, number=1, category=self.category)
|
||||
self.round_question = RoundQuestion.objects.create(
|
||||
session=self.session,
|
||||
round_number=1,
|
||||
question=self.question,
|
||||
correct_answer=self.question.correct_answer,
|
||||
)
|
||||
ScoreEvent.objects.create(
|
||||
session=self.session,
|
||||
player=self.player_one,
|
||||
delta=5,
|
||||
reason="guess_correct",
|
||||
meta={"round_question_id": self.round_question.id},
|
||||
)
|
||||
|
||||
@patch("lobby.views.sync_broadcast_phase_event")
|
||||
def test_host_can_get_reveal_scoreboard(self, mock_sync_broadcast_phase_event):
|
||||
@@ -1062,9 +1090,10 @@ class RevealRoundFlowTests(TestCase):
|
||||
self.assertEqual(response.json()["error"], "Game can only be finished from scoreboard phase")
|
||||
|
||||
@patch("lobby.views.sync_broadcast_phase_event")
|
||||
def test_host_can_start_next_round_from_scoreboard(self, _mock_sync_broadcast_phase_event):
|
||||
def test_host_can_start_next_round_from_scoreboard(self, mock_sync_broadcast_phase_event):
|
||||
self.client.login(username="host_reveal", password="secret123")
|
||||
self.client.get(reverse("lobby:reveal_scoreboard", kwargs={"code": self.session.code}))
|
||||
mock_sync_broadcast_phase_event.reset_mock()
|
||||
|
||||
response = self.client.post(
|
||||
reverse(
|
||||
@@ -1075,12 +1104,24 @@ class RevealRoundFlowTests(TestCase):
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
payload = response.json()
|
||||
self.assertEqual(payload["session"]["status"], GameSession.Status.LOBBY)
|
||||
self.assertEqual(payload["session"]["status"], GameSession.Status.LIE)
|
||||
self.assertEqual(payload["session"]["current_round"], 2)
|
||||
self.assertEqual(payload["round"]["category"]["slug"], self.category.slug)
|
||||
self.assertEqual(payload["round_question"]["prompt"], self.next_question.prompt)
|
||||
self.assertEqual(payload["config"]["lie_seconds"], self.round_config.lie_seconds)
|
||||
|
||||
self.session.refresh_from_db()
|
||||
self.assertEqual(self.session.status, GameSession.Status.LOBBY)
|
||||
self.assertEqual(self.session.status, GameSession.Status.LIE)
|
||||
self.assertEqual(self.session.current_round, 2)
|
||||
self.assertTrue(
|
||||
RoundConfig.objects.filter(session=self.session, number=2, category=self.category).exists()
|
||||
)
|
||||
self.assertTrue(
|
||||
RoundQuestion.objects.filter(session=self.session, round_number=2, question=self.next_question).exists()
|
||||
)
|
||||
mock_sync_broadcast_phase_event.assert_called_once()
|
||||
self.assertEqual(mock_sync_broadcast_phase_event.call_args.args[0], self.session.code)
|
||||
self.assertEqual(mock_sync_broadcast_phase_event.call_args.args[1], "phase.lie_started")
|
||||
|
||||
def test_start_next_round_requires_host(self):
|
||||
self.session.status = GameSession.Status.SCOREBOARD
|
||||
|
||||
Reference in New Issue
Block a user