def test_edit_user_valid(self, mock_db_session, mock_user_resource): edited_user_payload = copy.deepcopy(mock_user_resource) edited_user_payload["first_name"] = "Jane" with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_user_by_id" ) as mock_db_get: mock_db_get.side_effect = [ UsersDBModel(**mock_user_resource), UsersDBModel(**edited_user_payload) ] user_service = UserService() response = user_service.update_user(mock_user_resource["id"], edited_user_payload) assert edited_user_payload == response
def test_list_all_reservations_valid(self, mock_db_session, mock_books_resource, mock_users_resource, mock_reservations_resource): with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_full_reserved_books_info" ) as mock_db: reservations = [] mock_result = [] for index, reservation in enumerate(mock_reservations_resource): mock_user = mock_users_resource[index] mock_book = mock_books_resource[index] mock_reservation = ReservationsDBModel( user_id=mock_user["id"], book_id=mock_book["id"], reservation_date=reservation["reservation_date"], reservation_expiration_date=reservation[ "reservation_expiration_date"]) reservations.append( (UsersDBModel(**mock_user), BooksDBModel(**mock_book), mock_reservation)) mock_result.append({ "user": mock_user, "book": mock_book, "reservation_date": reservation["reservation_date"], "reservation_expiration_date": reservation["reservation_expiration_date"] }) mock_db.return_value = reservations reservation_service = ReservationService() response = reservation_service.list_reservations() assert mock_result == response
def test_get_user_by_id(self, mock_db_session, mock_user_resource): mock_db_session.query(mock.ANY).filter( mock.ANY).one_or_none.return_value = UsersDBModel( **mock_user_resource) user_service = UserService() response = user_service.get_user("123") assert mock_user_resource == response
def test_create_user_valid(self, mock_db_session, mock_user_payload, mock_user_resource): with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_user_by_email" ) as mock_db_get: mock_db_get.side_effect = [ None, UsersDBModel(**mock_user_resource) ] user_service = UserService() response = user_service.create_user(mock_user_payload) assert mock_user_resource == response
def test_create_user_with_existing_email(self, mock_db_session, mock_user_payload, mock_user_resource): with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_user_by_email" ) as mock_db_get: mock_db_get.return_value = UsersDBModel(**mock_user_resource) user_service = UserService() with pytest.raises(UserAlreadyExists) as exc: response = user_service.create_user(mock_user_payload) assert f"User with email: {mock_user_payload['email']} already exists" in exc.value.args[ 0]
def test_edit_user_invalid_email_change(self, mock_db_session, mock_user_resource): edited_user_payload = copy.deepcopy(mock_user_resource) edited_user_payload["email"] = "*****@*****.**" with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_user_by_id" ) as mock_db_get: mock_db_get.return_value = UsersDBModel(**mock_user_resource) user_service = UserService() with pytest.raises(InvalidFieldException) as exc: response = user_service.update_user(mock_user_resource["id"], edited_user_payload) assert f"'email' is invalid" in exc.value.args[0]
def test_get_reservation_by_user_and_book_id_valid( self, mock_db_session, mock_reservation_payload, mock_book_resource, mock_user_resource, mock_reservation_resource): with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_reserved_book_by_user_id_and_book_id" ) as mock_db: mock_db.return_value = (UsersDBModel(**mock_user_resource), BooksDBModel(**mock_book_resource), ReservationsDBModel( **mock_reservation_payload)) reservation_service = ReservationService() response = reservation_service.get_reservation_by_user_id_and_book_id( book_id=mock_book_resource["id"], user_id=mock_user_resource["id"]) assert mock_reservation_resource == response
def test_create_reservation_already_exists(self, mock_db_session, mock_reservation_payload, mock_book_resource, mock_user_resource): with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_reserved_book_by_user_id_and_book_id" ) as mock_db: mock_db.return_value = (UsersDBModel(**mock_user_resource), BooksDBModel(**mock_book_resource), ReservationsDBModel( **mock_reservation_payload)) reservation_service = ReservationService() with pytest.raises(ReservationAlreadyExists) as exc: response = reservation_service.add_reservation( mock_reservation_payload) assert f"Reservation for user: {mock_user_resource['id']}" \ f" and book: {mock_book_resource['id']} already exists" in exc.value.args[0]
def test_create_reservation_valid(self, mock_db_session, mock_reservation_payload, mock_book_resource, mock_user_resource, mock_reservation_resource): with mock.patch( "library_backend.database.SQLiteDatabaseConnection.get_reserved_book_by_user_id_and_book_id" ) as mock_db: mock_db.side_effect = [ None, (UsersDBModel(**mock_user_resource), BooksDBModel(**mock_book_resource), ReservationsDBModel(**mock_reservation_payload)) ] reservation_service = ReservationService() response = reservation_service.add_reservation( mock_reservation_payload) assert mock_reservation_resource == response
def test_get_all_users(self, mock_db_session, mock_users_resource): mock_users = [UsersDBModel(**user) for user in mock_users_resource] mock_db_session.query(mock.ANY).all.return_value = mock_users user_service = UserService() response = user_service.list_users() assert mock_users_resource == response