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)
Esempio n. 7
0
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
Esempio n. 10
0
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
Esempio n. 12
0
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