Example #1
0
    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))
Example #5
0
    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)
Example #6
0
    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)
Example #14
0
    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
Example #15
0
    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)
Example #16
0
    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)
Example #17
0
    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)
Example #19
0
 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
Example #22
0
    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)