From 1ab3f83d147db27d8c574cd7caf93e87ad8bad65 Mon Sep 17 00:00:00 2001 From: Niall Egan Date: Mon, 20 Aug 2018 16:07:23 +0100 Subject: [PATCH] Fixed broken tests --- aimmo-game/tests/test_service.py | 6 +++- aimmo-game/tests/test_socketio.py | 52 +++++++++++++++++++++---------- 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/aimmo-game/tests/test_service.py b/aimmo-game/tests/test_service.py index a33670644..0b6d10957 100644 --- a/aimmo-game/tests/test_service.py +++ b/aimmo-game/tests/test_service.py @@ -13,6 +13,11 @@ class TestService(TestCase): class DummyAvatarManager(AvatarManager): avatars = [MoveEastDummy(1, Location(0, -1))] + @classmethod + def setUpClass(cls): + """ Register the api endpoints """ + cls.game_api = service.GameAPI(worker_manager=None, game_state=None, logs=None) + def setUp(self): """ Sets up the JSON of the world state generated by the service file for testing. @@ -36,7 +41,6 @@ def setUp(self): for y in range(3) for x in range(2)} test_game_state = GameState(WorldMap(grid, {}), self.avatar_manager) - self.world_state_json = test_game_state.serialise() def test_healthy_flask(self): diff --git a/aimmo-game/tests/test_socketio.py b/aimmo-game/tests/test_socketio.py index 64fe4f9b9..bf72c2343 100644 --- a/aimmo-game/tests/test_socketio.py +++ b/aimmo-game/tests/test_socketio.py @@ -12,27 +12,40 @@ def serialise(self): return {'foo': 'bar'} +class MockedSocketIOServer(mock.MagicMock): + def on(self, event): + def decorator(func): + def wrapper(*args, **kwargs): + func(*args, **kwargs) + return wrapper + return decorator + + class TestSocketio(TestCase): def setUp(self): self.environ = {} self.mocked_logs = Logs() self.environ['QUERY_STRING'] = 'avatar_id=1&EIO=3&transport=polling&t=MJhoMgb' - - self.game_api = service.GameAPI(game_state=MockGameState(), worker_manager=None, logs=self.mocked_logs) + self.game_api = self.create_game_api() self.mocked_mappings = self.game_api._sid_to_avatar_id - self.sid = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(19)) - @mock.patch('service.socketio_server') - def test_socketio_emit_called(self, mocked_socketio): + @mock.patch('service.flask_app') + def create_game_api(self, flask_app): + return service.GameAPI(game_state=MockGameState(), worker_manager=None, logs=self.mocked_logs) + + @mock.patch('service.flask_app') + @mock.patch('service.socketio_server', new_callable=MockedSocketIOServer) + def test_socketio_emit_called(self, mocked_socketio, flask_app): self.game_api.register_world_update_on_connect()(self.sid, self.environ) self.assertTrue(mocked_socketio.return_value.emit.assert_called_once) - @mock.patch('service.socketio_server') - def test_matched_session_id_to_avatar_id_mapping(self, mocked_socketio): + @mock.patch('service.flask_app') + @mock.patch('service.socketio_server', new_callable=MockedSocketIOServer) + def test_matched_session_id_to_avatar_id_mapping(self, mocked_socketio, flask_app): self.assertEqual(len(self.mocked_mappings), 0) self.game_api.register_world_update_on_connect()(self.sid, self.environ) @@ -41,8 +54,9 @@ def test_matched_session_id_to_avatar_id_mapping(self, mocked_socketio): self.assertTrue(self.sid in self.mocked_mappings) self.assertEqual(int(self.mocked_mappings[self.sid]), 1) - @mock.patch('service.socketio_server') - def test_no_match_session_id_to_avatar_id_mapping(self, mocked_socketio): + @mock.patch('service.flask_app') + @mock.patch('service.socketio_server', new_callable=MockedSocketIOServer) + def test_no_match_session_id_to_avatar_id_mapping(self, mocked_socketio, flask_app): self.environ['QUERY_STRING'] = 'corrupted!@$%string123' self.assertEqual(len(self.mocked_mappings), 0) @@ -53,8 +67,9 @@ def test_no_match_session_id_to_avatar_id_mapping(self, mocked_socketio): self.assertTrue(self.sid in self.mocked_mappings) self.assertIsNone(self.mocked_mappings[self.sid]) - @mock.patch('service.socketio_server') - def test_send_updates_for_one_user(self, mocked_socketio): + @mock.patch('service.flask_app') + @mock.patch('service.socketio_server', new_callable=MockedSocketIOServer) + def test_send_updates_for_one_user(self, mocked_socketio, flask_app): self.mocked_mappings[self.sid] = 1 self.mocked_logs.set_user_logs(self.mocked_mappings[self.sid], 'Logs one') @@ -65,16 +80,18 @@ def test_send_updates_for_one_user(self, mocked_socketio): mocked_socketio.emit.assert_has_calls([game_state_call, log_call], any_order=True) - @mock.patch('service.socketio_server') - def test_no_logs_not_emitted(self, mocked_socketio): + @mock.patch('service.flask_app') + @mock.patch('service.socketio_server', new_callable=MockedSocketIOServer) + def test_no_logs_not_emitted(self, mocked_socketio, flask_app): """ If there are no logs for an avatar, no logs should be emitted. """ self.mocked_mappings[self.sid] = 1 self.game_api.send_updates() mocked_socketio.emit.assert_called_once_with('game-state', {'foo': 'bar'}, room=self.sid) - @mock.patch('service.socketio_server') - def test_empty_logs_not_emitted(self, mocked_socketio): + @mock.patch('service.flask_app') + @mock.patch('service.socketio_server', new_callable=MockedSocketIOServer) + def test_empty_logs_not_emitted(self, mocked_socketio, flask_app): """ If the logs are an empty sting, no logs should be emitted. """ self.mocked_mappings[self.sid] = 1 self.mocked_logs.set_user_logs(self.mocked_mappings[self.sid], '') @@ -82,8 +99,9 @@ def test_empty_logs_not_emitted(self, mocked_socketio): mocked_socketio.emit.assert_called_once_with('game-state', {'foo': 'bar'}, room=self.sid) - @mock.patch('service.socketio_server') - def test_send_updates_for_multiple_users(self, mocked_socketio): + @mock.patch('service.flask_app') + @mock.patch('service.socketio_server', new_callable=MockedSocketIOServer) + def test_send_updates_for_multiple_users(self, mocked_socketio, flask_app): self.mocked_mappings[self.sid] = 1 self.mocked_mappings['differentsid'] = 2