コード例 #1
0
async def test_verify_user_invalid_token(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    data = user_default_data.copy()
    del data['full_name']
    data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(data))
    assert resp.status == 200

    invalid_token = (await resp.json()).get("access_token")
    invalid_token = invalid_token[:-4] + 'abcd'
    headers = {'AUTHORIZATION': f'Bearer {invalid_token}'}

    resp = await test_cli.get('/api/v1/verify', headers=headers)

    assert resp.status == 401

    result = await resp.json()

    assert result.get('reasons') == ["Auth required."]
    assert result.get('exception') == "Unauthorized"

    # delete user from db
    await user_obj.delete()
コード例 #2
0
async def test_user_tweet_without_tags(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    user_data = user_default_data.copy()
    del user_data['full_name']
    user_data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(user_data))
    assert resp.status == 200

    headers = {
        'AUTHORIZATION': f'Bearer {(await resp.json()).get("access_token")}'
    }

    tweet_body = tweet_default_data.copy()
    del tweet_body['tags']
    resp = await test_cli.post('/api/v1/tweet',
                               data=json.dumps(tweet_body),
                               headers=headers)

    assert resp.status == 400

    result = await resp.json()
    assert result.get('code') == 'badRequest'
    assert result.get('message') == 'Bad request'

    # delete objects
    await user_obj.delete()
コード例 #3
0
async def test_verify_user(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    data = user_default_data.copy()
    del data['full_name']
    data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(data))
    assert resp.status == 200

    headers = {
        'AUTHORIZATION': f'Bearer {(await resp.json()).get("access_token")}'
    }

    resp = await test_cli.get('/api/v1/verify', headers=headers)

    assert resp.status == 200

    result = await resp.json()

    assert result == {"valid": True}

    # delete user from db
    await user_obj.delete()
コード例 #4
0
async def test_search_tweet(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)
    tag_obj = await get_or_create(Tag, None, **{'tag_name': 'tag1'})
    tweet_obj = await get_or_create(
        Tweet, None, **{
            'msg': 'test msg',
            'user_id': user_obj.id
        })
    tag_tweet_obj = await get_or_create(
        TagTweet, None, **{
            'tag_id': tag_obj.id,
            'tweet_id': tweet_obj.id
        })

    # delete key and values from redis
    await delete_key(tag_obj.tag_name)

    # make shallow copy and change hash pass to clear pass
    user_data = user_default_data.copy()
    del user_data['full_name']
    user_data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(user_data))
    assert resp.status == 200

    headers = {
        'AUTHORIZATION': f'Bearer {(await resp.json()).get("access_token")}'
    }

    resp = await test_cli.get('/api/v1/search-tweets?tag=tag1',
                              headers=headers)
    assert resp.status == 200

    result = await resp.json()

    assert result.get('code') == 'success'
    assert result.get('pagination') == {'total': 1, 'page': 1, 'page_size': 10}
    assert result.get('data') == [tweet_obj.as_json()]

    # check redis key and values
    result, total, error = await get_values(tag_obj.tag_name, 1, 10)
    assert result == [tweet_obj.as_json()]
    assert total == 1
    assert not error

    # delete objects
    await tag_tweet_obj.delete()
    await tag_obj.delete()
    await tweet_obj.delete()
    await user_obj.delete()

    # delete key and values from redis
    await delete_key(tag_obj.tag_name)
