Exemplo n.º 1
0
 def test_tag_encodes_decodes_correctly(self):
     str1 = 150
     str2 = "World"
     encoded = ServiceTag.encode_tag(str1, str2)
     out1, out2 = ServiceTag.decode_tag(encoded)
     assert out1 == str1
     assert out2 == str2
Exemplo n.º 2
0
 def test_key_encode_decode(self):
     ids = [10, 20000, 5, 12345678, 5, 20, 5]
     keys = ['10', '::::', 'banana', 'abcdefghijklmnopqrstuvwxyz', '', 'test', '!@#$%^&*()+']
     for index, id in enumerate(ids):
         encoded = ServiceTag.encode_tag(id, keys[index])
         test_id, test_key = ServiceTag.decode_tag(encoded)
         assert test_id == id
         assert test_key == keys[index]
Exemplo n.º 3
0
    def test_get_all_replays_with_tags_private_id_and_name(self, initialize_database_tags, test_client, mock_user):
        session = initialize_database_tags.get_session()
        tags = initialize_database_tags.get_tags()
        tagged_games = initialize_database_tags.get_tagged_games()
        encoded_key_0 = JsonTag.get_encoded_private_key(tags[0][0], session=session)
        encoded_key_2 = JsonTag.get_encoded_private_key(tags[2][0], session=session)
        r = Request('GET', LOCAL_URL + '/api/replay', params={'limit': 200, 'page': 0,
                                                              'tag_names': [tags[3][0]],
                                                              'private_tag_keys': [encoded_key_0, encoded_key_2]})

        response = test_client.send(r)
        assert(response.status_code == 200)
        data = response.json

        assert data['totalCount'] != len(data['replays']) == 10
Exemplo n.º 4
0
    def create_with_filters(page: int,
                            limit: int,
                            session=None,
                            **kwargs) -> 'MatchHistory':
        tags = JsonTag.get_tags_from_query_params(**kwargs, session=session)

        builder = QueryFilterBuilder().as_game()

        if len(tags) > 0:
            builder.with_tags([tag.id for tag in tags])

        QueryFilterBuilder.apply_arguments_to_query(builder, kwargs)
        query = builder.build_query(session)

        if 'min_length' in kwargs:
            query = query.filter(Game.length > kwargs['min_length'])
        if 'max_length' in kwargs:
            query = query.filter(Game.length < kwargs['max_length'])
        if 'map' in kwargs:
            query = query.filter(Game.map == kwargs['map'])
        count = query.count()
        games = query.order_by(desc(Game.match_date))[page * limit:(page + 1) *
                                                      limit]
        matches = MatchHistory(
            count, [Replay.create_from_game(game) for game in games])
        return matches
Exemplo n.º 5
0
 def create_from_game(game: Game, full=True, groups=False, session=None) -> 'Replay':
     group_map = None
     if groups and session is not None:
         players = session.query(Player).filter(Player.platformid.in_(game.players)).all()
         group_map = {player.platformid: player.groups for player in players}
     return Replay(
         id_=game.hash,
         name=game.name,
         date=game.match_date.isoformat(),
         map=game.map,
         game_mode=get_playlist(game.playlist, game.teamsize),
         game_score=GameScore.create_from_game(game),
         players=[
             ReplayPlayer.create_from_player_game(player_game, full=full)
             for player_game in sort_player_games_by_team_then_id(
                 cast(List[PlayerGame], game.playergames))
         ],
         tags=[
             JsonTag.create_from_dbtag(tag)
             for tag in game.tags if tag.owner == get_current_user_id()
         ],
         visibility=game.visibility,
         ranks=game.ranks,
         mmrs=game.mmrs,
         group_map=group_map
     )
Exemplo n.º 6
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')
Exemplo n.º 7
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)
Exemplo n.º 8
0
    def test_get_all_replays_with_tags_invalid_private_id(self, initialize_database_tags, test_client, mock_user):
        session = initialize_database_tags.get_session()
        tags = initialize_database_tags.get_tags()

        tag_id = TagWrapper.get_tag_by_name(session, mock_user.get_user().platformid, tags[0][0]).id
        invalid_private_id = JsonTag.encode_tag(tag_id, 'invalid_key')
        r = Request('GET', LOCAL_URL + '/api/replay', params={'limit': 200, 'page': 0,
                                                              'private_tag_keys': [invalid_private_id]})

        response = test_client.send(r)
        assert(response.status_code == 400)
