Exemplo n.º 1
0
def pytest_sessionstart(session):
    """
    Called after the Session object has been created and
    before performing collection and entering the run test loop.
    """
    'session start'
    with objects.allow_sync():
        UserToken.create_table()
        BangumiSource.create_table()
        UserSubmitBangumi.create_table()
Exemplo n.º 2
0
def test_submit_subject_id_exist(client: TestClient):
    user_id = 233
    subject_id = 2333
    bangumi_id = 'b_id'
    source = 'bilibili'

    async def mock_get_current_user():
        return UserToken(user_id=user_id)

    client.app.dependency_overrides[get_current_user] = mock_get_current_user
    with objects.allow_sync():
        db_models.BangumiSource.replace(
            source=source,
            bangumi_id=bangumi_id,
            subject_id=subject_id,
        ).execute()
    r = client.post('/bgm-tv-auto-tracker/api.v1/submit/subject_id',
                    json={
                        'bangumi_id': bangumi_id,
                        'source': source,
                        'subject_id': subject_id,
                    })
    assert r.status_code == 400, r.text
    assert r.json()['detail'] == 'object already exists'
    assert r.json(
    )['status'] == 'error', 'submit existed object should return 400'

    with pytest.raises(UserSubmitBangumi.DoesNotExist):
        with objects.allow_sync():
            UserSubmitBangumi.get(
                user_id=user_id,
                bangumi_id=bangumi_id,
                source=source,
                subject_id=subject_id,
            )

    client.app.dependency_overrides = {}
    with objects.allow_sync():
        db_models.BangumiSource.delete().where(
            db_models.BangumiSource.source == source,
            db_models.BangumiSource.bangumi_id == bangumi_id,
            db_models.BangumiSource.subject_id == subject_id,
        ).execute()
Exemplo n.º 3
0
def test_submit_subject_id_bad_input(client: TestClient):
    async def mock_get_current_user():
        return UserToken(user_id=233)

    client.app.dependency_overrides[get_current_user] = mock_get_current_user

    r = client.post('/bgm-tv-auto-tracker/api.v1/submit/subject_id',
                    json={
                        'bangumi_id_': 'string',
                        'source': 'bilibili',
                        'subject_id': 288,
                    })
    assert r.status_code == 422, r.text

    with objects.allow_sync():
        UserSubmitBangumi.get(user_id=233,
                              bangumi_id='string',
                              source='bilibili',
                              subject_id=288)

    client.app.dependency_overrides = {}
Exemplo n.º 4
0
def test_oauth_callback(client: TestClient):
    auth_time = datetime.datetime.now()
    mock_get = mock_response(
        {'date': auth_time.isoformat()},
        json.dumps({
            'id': 233,
            'url': 'http://bgm.tv/user/233',
            'username': '******',
            'nickname': 'some_nickname',
            'avatar': {
                'large': 'http://lain.bgm.tv/pic/user/l/000/28/76/287622.jpg',
                'medium': 'http://lain.bgm.tv/pic/user/m/000/28/76/287622.jpg',
                'small': 'http://lain.bgm.tv/pic/user/s/000/28/76/287622.jpg',
            },
            'sign': '站外点格子工具 https://bgm.tv/group/topic/346446 . ...',
            'usergroup': 10,
        }),
    )
    mock_post = mock_response(
        {'date': auth_time.isoformat()},
        json.dumps({
            'access_token': 'some_access_token',
            'expires_in': 6400,
            'token_type': 'Bearer',
            'user_id': 233,
            'refresh_token': 'some_token',
        }),
    )

    with objects.allow_sync():
        UserToken.delete().execute()

    with mock.patch('requests_async.post',
                    mock_post), mock.patch('requests_async.get', mock_get):
        r = client.get('/bgm-tv-auto-tracker/api.v1/oauth_callback',
                       params={'code': '233'})
        assert r.status_code == 200, 'response code not 200'
        assert 'bgm-tv-auto-tracker' in r.cookies
        me_resp = client.get('/bgm-tv-auto-tracker/api.v1/me').json()
        mock_post.assert_awaited_once_with(
            'https://bgm.tv/oauth/access_token',
            data={
                'code': '233',
                'client_id': config.BgmTvAutoTracker.APP_ID,
                'grant_type': 'authorization_code',
                'redirect_uri': config.BgmTvAutoTracker.callback_url,
                'client_secret': config.BgmTvAutoTracker.APP_SECRET,
            },
        )
        mock_get.assert_awaited_once_with('https://api.bgm.tv/user/233')

    assert me_resp['access_token'] == 'some_access_token', (
        'access token mismatch in /me')
    assert me_resp['expires_in'] == 6400, 'expires time mismatch in /me'
    assert me_resp['token_type'] == 'Bearer', 'token type mismatch in /me'
    assert me_resp['user_id'] == 233, 'user_id mismatch in /me'

    with objects.allow_sync():
        user: UserToken = UserToken.get(user_id=233)
        assert user.access_token == 'some_access_token', 'access token mismatch'
        assert user.refresh_token == 'some_token', 'refresh token mismatch'
        assert user.username == 'some_username', 'username mismatch'
        assert user.nickname == 'some_nickname', 'nickname mismatch'
        assert user.auth_time == int(
            auth_time.timestamp()), 'auth time mismatch'
        assert user.expires_in == 6400, 'expires time mismatch'
        assert user.usergroup == 10, 'usergroup mismatch'
