예제 #1
0
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']
예제 #2
0
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']
예제 #3
0
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']
예제 #4
0
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']
예제 #5
0
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']
예제 #6
0
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']
예제 #7
0
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']
예제 #8
0
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']
예제 #9
0
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']
예제 #10
0
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)
예제 #11
0
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']
예제 #12
0
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
예제 #13
0
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']
예제 #14
0
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']
예제 #15
0
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'])
예제 #16
0
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
예제 #17
0
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']
예제 #18
0
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']
예제 #19
0
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
예제 #20
0
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())
예제 #21
0
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']
예제 #22
0
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())
예제 #23
0
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
예제 #24
0
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']
예제 #25
0
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']
예제 #26
0
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']
예제 #27
0
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
예제 #28
0
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
예제 #29
0
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']
예제 #30
0
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']