def test_tag_modification_with_private_key(self, test_client, mock_user): fake_session = get_current_session() # Create tag r = Request('PUT', LOCAL_URL + '/api/tag/TAG') response = test_client.send(r) assert(response.status_code == 201) data = response.json assert data['name'] == 'TAG' assert data['ownerId'] == default_player_id() tag = fake_session.query(Tag).first() assert tag.name == 'TAG' assert tag.owner == default_player_id() assert tag.private_id is None r = Request('PUT', LOCAL_URL + '/api/tag/TAG/private_key/fake_private_id') response = test_client.send(r) assert(response.status_code == 204) fake_session.close() fake_session = get_current_session() tag = fake_session.query(Tag).first() assert tag.name == 'TAG' assert tag.owner == default_player_id() assert tag.private_id == 'fake_private_id' r = Request('GET', LOCAL_URL + '/api/tag/TAG/private_key') response = test_client.send(r) assert(response.status_code == 200) assert response.json == ServiceTag.encode_tag(tag.id, 'fake_private_id')
def test_replay_basic_server_upload_with_tag(self, test_client): fake_session = get_current_session() game = fake_session.query(Game).first() assert game is None params = {'player_id': default_player_id(), 'tags': TAG_NAME} r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}, params=params) response = test_client.send(r) assert (response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() assert (game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert (game.name == '3 kickoffs 4 shots') assert (len(game.tags) == 1) assert (game.tags[0].name == TAG_NAME) assert (game.tags[0].owner == default_player_id()) assert (game.tags[0].games[0] == game) player = fake_session.query( Player.platformid == '76561198018756583').first() assert (player is not None)
def test_replay_edit_private_replay_no_permission(self, test_client, fake_user): game = get_current_session().query(Game).first() assert game is None r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}) response = test_client.send(r) assert (response.status_code == 202) api_url = '/api/replay/70DDECEA4653AC55EA77DBA0DB497995/visibility/' + GameVisibilitySetting.PRIVATE.name r = Request('PUT', LOCAL_URL + api_url) fake_user.setUser(default_player_id()) response = test_client.send(r) assert (response.status_code == 404) fake_session = get_current_session() game = fake_session.query(Game).first() assert (game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert (game.visibility == GameVisibilitySetting.DEFAULT) game_visiblity = fake_session.query(GameVisibility).first() assert (game_visiblity is None)
def test_replay_basic_server_upload_private_replay(self, test_client): game = get_current_session().query(Game).filter(Game.hash == '70DDECEA4653AC55EA77DBA0DB497995').all() assert len(game) == 0 date = datetime.utcnow() timestamp = int(datetime.timestamp(date)) params = {'player_id': default_player_id(), 'visibility': GameVisibilitySetting.PRIVATE.name, 'release_date': str(timestamp)} r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}, params=params) response = test_client.send(r) assert(response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() assert(game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert(game.visibility == GameVisibilitySetting.PRIVATE) game_visiblity = fake_session.query(GameVisibility).first() assert(game_visiblity.game == game.hash) assert(game_visiblity.player == default_player_id()) assert(game_visiblity.visibility == GameVisibilitySetting.PRIVATE) assert(game_visiblity.release_date == hour_rounder(date))
def test_double_upload_does_not_replace(self, test_client, mock_db): fake_session = get_current_session() game = fake_session.query(Game).first() assert (game == None) r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}) response = test_client.send(r) assert (response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() self.stream = io.BytesIO(self.file) r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}) response = test_client.send(r) assert (response.status_code == 202) game2 = fake_session.query(Game).first() assert (game == game2)
def test_replay_basic_server_upload_with_multiple_tags(self, test_client): fake_session = get_current_session() game = fake_session.query(Game).first() assert game is None params = {'player_id': default_player_id(), 'tags': [TAG_NAME, TAG_NAME + "hello"]} r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}, params=params) response = test_client.send(r) assert(response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() assert(game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert(game.name == '3 kickoffs 4 shots') assert(len(game.tags) == 2) assert(game.tags[0].name == TAG_NAME) assert(game.tags[0].owner == default_player_id()) assert(game.tags[0].games[0] == game) assert(game.tags[1].name == (TAG_NAME + "hello")) player = fake_session.query(Player.platformid == '76561198018756583').first() assert(player is not None) r = Request('GET', LOCAL_URL + '/api/player/76561198018756583/match_history?page=0&limit=10') response = test_client.send(r) assert response.status_code == 200 assert len(response.json['replays']) == 1
def test_replay_basic_server_upload_private_replay_new_player_in_game( self, test_client): fake_session = get_current_session() game = fake_session.query(Game).first() assert (game == None) params = { 'player_id': '76561198018756583', 'visibility': GameVisibilitySetting.PRIVATE.name } r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}, params=params) response = test_client.send(r) assert (response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() assert (game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert (game.visibility == GameVisibilitySetting.PRIVATE) game_visiblity = fake_session.query(GameVisibility).first() assert (game_visiblity.game == game.hash) assert (game_visiblity.player == '76561198018756583') assert (game_visiblity.visibility == GameVisibilitySetting.PRIVATE) assert (game_visiblity.release_date == datetime.max)
def test_replay_edit_private_replay_twice(self, test_client, fake_user): game = get_current_session().query(Game).first() assert game is None r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}) response = test_client.send(r) assert (response.status_code == 202) api_url = '/api/replay/70DDECEA4653AC55EA77DBA0DB497995/visibility/' + GameVisibilitySetting.PRIVATE.name r = Request('PUT', LOCAL_URL + api_url) fake_user.setUser('76561198018756583') response = test_client.send(r) assert (response.status_code == 200) fake_session = get_current_session() game = fake_session.query(Game).first() assert (game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert (game.visibility == GameVisibilitySetting.PRIVATE) game_visiblity = fake_session.query(GameVisibility).first() assert (game_visiblity.game == game.hash) assert (game_visiblity.player == '76561198018756583') assert (game_visiblity.visibility == GameVisibilitySetting.PRIVATE) api_url = '/api/replay/70DDECEA4653AC55EA77DBA0DB497995/visibility/' + GameVisibilitySetting.PUBLIC.name r = Request('PUT', LOCAL_URL + api_url) fake_user.setUser('76561198018756583') response = test_client.send(r) assert (response.status_code == 200) fake_session = get_current_session() game = fake_session.query(Game).first() assert (game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert (game.visibility == GameVisibilitySetting.PUBLIC) game_visiblity = fake_session.query(GameVisibility).first() assert (game_visiblity.game == game.hash) assert (game_visiblity.player == '76561198018756583') assert (game_visiblity.visibility == GameVisibilitySetting.PUBLIC)
def test_setting_visibility_fails_if_replay_exists(self, test_client, no_errors_are_logged): no_errors_are_logged.cancel_check() date = datetime.utcnow() timestamp = int(datetime.timestamp(date)) r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}) response = test_client.send(r) assert(response.status_code == 202) time.sleep(1) params = {'player_id': default_player_id(), 'visibility': GameVisibilitySetting.PRIVATE.name, 'release_date': str(timestamp)} r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', io.BytesIO(self.file))}, params=params) response = test_client.send(r) assert(response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() assert(game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert(game.visibility == GameVisibilitySetting.DEFAULT) game_visiblity = fake_session.query(GameVisibility).first() assert(game_visiblity is None) assert(no_errors_are_logged.mock_is_called())
def test_replay_basic_server_upload_private_replay(self, test_client, gcp): responses.add(responses.POST, gcp.get_url()) game = get_current_session().query(Game).filter(Game.hash == '70DDECEA4653AC55EA77DBA0DB497995').all() assert len(game) == 0 date = datetime.utcnow() timestamp = int(datetime.timestamp(date)) params = {'player_id': default_player_id(), 'visibility': GameVisibilitySetting.PRIVATE.name, 'release_date': str(timestamp)} r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}, params=params) response = test_client.send(r) assert(response.status_code == 202) assert len(responses.calls) == 1 request_url = responses.calls[0].request.url parse_result = urllib.parse.urlparse(request_url) query_result = urllib.parse.parse_qs(parse_result.query) assert query_result['player_id'] == [str(default_player_id())] assert query_result['visibility'] == [GameVisibilitySetting.PRIVATE.name] assert query_result['release_date'] == [str(float(timestamp))] assert query_result['uuid'] is not None
def test_proto_upload_with_privacy(self, test_client): proto, pandas, proto_game = write_proto_pandas_to_file(get_test_file(get_complex_replay_list()[0], is_replay=True)) with open(proto, 'rb') as f: encoded_proto = base64.b64encode(zlib.compress(f.read())).decode() with open(pandas, 'rb') as f: encoded_pandas = base64.b64encode(zlib.compress(f.read())).decode() obj = { 'status': '200', 'proto': encoded_proto, 'pandas': encoded_pandas } r = Request('POST', LOCAL_URL + '/api/upload/proto', json=obj, params={'visibility': GameVisibilitySetting.PRIVATE.name, 'player_id': proto_game.players[0].id.id}) response = test_client.send(r) assert(response.status_code == 200) fake_session = get_current_session() game = fake_session.query(Game).first() assert(game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert(game.name == '3 kickoffs 4 shots') assert(game.visibility == GameVisibilitySetting.PRIVATE) game_visiblity = fake_session.query(GameVisibility).first() assert(game_visiblity.game == game.hash) assert(game_visiblity.player == proto_game.players[0].id.id) assert(game_visiblity.visibility == GameVisibilitySetting.PRIVATE) assert(game_visiblity.release_date == datetime.max) player = fake_session.query(Player.platformid == proto_game.players[0].id.id).first() assert(player is not None)
def test_replay_basic_server_upload_with_tags_gcp(self, test_client, gcp): responses.add(responses.POST, gcp.get_url()) fake_session = get_current_session() game = fake_session.query(Game).first() assert game is None params = { 'player_id': default_player_id(), 'tags': [TAG_NAME, TAG_NAME + "hello"] } r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}, params=params) response = test_client.send(r) assert (response.status_code == 202) assert len(responses.calls) == 1 request_url = responses.calls[0].request.url parse_result = urllib.parse.urlparse(request_url) query_result = urllib.parse.parse_qs(parse_result.query) assert query_result['player_id'] == [str(default_player_id())] assert query_result['tags'] == [TAG_NAME, TAG_NAME + "hello"] assert query_result['uuid'] is not None
def test_replay_get_some_positions(self, test_client, fake_file_locations, fake_write_location, use_test_paths, initialize_database): use_test_paths.patch() protos = initialize_database.get_protos() ids = initialize_database.get_ids() self.replay_proto = protos[0] self.replay_id = ids[0] game = get_current_session().query(Game).first() assert game is not None r = Request('GET', LOCAL_URL + '/api/replay/' + str(self.replay_id) + '/positions', params={'frame': [1, 6, 301]}) response = test_client.send(r) assert (response.status_code == 200) data = response.json names = data['names'] assert names[0] == 'dtracers' assert data['id'] == '70DDECEA4653AC55EA77DBA0DB497995' assert len(data['ball']) == 3 assert data['ball'][0] == [0.0, 0.0, 92.74] assert data['ball'][1] == [0.0, 0.0, 92.74] print(data)
def test_replay_get_3_kickoffs(self, test_client, mock_user, mock_get_proto, initialize_database_small_replays): mock_user.logout() game = get_current_session().query(Game).first() assert game is not None replay_index = initialize_database_small_replays.get_index_from_name( '3_KICKOFFS_4_SHOTS') mock_get_proto( initialize_database_small_replays.get_protos()[replay_index]) r = Request( 'GET', LOCAL_URL + '/api/replay/' + str(initialize_database_small_replays.get_ids()[replay_index]) + '/kickoffs') response = test_client.send(r) assert (response.status_code == 200) data = response.json # in the future assert each new stat that is being added. assert len(data['kickoffs']) == 3 assert len(data['players']) == 1
def test_proto_upload_with_tags(self, test_client): proto, pandas, proto_game = write_proto_pandas_to_file(get_test_file(get_complex_replay_list()[0], is_replay=True)) with open(proto, 'rb') as f: encoded_proto = base64.b64encode(zlib.compress(f.read())).decode() with open(pandas, 'rb') as f: encoded_pandas = base64.b64encode(zlib.compress(f.read())).decode() obj = { 'status': '200', 'proto': encoded_proto, 'pandas': encoded_pandas } r = Request('POST', LOCAL_URL + '/api/upload/proto', json=obj, params={'tags': [TAG_NAME, TAG_NAME + "hello"], 'player_id': proto_game.players[0].id.id}) response = test_client.send(r) assert(response.status_code == 200) fake_session = get_current_session() game = fake_session.query(Game).first() assert(game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert(game.name == '3 kickoffs 4 shots') assert(len(game.tags) == 2) assert(game.tags[0].name == TAG_NAME) assert(game.tags[0].owner == proto_game.players[0].id.id) assert(game.tags[0].games[0] == game) assert(game.tags[1].name == (TAG_NAME + "hello")) player = fake_session.query(Player.platformid == proto_game.players[0].id.id).first() assert(player is not None)
def test_tag_creation_private_id(self, test_client, mock_user): fake_private_id = 'fake_private_id' fake_session = get_current_session() params = {'private_id': fake_private_id} r = Request('PUT', LOCAL_URL + '/api/tag/TAG', params=params) response = test_client.send(r) assert(response.status_code == 201) data = response.json assert data['name'] == 'TAG' assert data['ownerId'] == default_player_id() tag = fake_session.query(Tag).first() assert tag.name == 'TAG' assert tag.owner == default_player_id() assert tag.private_id == fake_private_id r = Request('GET', LOCAL_URL + '/api/tag/TAG/private_key') response = test_client.send(r) assert(response.status_code == 200) assert response.json == ServiceTag.encode_tag(tag.id, fake_private_id)
def test_replay_basic_server_upload(self, test_client): fake_session = get_current_session() game = fake_session.query(Game).first() assert(game==None) r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}) response = test_client.send(r) assert(response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() assert(game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert(game.name == '3 kickoffs 4 shots') player = fake_session.query(Player.platformid == '76561198018756583').first() assert(player is not None)
def test_replay_basic_server_upload_with_private_tags( self, test_client, mock_user): fake_session = get_current_session() game = fake_session.query(Game).first() assert game is None params = {'private_key': 'fake_private_key'} r = Request('PUT', LOCAL_URL + '/api/tag/' + TAG_NAME, params=params) response = test_client.send(r) assert (response.status_code == 201) tag = fake_session.query(Tag).first() r = Request('GET', LOCAL_URL + '/api/tag/' + TAG_NAME + '/private_key') response = test_client.send(r) encoded_key = ServiceTag.encode_tag(tag.id, tag.private_id) assert response.json == encoded_key params = {'private_tag_keys': [encoded_key]} r = Request('POST', LOCAL_URL + '/api/upload', files={'replays': ('fake_file.replay', self.stream)}, params=params) response = test_client.send(r) assert (response.status_code == 202) fake_session = get_current_session() game = fake_session.query(Game).first() assert (game.hash == '70DDECEA4653AC55EA77DBA0DB497995') assert (game.name == '3 kickoffs 4 shots') assert (len(game.tags) == 1) assert (game.tags[0].name == TAG_NAME) assert (game.tags[0].owner == default_player_id()) assert (game.tags[0].games[0] == game) assert (game.tags[0].private_id == 'fake_private_key') player = fake_session.query( Player.platformid == '76561198018756583').first() assert (player is not None)
def func(*args, **kwargs): if 'session' in kwargs and kwargs['session'] is not None: return decorated_function(*args, **kwargs) session = get_current_session() try: kwargs['session'] = session result = decorated_function(*args, **kwargs) finally: session.close() return result
def get_bot_by_steam_id(steam_id): if steam_id[0] == 'b' and steam_id[-1] == 'b': if len(steam_id) < 6: return "Allstar" else: session = get_current_session() bot = session.query(Player).filter(Player.platformid == steam_id).first() session.close() if bot is None: return None return bot.platformname return None
def test_replay_get_team_stats(self, test_client, fake_user, mock_get_proto): game = get_current_session().query(Game).first() assert game is not None mock_get_proto(self.replay_proto) r = Request( 'GET', LOCAL_URL + '/api/replay/' + str(self.replay_id) + '/basic_team_stats') response = test_client.send(r) assert (response.status_code == 200) data = response.json # in the future assert each new stat that is being added. assert len(data) == 12
def test_tag_creation_no_private_key(self, test_client, mock_user): fake_session = get_current_session() r = Request('PUT', LOCAL_URL + '/api/tag/TAG') response = test_client.send(r) assert(response.status_code == 201) data = response.json assert data['name'] == 'TAG' assert data['ownerId'] == default_player_id() tag = fake_session.query(Tag).first() assert tag.name == 'TAG' assert tag.owner == default_player_id() assert tag.private_id is None r = Request('GET', LOCAL_URL + '/api/tag/TAG/private_key') response = test_client.send(r) assert(response.status_code == 404)