def test_tag_modification_with_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['owner_id'] == 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_key')
        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_key'

        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_key')
 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]
    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)