コード例 #5
0
async def test_authenticate_user(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    data = user_default_data.copy()
    del data['full_name']
    data['password'] = '******'

    request = Request(data)
    user = await authenticate(request)

    assert user.get('user_id') == user_obj.id
    assert user.get('username') == user_obj.username

    # delete user from db
    await user_obj.delete()
コード例 #6
0
async def test_login_invalid_password(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    data = user_default_data.copy()
    del data['full_name']
    data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(data))
    resp_json = await resp.json()

    assert resp.status == 401
    assert resp_json.get('reasons') == ['Password is incorrect.']
    assert resp_json.get('exception') == 'AuthenticationFailed'

    # delete user from db
    await user_obj.delete()
コード例 #7
0
async def test_login_user(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    data = user_default_data.copy()
    del data['full_name']
    data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(data))
    assert resp.status == 200

    resp_json = await resp.json()

    assert resp_json.get('access_token')
    assert resp_json.get('access_token') != ''

    # delete user from db
    await user_obj.delete()
コード例 #8
0
async def test_authenticate_miss_password(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    data = user_default_data.copy()
    del data['full_name']
    del data['password']

    request = Request(data)
    catch_error = False
    try:
        await authenticate(request)
    except Exception as ex:
        assert str(ex) == "Missing username or password."
        catch_error = True

    assert catch_error is True

    # delete user from db
    await user_obj.delete()
コード例 #9
0
async def test_search_tweet_empty_tag(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)
    tag_obj = await get_or_create(Tag, None, **{'tag_name': 'tag1'})
    tweet_obj = await get_or_create(
        Tweet, None, **{
            'msg': 'test msg',
            'user_id': user_obj.id
        })
    tag_tweet_obj = await get_or_create(
        TagTweet, None, **{
            'tag_id': tag_obj.id,
            'tweet_id': tweet_obj.id
        })

    # make shallow copy and change hash pass to clear pass
    user_data = user_default_data.copy()
    del user_data['full_name']
    user_data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(user_data))
    assert resp.status == 200

    headers = {
        'AUTHORIZATION': f'Bearer {(await resp.json()).get("access_token")}'
    }

    resp = await test_cli.get('/api/v1/search-tweets?tag=', headers=headers)
    assert resp.status == 400

    result = await resp.json()

    assert result.get('code') == 'badRequest'
    assert result.get('message') == 'Bad request'

    # delete objects
    await tag_tweet_obj.delete()
    await tag_obj.delete()
    await tweet_obj.delete()
    await user_obj.delete()
コード例 #10
0
async def test_verify_user_without_header(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    data = user_default_data.copy()
    del data['full_name']
    data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(data))
    assert resp.status == 200

    resp = await test_cli.get('/api/v1/verify')

    assert resp.status == 401

    result = await resp.json()

    assert result.get('reasons') == ["Authorization header not present."]
    assert result.get('exception') == "Unauthorized"

    # delete user from db
    await user_obj.delete()
コード例 #11
0
async def test_user_tweet(test_cli):
    # create user object
    user_obj = await get_or_create(User, None, **user_default_data)

    # make shallow copy and change hash pass to clear pass
    user_data = user_default_data.copy()
    del user_data['full_name']
    user_data['password'] = '******'

    resp = await test_cli.post('/api/v1/login', data=json.dumps(user_data))
    assert resp.status == 200

    headers = {
        'AUTHORIZATION': f'Bearer {(await resp.json()).get("access_token")}'
    }

    resp = await test_cli.post('/api/v1/tweet',
                               data=json.dumps(tweet_default_data),
                               headers=headers)

    assert resp.status == 201

    result = await resp.json()

    assert result.get('code') == 'success'

    tweet_data = result.get('data')

    assert tweet_data.get('user_id') == user_obj.id
    assert tweet_data.get('msg') == tweet_data.get('msg')

    # find tag object and check it
    tag_obj = await get_or_create(
        Tag, *(Tag.tag_name == tweet_default_data.get('tags')[0], ), **{})
    assert tag_obj
    assert tag_obj.tag_name == tweet_default_data.get('tags')[0]

    # find tweet object and check msg and related to user
    tweet_obj = await get_or_create(Tweet, *(Tweet.user_id == user_obj.id, ),
                                    **{})
    assert tweet_obj
    assert tweet_obj.msg == tweet_data.get('msg')
    assert tweet_obj.user_id == user_obj.id

    # find tweet_tag object and check exist and check related tweet id
    tag_tweet_obj = await get_or_create(TagTweet,
                                        *(TagTweet.tag_id == tag_obj.id, ),
                                        **{})
    assert tag_tweet_obj
    assert tag_tweet_obj.tweet_id == tweet_obj.id

    # check redis key and values
    result, total, error = await get_values(tag_obj.tag_name, 1, 10)
    assert result == [tweet_obj.as_json()]
    assert total == 1
    assert not error

    # delete objects
    await tag_tweet_obj.delete()
    await tag_obj.delete()
    await tweet_obj.delete()
    await user_obj.delete()

    # delete key and values from redis
    await delete_key(tag_obj.tag_name)