Пример #1
0
async def test_on_game_session_updated(preset_manager, skip_qtbot):
    # Setup
    network_client = MagicMock()
    network_client.current_user = User(id=12, name="Player A")
    network_client.session_self_update = AsyncMock()
    game_connection = MagicMock()
    game_connection.pretty_current_status = "Maybe Connected"
    game_connection.backend.lock_identifier = None

    initial_session = GameSessionEntry(
        id=1234,
        name="The Session",
        presets=[preset_manager.default_preset, preset_manager.default_preset],
        players={
            12: PlayerSessionEntry(12, "Player A", 0, True, "Online"),
        },
        actions=[],
        seed_hash=None,
        word_hash=None,
        spoiler=None,
        permalink=None,
        state=GameSessionState.SETUP,
        generation_in_progress=None,
    )
    second_session = GameSessionEntry(
        id=1234,
        name="The Session",
        presets=[preset_manager.default_preset],
        players={
            12: PlayerSessionEntry(12, "Player A", 0, True, "Online"),
            24: PlayerSessionEntry(24, "Player B", None, False, "Online"),
        },
        actions=[
            GameSessionAction("Hello", datetime.datetime(year=2020, month=1, day=5))
        ],
        seed_hash="AB12",
        word_hash="Chykka Required",
        spoiler=True,
        permalink="<permalink>",
        state=GameSessionState.IN_PROGRESS,
        generation_in_progress=None,
    )
    network_client.current_game_session = initial_session

    window = await GameSessionWindow.create_and_update(network_client, game_connection, preset_manager,
                                                       MagicMock(), MagicMock())
    window.update_multiworld_client_status = AsyncMock()

    # Run
    await window.on_game_session_updated(second_session)
    window.update_multiworld_client_status.assert_awaited()
    network_client.session_self_update.assert_awaited_once_with(
        game_connection.get_current_inventory.return_value,
        game_connection.current_status,
        game_connection.backend.backend_choice,
    )
Пример #2
0
 async def join_game_session(self, session: GameSessionListEntry,
                             password: Optional[str]):
     result = await self._emit_with_result("join_game_session",
                                           (session.id, password))
     self._current_game_session = GameSessionEntry.from_json(result)
Пример #3
0
 async def create_new_session(self, session_name: str) -> GameSessionEntry:
     result = await self._emit_with_result("create_game_session",
                                           session_name)
     self._current_game_session = GameSessionEntry.from_json(result)
     return self._current_game_session
Пример #4
0
 async def on_game_session_updated(self, data):
     self._current_game_session = GameSessionEntry.from_json(data)
     self.logger.debug(f"{self._current_game_session.id}")
Пример #5
0
 async def _on_game_session_meta_update_raw(self, data: bytes):
     entry = GameSessionEntry.from_json(data)
     self.logger.debug(
         "%s: %s", entry.id,
         hashlib.blake2b(str(data).encode("utf-8")).hexdigest())
     await self.on_game_session_meta_update(entry)
Пример #6
0
async def test_on_game_session_meta_update(preset_manager, skip_qtbot):
    # Setup
    network_client = MagicMock()
    network_client.current_user = User(id=12, name="Player A")
    network_client.session_self_update = AsyncMock()
    game_connection = MagicMock(spec=GameConnection)
    game_connection.executor = AsyncMock()
    game_connection.pretty_current_status = "Maybe Connected"
    game_connection.lock_identifier = None

    initial_session = GameSessionEntry(
        id=1234,
        name="The Session",
        presets=[
            preset_manager.default_preset_for_game(
                RandovaniaGame.METROID_PRIME_ECHOES),
            preset_manager.default_preset
        ],
        players={
            12: PlayerSessionEntry(12, "Player A", 0, True, "Online"),
        },
        game_details=None,
        state=GameSessionState.SETUP,
        generation_in_progress=None,
        allowed_games=[RandovaniaGame.METROID_PRIME_ECHOES],
    )
    second_session = GameSessionEntry(
        id=1234,
        name="The Session",
        presets=[
            preset_manager.default_preset_for_game(
                RandovaniaGame.METROID_PRIME_ECHOES)
        ],
        players={
            12: PlayerSessionEntry(12, "Player A", 0, True, "Online"),
            24: PlayerSessionEntry(24, "Player B", None, False, "Online"),
        },
        game_details=GameDetails(
            seed_hash="AB12",
            word_hash="Chykka Required",
            spoiler=True,
        ),
        state=GameSessionState.IN_PROGRESS,
        generation_in_progress=None,
        allowed_games=[RandovaniaGame.METROID_PRIME_ECHOES],
    )
    network_client.current_game_session = initial_session

    window = await GameSessionWindow.create_and_update(network_client,
                                                       game_connection,
                                                       preset_manager,
                                                       MagicMock(),
                                                       MagicMock())
    window.update_multiworld_client_status = AsyncMock()
    skip_qtbot.addWidget(window)

    # Run
    await window.on_game_session_meta_update(second_session)
    window.update_multiworld_client_status.assert_awaited()
    network_client.session_self_update.assert_awaited_once_with(
        game_connection.get_current_inventory.return_value,
        game_connection.current_status,
        game_connection.backend_choice,
    )