Exemplo n.º 5
0
def test_refresh_token(client: TestClient):
    auth_time = datetime.datetime.now()

    mock_get = mock_response(
        {'date': auth_time.isoformat()},
        json.dumps({
            'id': 233,
            'url': 'http://bgm.tv/user/233',
            'username': '******',
            'nickname': 'some_nickname',
            'avatar': {
                'large': 'http://lain.bgm.tv/pic/user/l/000/28/76/287622.jpg',
                'medium': 'http://lain.bgm.tv/pic/user/m/000/28/76/287622.jpg',
                'small': 'http://lain.bgm.tv/pic/user/s/000/28/76/287622.jpg',
            },
            'sign': '站外点格子工具 https://bgm.tv/group/topic/346446 . ...',
            'usergroup': 10,
        }),
    )

    with objects.allow_sync():
        UserToken.replace(
            user_id=233,
            token_type='Bearer',
            expires_in=6400,
            auth_time=1560242743,
            access_token='some_access_token',
            refresh_token='some_token',
            username='******',
            nickname='some_nickname',
            usergroup=10,
            scope='',
        ).execute()

    async def mock_get_current_user():
        return await objects.get(UserToken, user_id=233)

    client.app.dependency_overrides[get_current_user] = mock_get_current_user
    mock_post = mock_response(
        {'date': auth_time.isoformat()},
        json.dumps({
            'access_token': 'new_access_token',
            'expires_in': 505,
            'token_type': 'Bearer',
            'scope': '',
            'refresh_token': 'some_new_token',
        }),
    )

    with mock.patch('requests_async.post',
                    mock_post), mock.patch('requests_async.get', mock_get):
        r = client.post('/bgm-tv-auto-tracker/api.v1/refresh')
        assert r.status_code == 200, r.text
        mock_post.assert_awaited_once_with(
            'https://bgm.tv/oauth/access_token',
            data={
                'grant_type': 'refresh_token',
                'refresh_token': 'some_token',
                'client_id': config.BgmTvAutoTracker.APP_ID,
                'redirect_uri': config.BgmTvAutoTracker.callback_url,
                'client_secret': config.BgmTvAutoTracker.APP_SECRET,
            })
        mock_get.assert_awaited_once_with('https://api.bgm.tv/user/233')

    with objects.allow_sync():
        user: UserToken = UserToken.get(user_id=233)
        assert user.access_token == 'new_access_token', 'access token mismatch'
        assert user.refresh_token == 'some_new_token', 'refresh token mismatch'
        assert user.username == 'some_username', 'username mismatch'
        assert user.nickname == 'some_nickname', 'nickname mismatch'
        assert user.auth_time == int(
            auth_time.timestamp()), 'auth time mismatch'
        assert user.expires_in == 505, 'expires time mismatch'
        assert user.usergroup == 10, 'usergroup mismatch'

    client.app.dependency_overrides = {}
Exemplo n.º 6
0
    bgm_ep_id = pw.IntegerField()
    episode = pw.IntegerField()
    user_id = pw.IntegerField()
    create_time = pw.DateTimeField(default=datetime.datetime.now)
    modify_time = pw.DateTimeField(default=datetime.datetime.now)


class UserSubmitBangumi(S.BgmIpViewer):
    class Meta:
        table_name = 'user_submit_bangumi'
        primary_key = pw.CompositeKey('source', 'bangumi_id', 'user_id')

    source = pw.FixedCharField(max_length=40)
    subject_id = pw.IntegerField()
    bangumi_id = pw.CharField()
    user_id = pw.IntegerField()
    modify_time = pw.DateTimeField(default=datetime.datetime.now)


if __name__ == '__main__':
    from app.db.database import objects

    with objects.allow_sync():
        EpSource.create_table()
        UserToken.create_table()
        BangumiSource.create_table()
        MissingBangumi.create_table()
        UserSubmitBangumi.create_table()
        UserSubmitEpisode.create_table()
        Tag.create_table()