Esempio n. 1
0
def test_cancel_reservation_ok(client, admin_access_token, db_populate_books,
                               db_populate_reservations):
    """
    Test the cancel reservation function.

    :assert: response status code is 204.
    :assert: no content in response.
    :assert: reservation is cancelled.
    """
    book = Book.get_or_404(6)

    response = client.patch(
        f'admin/cancelResBook/{book.id}',
        headers={'Authorization': f'Bearer {admin_access_token}'})

    assert response.status_code == 204
    assert not response.json

    reservation = Reservation.query.filter(
        Reservation.book_id == book.id,
        Reservation.status == "FINISHED").one()
    assert reservation

    with pytest.raises(NoResultFound):
        assert not Reservation.query.filter(Reservation.book_id == book.id,
                                            Reservation.status
                                            == "STARTED").one()
Esempio n. 2
0
def test_reserve_book_400_book_already_reserved(client, admin_access_token,
                                                db_populate_books,
                                                db_populate_reservations):
    """
    Test the reserve book function.

    If book is already reserved:
    :assert: response status code is 400.
    :assert: reservation is not created.
    """

    reservation_before = Reservation.query.filter(
        Reservation.status == 'STARTED').first()

    assert reservation_before

    book = Book.get_or_404(reservation_before.book_id)
    user = User.get_or_404(1)

    response = client.post(
        f'admin/reserveBook/{book.id}/{user.id}',
        headers={'Authorization': f'Bearer {admin_access_token}'})
    assert response.status_code == 400

    #Assert reservations are not changed.
    reservation_after = Reservation.query.filter(
        Reservation.book_id == book.id, Reservation.status == 'STARTED').one()
    assert reservation_before == reservation_after
Esempio n. 3
0
    def test_schema_dump_empty(self, schema, db_populate_books):
        """
        Test schema dump returns an empty list.
        """
        book = Book.get_or_404(1)

        dumped_book = schema.dump(book)
        assert not dumped_book
Esempio n. 4
0
def db_populate_reservations(db_populate_books, db):
    """Populate the mock database with reservations data."""

    books = db.session.query(Book).all()
    users = db.session.query(User).all()

    for x in range(len(users)):
        res = Reservation()
        res.book = books[x]
        res.user = users[x]

        books[x].isReserved = True
        users[x].books_amount += 1

        db.session.add(res)
    db.session.commit()
    
    #Make some additional reservations.
    res1 = Reservation()
    res1.user = users[1]
    res1.book = books[6]
    books[6].isReserved = True
    db.session.add(res1)

    res2 = Reservation()
    res2.user = users[0]
    res2.book = books[7]
    books[7].isReserved = True
    db.session.add(res2)

    res3 = Reservation()
    res3.user = users[2]
    res3.book = books[8]
    books[8].isReserved = True
    db.session.add(res3)

    res4 = Reservation()
    res4.user = users[3]
    res4.book = books[9]
    books[9].isReserved = True
    db.session.add(res4)
    
    res5 = Reservation()
    res5.user = users[4]
    res5.book = books[9]
    books[9].isReserved = True
    db.session.add(res5)

    db.session.commit()

    #Mark some reservations as 'Finished'.
    for x in range(1,5):
        res = Reservation.query.get(x)
        res.status='FINISHED'
        book = Book.get_or_404(res.reserved_by)
        book.isReserved = False
    
    db.session.commit()
Esempio n. 5
0
    def test_dump(self, schema, db_populate_books):
        """
        Test schema dumping.
        :assert: schema returns proper data.
        """
        book = Book.get_or_404(1)

        keys_expected = ['id', 'title', 'author', 'pages', 'isReserved']
        keys_returned = schema.dump(book).keys()

        assert len(keys_expected) == len(keys_returned)
        assert set(keys_expected).issubset(set(keys_returned))
Esempio n. 6
0
def test_delete_book_401_unauthorized(client, normal_access_token,
                                      db_populate_books):
    """
    Test the delete_book function.

    If user is unauthorized:
    :assert: response status code is 401.
    :assert: book wasn't deleted.
    """
    book = Book.query.get(1)

    response = client.delete(
        'admin/book/' + str(book.id),
        headers={'Authorization': 'Bearer ' + normal_access_token})

    assert response.status_code == 401
    assert Book.get_or_404(1)
Esempio n. 7
0
def test_search_for_books_ok(client, admin_access_token, db_populate_books):
    """
    Test the search_for_books function.

    :assert: response status code is 200.
    :assert: api returns a proper response.
    :assert: expected content was returned.
    """
    payload = {'id': '1', 'title': 'book', 'author': 'someAuthor'}

    expected_content = book_schema.dump(Book.get_or_404(payload['id']))

    response = client.post('admin/searchBooks',
                           headers={
                               'Content-Type': 'application/json',
                               'Authorization': 'Bearer ' + admin_access_token
                           },
                           data=json.dumps(payload))

    assert response.status_code == 200
    content_returned = response.json
    assert expected_content == content_returned
Esempio n. 8
0
def test_reserve_book_401_unauthorized(client, normal_access_token,
                                       db_populate_books):
    """
    Test the reserve_book function.
    
    If user is unauthorized:
    :assert: response status code is 401.
    :assert: reservation is not created.
    """

    book = Book.get_or_404(1)
    user = User.get_or_404(1)

    response = client.post(
        f'admin/reserveBook/{book.id}/{user.id}',
        headers={'Authorization': f'Bearer {normal_access_token}'})

    assert response.status_code == 401
    with pytest.raises(NoResultFound):
        reservation = Reservation.query.filter(
            Reservation.book_id == book.id, Reservation.reserved_by == user.id,
            Reservation.status == 'STARTED').one()
        assert not reservation
Esempio n. 9
0
def test_reserve_book_ok(client, admin_access_token, db_populate_books):
    """
    Test the reserve_book function.

    :assert: response status code is 204.
    :assert: no content is returned.
    :assert: reservation was created.
    """
    book = Book.get_or_404(1)
    user = User.get_or_404(1)

    response = client.post(
        f'admin/reserveBook/{book.id}/{user.id}',
        headers={'Authorization': f'Bearer {admin_access_token}'})

    assert response.status_code == 204
    assert not response.json

    reservation = Reservation.query.filter(
        Reservation.book_id == book.id, Reservation.reserved_by == user.id,
        Reservation.status == 'STARTED').one()

    assert reservation
Esempio n. 10
0
def test_search_for_books_only_id_other_empty_ok(client, admin_access_token,
                                                 db_populate_books):
    """
    Test the search_for_books function.

    If only id is filled and the other fields are empty or consist of only whitespaces:
    :assert: response status code is 200.
    :assert: api returns proper data.
    """
    data = {"id": "1", "author": "", "title": "     "}

    response = client.post('admin/searchBooks',
                           headers={
                               'Content-Type': 'application/json',
                               'Authorization': 'Bearer ' + admin_access_token
                           },
                           data=json.dumps(data))

    assert response.status_code == 200

    data_expected = book_schema.dump(Book.get_or_404(data['id']))
    data_returned = response.json
    assert data_expected == data_returned