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