async def test_update_library_conflict(client): library1 = client.mock(1, 'library') library2 = client.mock(2, 'library') rv = await client.put(f'/library/{library1["key"]}', library2.to_payload()) assert rv['code'] == 409 assert f'param.conflict:key:{library2["key"]}' in rv['messages']
async def test_get_label(client: BolitestClient): tag1 = client.mock(1, 'tag') label1 = client.mock(1, 'label') rv = await client.get(f'/label/{tag1["name"]}/1') assert rv['code'] == 200 assert rv['data']['tag']['name'] == tag1['name'] assert rv['data']['name'] == label1['name']
async def test_create_library_conflict(client): library1 = client.mock(1, 'library') library4 = client.mock(4, 'library') library4['key'] = library1['key'] rv = await client.post('/library', library4.to_payload()) assert rv['code'] == 409 assert f'param.conflict:key:{library1["key"]}' in rv['messages']
async def test_patch_library_conflict(client): library1 = client.mock(1, 'library') library2 = client.mock(2, 'library') rv = await client.patch(f'/library/{library1["key"]}', {'key': library2['key']}) assert rv['code'] == 409 assert f'param.conflict:key:{library2["key"]}' in rv['messages']
async def test_update_book_author_not_found(client): user1 = client.mock(1, 'user') book1 = client.mock(1, 'book') await client.post('/user/login', user1.to_payload('login')) rv = await client.patch(f'/book/{book1["uid"]}', {'author': {'uid': 'unknown'}}) assert rv['code'] == 404 assert 'entity.not_found:person:uid:unknown' in rv['messages']
async def test_create_book_author_not_found(client): author3 = client.mock(3, 'person') book4 = utils.book.create_book(client.mock, 4, 3) user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.post('/book', book4.to_payload()) assert rv['code'] == 404 assert f'entity.not_found:person:uid:{author3["uid"]}' in rv['messages']
async def test_add_role_not_admin(client): user2 = client.mock(2, 'user') role1 = client.mock(1, 'role') await client.post('/user/login', user2.to_payload('login')) rv = await client.post(f'/user/{user2["username"]}/roles', role1.to_payload()) assert rv['code'] == 403 assert 'user.forbidden:admin' in rv['messages']
async def test_add_self_role(client): user1 = client.mock(1, 'user') role1 = client.mock(1, 'role') await client.post('/user/login', user1.to_payload('login')) rv = await client.post(f'/user/{user1["username"]}/roles', role1.to_payload()) assert rv['code'] == 201 assert f'user.roles.added:{user1["username"]}:{role1["name"]}' in rv[ 'messages']
async def test_update_book(client): author2 = client.mock(2, 'person') book1 = utils.book.create_book(client.mock, 1, 2) user2 = client.mock(2, 'user') await client.post('/user/login', user2.to_payload('login')) rv = await client.put(f'/book/{book1["uid"]}', book1.to_payload()) assert rv['code'] == 200 assert equal_books(rv['data'], book1.to_response(), author2.to_response()) assert rv['data']['updated_by']['username'] == user2['username']
async def test_get_tag(client: BolitestClient): tag1 = client.mock(1, 'tag') tag4 = client.mock(4, 'tag') tag6 = client.mock(6, 'tag') tag6['children'] = [] tag4['children'] = [tag6] tag1['children'] = [tag4] rv = await client.get(f'/tag/{tag1["name"]}') assert rv['code'] == 200 assert_tags_equal(rv['data'], tag1)
async def test_remove_role_not_in_user_roles(client): user1 = client.mock(1, 'user') role1 = client.mock(1, 'role') await client.post('/user/login', user1.to_payload('login')) rv = await client.delete(f'/user/{user1["username"]}/roles/{role1["name"]}' ) assert rv['code'] == 422 assert f'user.roles.not_found:{user1["username"]}:{role1["name"]}' in rv[ 'messages']
async def test_delete_book(client): user1 = client.mock(1, 'user') book1 = client.mock(1, 'book') await client.post('/user/login', user1.to_payload('login')) rv = await client.delete(f'/book/{book1["uid"]}') assert rv['code'] == 200 rv = await client.get(f'/book/{book1["uid"]}') assert rv['code'] == 404
async def test_patch_book(client): author1 = client.mock(1, 'person') book1 = utils.book.create_book(client.mock, 1, 1) user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.patch(f'/book/{book1["uid"]}', {'name': 'new book name'}) assert rv['code'] == 200 assert rv['data']['name'] == 'new book name' assert rv['data']['pages'] == book1['pages'] assert rv['data']['author']['full_name'] == author1.to_response()['full_name']
async def test_create_book(client): author1 = client.mock(1, 'person') book4 = utils.book.create_book(client.mock, 4, 1) user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.post('/book', book4.to_payload()) assert rv['code'] == 201 assert equal_books(rv['data'], book4.to_response(), author1.to_response()) assert rv['data']['created_by']['username'] == user1['username'] assert rv['data']['updated_by']['username'] == user1['username']
async def test_get_person_books(client: BolitestClient): person1 = client.mock(1, 'person') book1 = client.mock(1, 'book') book2 = client.mock(2, 'book') rv = await client.get(f'/person/{person1["uid"]}') assert rv['code'] == 200 assert len(rv['data']['books']) == 2 assert any((b for b in rv['data']['books'] if b['uid'] == book1['uid'])) assert any((b for b in rv['data']['books'] if b['uid'] == book2['uid'])) assert (rv['data']['last_book']['uid'] == sorted( [book1, book2], key=lambda b: b['publication_date'], reverse=True)[0]['uid'])
async def test_update_book_not_found(client): user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.patch('/book/4', {'name': 'new book name'}) assert rv['code'] == 404
async def test_update_library_bad_request(client): library1 = client.mock(1, 'library') rv = await client.put(f'/library/{library1["key"]}', {}) assert rv['code'] == 422 assert 'param.required:key' in rv['messages'] assert 'param.required:name' in rv['messages']
async def test_get_tags(client: BolitestClient): rv = await client.get('/tag') assert rv['code'] == 200 assert len(rv['data']) == 6 for i in range(6): tag = client.mock(i + 1, 'tag') assert rv['data'][i]['name'] == tag['name']
async def test_get_tag_labels(client: BolitestClient): tag1 = client.mock(1, 'tag') rv = await client.get(f'/tag/{tag1["name"]}') assert len(rv['data']['labels']) == 2 assert len([label for label in rv['data']['labels'] if label['id'] == 1]) == 1 assert len([label for label in rv['data']['labels'] if label['id'] == 2]) == 1
async def test_get_book(client): author1 = client.mock(1, 'person') book1 = utils.book.create_book(client.mock, 1, 1) rv = await client.get(f'/book/{book1["uid"]}') assert rv['code'] == 200 assert equal_books(rv['data'], book1.to_response(), author1.to_response())
async def test_register_conflict(client): user1 = client.mock(1, 'user', post_mock_fn=_fix_mocked_user) rv = await client.post('/user/register', user1.to_payload('register')) assert rv['code'] == 409 assert f'param.conflict:username:{user1["username"]}' in rv['messages'] assert f'param.conflict:email:{user1["email"]}' in rv['messages']
async def test_get_book2(client): author2 = client.mock(2, 'person') book3 = utils.book.create_book(client.mock, 3, 2) rv = await client.get(f'/book/{book3["uid"]}') assert rv['code'] == 200 assert equal_books(rv['data'], book3.to_response(), author2.to_response())
async def test_delete_book_not_found(client): user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.delete('/book/4') assert rv['code'] == 404
async def test_remove_role_not_found(client): user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.delete(f'/user/{user1["username"]}/roles/unknown_role') assert rv['code'] == 404 assert 'entity.not_found:role:name:unknown_role' in rv['messages']
async def test_no_self_demotion(client): user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.delete(f'/user/{user1["username"]}/roles/admin') assert rv['code'] == 403 assert 'role.admin.no_self_demotion' in rv['messages']
async def test_root_self_demotion(client): user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.delete(f'/user/{user1["username"]}/roles/admin') assert rv['code'] == 200 assert f'user.roles.removed:{user1["username"]}:admin' in rv['messages']
async def test_register(client): user2 = client.mock(2, 'user', post_mock_fn=_fix_mocked_user) rv = await client.post('/user/register', user2.to_payload('register')) assert rv['code'] == 201 rv = await client.post('/user/login', user2.to_payload('login')) assert rv['code'] == 200
async def test_get_users(client): user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.get('/user') assert rv['code'] == 200 assert len(rv['data']) == 2
async def test_patch_book_bad_request(client): user1 = client.mock(1, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.patch('/book/1', {'name': ''}) assert rv['code'] == 422 assert 'param.non_nullable:name' in rv['messages']
async def test_get_users_forbidden(client): user1 = client.mock(2, 'user') await client.post('/user/login', user1.to_payload('login')) rv = await client.get('/user') assert rv['code'] == 403 assert 'user.forbidden:admin' in rv['messages']