Exemplo n.º 9
0
def initialize_database_tags(initialize_database_small_replays):
    from backend.blueprints.spa_api.service_layers.replay.json_tag import JsonTag
    from backend.database.wrapper.tag_wrapper import TagWrapper

    session = initialize_database_small_replays.get_session()
    replay_ids = initialize_database_small_replays.get_ids()

    tags = [
        ("tag1", 0, 5, "private_id1"),  # grabs the first 5 replays in the list
        ("tag2", 2, 2,
         None),  # starts at the 2nd replay and then gets the next 2
        ("tag3", -5, 4, "private_id2"),  # grabs the last 4 replays in the list
        ("tag4", -6, 4,
         None),  # starts 6 back from the end and grabs 4 replays
    ]

    tagged_games = {}
    for tag in tags:
        tagged_games[tag[0]] = []

        created_tag = JsonTag.create(tag[0],
                                     session=session,
                                     player_id=default_player_id(),
                                     private_id=tag[3])
        game_ids = replay_ids[tag[1]:tag[1] + tag[2]]
        for game_id in game_ids:
            tagged_games[tag[0]].append(game_id)
            TagWrapper.add_tag_to_game(session, game_id, created_tag.db_tag)

    class wrapper:
        def get_session(self):
            return session

        def get_protos(self):
            return initialize_database_small_replays.get_protos()

        def get_ids(self):
            return replay_ids

        def get_tags(self):
            return tags

        def get_tagged_games(self):
            return tagged_games

    return wrapper()
Exemplo n.º 10
0
 def create_from_game(game: Game) -> 'Replay':
     return Replay(id_=game.hash,
                   name=game.name,
                   date=game.match_date.isoformat(),
                   map=game.map,
                   game_mode=get_playlist(game.playlist, game.teamsize),
                   game_score=GameScore.create_from_game(game),
                   players=[
                       ReplayPlayer.create_from_player_game(player_game)
                       for player_game in sort_player_games_by_team_then_id(
                           cast(List[PlayerGame], game.playergames))
                   ],
                   tags=[
                       JsonTag.create_from_dbtag(tag) for tag in game.tags
                       if tag.owner == get_current_user_id()
                   ],
                   visibility=game.visibility,
                   ranks=game.ranks,
                   mmrs=game.mmrs)
Exemplo n.º 11
0
    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_id': 'fake_private_id'}
        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_id')

        player = fake_session.query(Player.platformid == '76561198018756583').first()
        assert(player is not None)
Exemplo n.º 12
0
def api_rename_tag(current_name: str):
    accepted_query_params = [QueryParam(name='new_name')]
    query_params = get_query_params(accepted_query_params, request)

    tag = JsonTag.rename(current_name, query_params['new_name'])
    return better_jsonify(tag), 200
Exemplo n.º 13
0
def api_delete_tag(name: str):
    JsonTag.delete(name)
    return '', 204
Exemplo n.º 14
0
def api_create_tag(name: str, query_params=None):
    private_id = None
    if 'private_id' in query_params:
        private_id = query_params['private_id']
    tag = JsonTag.create(name, private_id=private_id)
    return better_jsonify(tag), 201
Exemplo n.º 15
0
def api_remove_tag_from_game(name: str, id_: str):
    JsonTag.remove_tag_from_game(name, id_)
    return '', 204
Exemplo n.º 16
0
def api_add_tag_to_game(name: str, id_: str):
    JsonTag.add_tag_to_game(name, id_)
    return '', 204
Exemplo n.º 17
0
def api_add_tag_key(name: str, private_id: str):
    JsonTag.add_private_key(name, private_id)
    return better_jsonify(private_id), 204
Exemplo n.º 18
0
def api_get_tag_key(name: str):
    return better_jsonify(JsonTag.get_encoded_private_key(name))
Exemplo n.º 19
0
def api_get_tags(query_params=None):
    tags = JsonTag.get_all()
    with_id = False
    if 'with_id' in query_params:
        with_id = query_params['with_id']
    return better_jsonify([tag.to_JSON(with_id=with_id) for tag in tags])