def test_create_rental_end_before_start_will_throw(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = get_datetime(2030, 12, 2, 9, 0) end_date = get_datetime(2030, 12, 1, 12, 0) with pytest.raises(StartDateNotBeforeEndDateException): create_test_rental(db, car, customer, start_date, end_date)
def test_create_rental_in_the_past_will_throw(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = get_datetime(2020, 12, 1, 9, 0) end_date = get_datetime(2020, 12, 2, 12, 0) with pytest.raises(RentalCreatedInThePastException): create_test_rental(db, car, customer, start_date, end_date)
def test_create_rental_collision_with_reservation_will_throw(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = get_datetime(2030, 12, 1) end_date = get_datetime(2030, 12, 2) create_test_reservation(db, car, customer, start_date, end_date) with pytest.raises(ReservationCollisionException): create_test_rental(db, car, customer, start_date, end_date)
def test_get_overtime_rentals(client: TestClient, superuser_token_headers: dict, db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = datetime.now(tz=pytz.UTC) end_date = datetime.now(tz=pytz.UTC) + timedelta(milliseconds=1) create_test_rental(db, car, customer, start_date, end_date) response = client.get(f"{settings.API_V1_STR}/rentals/overtime", headers=superuser_token_headers) assert response.status_code == 200 assert len(response.json()) > 0
def test_update_completed_rental_will_throw(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = get_datetime(2030, 12, 1, 9, 0) end_date = get_datetime(2030, 12, 2, 12, 0) rental = create_test_rental(db, car, customer, start_date, end_date) rental_update_dto = RentalUpdateDto( car_id=rental.car_id, customer_id=rental.customer_id, start_date=rental.start_date, end_date=rental.end_date, status=RentalStatus.COMPLETED, ) services.rental.update(db=db, db_obj=rental, obj_in=rental_update_dto) rental_update_dto = RentalUpdateDto( car_id=rental.car_id, customer_id=rental.customer_id, start_date=rental.start_date + timedelta(days=1), end_date=rental.end_date, status=RentalStatus.COMPLETED, ) with pytest.raises(UpdatingCompletedRentalException): services.rental.update(db=db, db_obj=rental, obj_in=rental_update_dto)
def test_update_rental_with_reservation_change_carid_customerid_will_throw( db: Session, ) -> None: car = create_test_car(db) customer = create_test_customer(db) car1 = create_test_car(db) customer2 = create_test_customer(db) start_date = get_datetime(2030, 12, 1, 9, 0) end_date = get_datetime(2030, 12, 2, 12, 0) reservation = create_test_reservation(db, car, customer, start_date, end_date) rental = create_test_rental( db, car, customer, start_date, end_date, reservation=reservation ) rental_update_dto = RentalUpdateDto( car_id=car1.id, customer_id=customer2.id, reservation_id=rental.reservation_id, start_date=rental.start_date, end_date=rental.end_date, status=rental.status, ) with pytest.raises(RentalAndReservationDifferenceException): services.rental.update(db=db, db_obj=rental, obj_in=rental_update_dto)
def test_get_by_criteria_availability(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date1 = get_datetime(2030, 12, 1) end_date1 = get_datetime(2030, 12, 2) start_date2 = get_datetime(2030, 12, 3) end_date2 = get_datetime(2030, 12, 4) create_test_reservation(db, car, customer, start_date1, end_date1) create_test_rental(db, car, customer, start_date2, end_date2) query = CarsSearchQuery() query.availability_dates = AvailabilityDatesRange(start=start_date1, end=end_date2) available_cars = services.car.get_by_criteria(db, query) assert car.id not in [car.id for car in available_cars]
def test_get_overtime_rentals_no_overtime(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date1 = datetime.now(tz=pytz.UTC) end_date1 = datetime.now(tz=pytz.UTC) + timedelta(days=1) rental = create_test_rental(db, car, customer, start_date1, end_date1) overtime = services.rental.get_overtime(db) assert rental.id not in [rental.id for rental in overtime]
def test_delete_rental(client: TestClient, superuser_token_headers: dict, db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = get_datetime(2030, 12, 24) end_date = get_datetime(2030, 12, 25) rental = create_test_rental(db, car, customer, start_date, end_date) response = client.delete(f"{settings.API_V1_STR}/rentals/{rental.id}", headers=superuser_token_headers) assert response.status_code == 200
def test_create_standalone_rental(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = get_datetime(2030, 12, 1, 9, 0) end_date = get_datetime(2030, 12, 2, 12, 0) rental = create_test_rental(db, car, customer, start_date, end_date) assert rental.id is not None assert rental.start_date == start_date assert rental.end_date == end_date assert rental.status == RentalStatus.IN_PROGRESS assert rental.reservation is None assert rental.car == car assert rental.customer == customer
def test_update_rental(client: TestClient, superuser_token_headers: dict, db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = datetime.now(tz=pytz.UTC) end_date = datetime.now(tz=pytz.UTC) + timedelta(milliseconds=1) rental = create_test_rental(db, car, customer, start_date, end_date) data = { "car_id": rental.car_id, "customer_id": rental.customer_id, "start_date": rental.start_date.isoformat(), "end_date": rental.end_date.isoformat(), "status": "COMPLETED", } response = client.put( f"{settings.API_V1_STR}/rentals/{rental.id}", headers=superuser_token_headers, json=data, ) assert response.status_code == 200
def test_get_active(db: Session) -> None: car = create_test_car(db) customer = create_test_customer(db) start_date = get_datetime(2030, 12, 1, 12, 0) end_date = get_datetime(2030, 12, 2, 9, 0) rental = create_test_rental(db, car, customer, start_date, end_date) rental_update_dto = RentalUpdateDto( car_id=rental.car_id, customer_id=rental.customer_id, start_date=rental.start_date, end_date=rental.end_date, status=RentalStatus.COMPLETED, ) updated_rental = services.rental.update( db=db, db_obj=rental, obj_in=rental_update_dto ) active_rentals = services.rental.get_active(db=db) assert updated_rental not in active_rentals