def test_game_session_admin_session_download_layout_description_no_spoiler( mock_layout_description: PropertyMock, clean_database, mock_emit_session_update, flask_app): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create( id=1, name="Debug", state=GameSessionState.SETUP, creator=user1, layout_description_json="layout_description_json") database.GameSessionMembership.create(user=user1, session=session, row=None, admin=False) sio = MagicMock() sio.get_current_user.return_value = user1 mock_layout_description.return_value.permalink.spoiler = False # Run with pytest.raises(InvalidAction), flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.DOWNLOAD_LAYOUT_DESCRIPTION.value, None) # Assert mock_emit_session_update.assert_not_called() mock_layout_description.assert_called_once()
def test_game_session_admin_session_remove_layout_description( mock_emit_session_update: MagicMock, clean_database, flask_app): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create( id=1, name="Debug", state=GameSessionState.SETUP, creator=user1, generation_in_progress=user1, layout_description_json="layout_description_json") database.GameSessionMembership.create(user=user1, session=session, row=None, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 # Run with flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.CHANGE_LAYOUT_DESCRIPTION.value, None) # Assert mock_emit_session_update.assert_called_once_with(session) assert database.GameSession.get_by_id(1).layout_description_json is None assert database.GameSession.get_by_id(1).generation_in_progress is None
def test_game_session_admin_session_change_layout_description_invalid( mock_emit_session_update: MagicMock, clean_database, other_user, flask_app): user1 = database.User.create(id=1234, name="The Name") user2 = database.User.create(id=1235, name="Other") session = database.GameSession.create( id=1, name="Debug", state=GameSessionState.SETUP, creator=user1, generation_in_progress=user2 if other_user else None) database.GameSessionMembership.create(user=user1, session=session, row=None, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 if other_user: expected_message = "Waiting for a layout from Other." else: expected_message = "Not waiting for a layout." # Run with pytest.raises( InvalidAction, match=expected_message), flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.CHANGE_LAYOUT_DESCRIPTION.value, "layout_description_json") # Assert mock_emit_session_update.assert_not_called() assert database.GameSession.get_by_id(1).layout_description_json is None
def test_game_session_admin_session_delete_row_invalid( mock_emit_session_update, clean_database, preset_manager, flask_app, not_last_row): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1) database.GameSessionPreset.create(session=session, row=0, preset="{}") database.GameSessionMembership.create(user=user1, session=session, row=None, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 if not_last_row: database.GameSessionPreset.create(session=session, row=1, preset="{}") expected_message = "Can only delete the last row" expected_num_rows = 2 else: expected_message = "Can't delete row when there's only one" expected_num_rows = 1 # Run with pytest.raises(InvalidAction) as e, flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.DELETE_ROW.value, 0) # Assert assert e.value.message == expected_message mock_emit_session_update.assert_not_called() assert database.GameSession.get_by_id(1).num_rows == expected_num_rows
def test_game_session_admin_session_change_row( mock_emit_session_update: MagicMock, clean_database, flask_app, preset_manager): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1) database.GameSessionPreset.create(session=session, row=0, preset="{}") database.GameSessionPreset.create(session=session, row=1, preset="{}") database.GameSessionMembership.create(user=user1, session=session, row=None, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 # Make sure the preset is using the latest version preset_manager.default_preset.ensure_converted() # Run with flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.CHANGE_ROW.value, (1, preset_manager.default_preset.as_json)) # Assert mock_emit_session_update.assert_called_once_with(session) new_preset_row = database.GameSessionPreset.get( database.GameSessionPreset.session == session, database.GameSessionPreset.row == 1) assert json.loads( new_preset_row.preset) == preset_manager.default_preset.as_json
def test_game_session_admin_session_delete_row( mock_emit_session_update: MagicMock, clean_database, flask_app, preset_manager): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1) database.GameSessionPreset.create(session=session, row=0, preset="{}") database.GameSessionPreset.create(session=session, row=1, preset="{}") database.GameSessionMembership.create(user=user1, session=session, row=None, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 # Run with flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.DELETE_ROW.value, 1) # Assert mock_emit_session_update.assert_called_once_with(session) assert database.GameSession.get_by_id(1).num_rows == 1
def test_game_session_admin_session_change_password(clean_database, mock_emit_session_update, flask_app): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1) database.GameSessionMembership.create(user=user1, session=session, row=0, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 expected_password = '******' # Run with flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.CHANGE_PASSWORD.value, "the_password") # Assert mock_emit_session_update.assert_called_once_with(session) assert database.GameSession.get_by_id(1).password == expected_password
def test_game_session_admin_session_finish_session(clean_database, mock_emit_session_update, starting_state, flask_app): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=starting_state, creator=user1) database.GameSessionMembership.create(user=user1, session=session, row=0, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 if starting_state != GameSessionState.IN_PROGRESS: expectation = pytest.raises( InvalidAction, match="Invalid Action: Session is not in progress") else: expectation = contextlib.nullcontext() # Run with expectation, flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.FINISH_SESSION.value, None) # Assert if starting_state != GameSessionState.IN_PROGRESS: mock_emit_session_update.assert_not_called() assert database.GameSession.get_by_id(1).state == starting_state else: mock_emit_session_update.assert_called_once_with(session) assert database.GameSession.get_by_id( 1).state == GameSessionState.FINISHED
def test_game_session_admin_session_start_session( mock_session_description: PropertyMock, mock_emit_session_update, clean_database, preset_manager, flask_app): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1, layout_description_json="{}") database.GameSessionPreset.create(session=session, row=0, preset="{}") database.GameSessionMembership.create(user=user1, session=session, row=0, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 # Run with flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.START_SESSION.value, None) # Assert mock_emit_session_update.assert_called_once_with(session) assert database.GameSession.get_by_id( 1).state == GameSessionState.IN_PROGRESS
def test_game_session_admin_session_change_layout_description( clean_database, preset_manager, mock_emit_session_update, mocker, flask_app): mock_verify_no_layout_description = mocker.patch( "randovania.server.game_session._verify_no_layout_description", autospec=True) mock_from_json_dict: MagicMock = mocker.patch( "randovania.layout.layout_description.LayoutDescription.from_json_dict" ) preset_as_json = json.dumps(preset_manager.default_preset.as_json) user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1, generation_in_progress=user1) database.GameSessionPreset.create(session=session, row=0, preset=preset_as_json) database.GameSessionPreset.create(session=session, row=1, preset=preset_as_json) database.GameSessionMembership.create(user=user1, session=session, row=None, admin=True) new_preset = preset_manager.default_preset.get_preset() new_preset = dataclasses.replace(new_preset, configuration=dataclasses.replace( new_preset.configuration, menu_mod=False)) sio = MagicMock() sio.get_current_user.return_value = user1 layout_description = mock_from_json_dict.return_value layout_description.as_json = "some_json_string" layout_description.permalink.player_count = 2 layout_description.permalink.presets = {i: new_preset for i in (0, 1)} # Run with flask_app.test_request_context(): game_session.game_session_admin_session( sio, 1, SessionAdminGlobalAction.CHANGE_LAYOUT_DESCRIPTION.value, "layout_description_json") # Assert mock_emit_session_update.assert_called_once_with(session) mock_verify_no_layout_description.assert_called_once_with(session) assert database.GameSession.get_by_id( 1).layout_description_json == '"some_json_string"' assert database.GameSession.get_by_id(1).generation_in_progress is None new_session = database.GameSession.get_by_id(1) new_json = json.dumps(VersionedPreset.with_preset(new_preset).as_json) assert [preset.preset for preset in new_session.presets] == [new_json] * 2
def test_game_session_admin_session_reset_session(clean_database, flask_app): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1) database.GameSessionMembership.create(user=user1, session=session, row=0, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 # Run with pytest.raises(InvalidAction), flask_app.test_request_context(): game_session.game_session_admin_session(sio, 1, SessionAdminGlobalAction.RESET_SESSION.value, None)
def test_game_session_admin_session_delete_session(mock_emit_session_update: MagicMock, flask_app, clean_database): user1 = database.User.create(id=1234, name="The Name") session = database.GameSession.create(id=1, name="Debug", state=GameSessionState.SETUP, creator=user1) database.GameSessionMembership.create(user=user1, session=session, row=None, admin=True) sio = MagicMock() sio.get_current_user.return_value = user1 # Run with flask_app.test_request_context(): game_session.game_session_admin_session(sio, 1, SessionAdminGlobalAction.DELETE_SESSION.value, None) # Assert mock_emit_session_update.assert_called_once_with(session) assert list(database.GameSession.select()) == []