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()
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()
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()
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)
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()
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()
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()
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()
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()
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()
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)