Skip to content

Commit

Permalink
Fixed broken tests
Browse files Browse the repository at this point in the history
  • Loading branch information
NiallEgan committed Aug 20, 2018
1 parent 686cac4 commit 1ab3f83
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 18 deletions.
6 changes: 5 additions & 1 deletion aimmo-game/tests/test_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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):
Expand Down
52 changes: 35 additions & 17 deletions aimmo-game/tests/test_socketio.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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')

Expand All @@ -65,25 +80,28 @@ 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], '')
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_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

Expand Down

0 comments on commit 1ab3f83

Please sign in to comment.