Exemplo n.º 1
0
def test_get_active_by_car_id_only_active(db: Session) -> None:
    car1 = create_test_car(db)
    customer = create_test_customer(db)

    start_date1 = get_datetime(2030, 12, 1)
    end_date1 = get_datetime(2030, 12, 2)

    reservation = create_test_reservation(
        db, car1, customer, start_date1, end_date1, status=ReservationStatus.NEW
    )

    reservation_update_dto = ReservationUpdateDto(
        car_id=reservation.car_id,
        customer_id=reservation.customer_id,
        start_date=reservation.start_date,
        end_date=reservation.end_date,
        status=ReservationStatus.CANCELLED,
    )

    services.reservation.update(
        db=db, db_obj=reservation, obj_in=reservation_update_dto
    )

    active_reservations = services.reservation.get_active_by_car_id(db, car1.id)
    assert len(active_reservations) == 0
Exemplo n.º 2
0
def test_update_reservation_dates_collision_will_throw(db: Session) -> None:
    car = create_test_car(db)
    customer = create_test_customer(db)

    start_date1 = get_datetime(2030, 12, 3, 9)
    end_date1 = get_datetime(2030, 12, 4, 12)

    create_test_reservation(db, car, customer, start_date1, end_date1)

    start_date2 = get_datetime(2030, 12, 1, 9)
    end_date2 = get_datetime(2030, 12, 2, 12)

    reservation = create_test_reservation(db, car, customer, start_date2, end_date2)

    reservation_update_dto = ReservationUpdateDto(
        car_id=reservation.car_id,
        customer_id=reservation.customer_id,
        start_date=start_date1,
        end_date=end_date1,
        status=ReservationStatus.COLLECTED,
    )

    with pytest.raises(ReservationCollisionException):
        services.reservation.update(
            db=db, db_obj=reservation, obj_in=reservation_update_dto
        )
Exemplo n.º 3
0
def test_create_reservation_dates_collision_on_cancelled(db: Session) -> None:
    car = create_test_car(db)
    customer = create_test_customer(db)

    start_date1 = get_datetime(2030, 12, 3, 9)
    end_date1 = get_datetime(2030, 12, 4, 12)

    reservation = create_test_reservation(db, car, customer, start_date1, end_date1)

    reservation_update_dto = ReservationUpdateDto(
        car_id=reservation.car_id,
        customer_id=reservation.customer_id,
        start_date=reservation.start_date,
        end_date=reservation.end_date,
        status=ReservationStatus.CANCELLED,
    )

    services.reservation.update(
        db=db, db_obj=reservation, obj_in=reservation_update_dto
    )

    start_date2 = get_datetime(2030, 12, 3, 9)
    end_date2 = get_datetime(2030, 12, 4, 12)

    create_test_reservation(db, car, customer, start_date2, end_date2)
Exemplo n.º 4
0
def test_update_reservation(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)

    reservation = create_test_reservation(
        db, car, customer, start_date, end_date, status=ReservationStatus.NEW
    )

    reservation_update_dto = ReservationUpdateDto(
        car_id=reservation.car_id,
        customer_id=reservation.customer_id,
        start_date=reservation.start_date,
        end_date=reservation.end_date,
        status=ReservationStatus.COLLECTED,
    )

    stored_reservation = services.reservation.update(
        db=db, db_obj=reservation, obj_in=reservation_update_dto
    )

    assert stored_reservation
    assert stored_reservation.start_date == reservation.start_date
    assert stored_reservation.end_date == reservation.end_date
    assert stored_reservation.status == ReservationStatus.COLLECTED
    assert stored_reservation.id is not None
Exemplo n.º 5
0
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)
Exemplo n.º 6
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)
Exemplo n.º 7
0
def test_update_reservation_collected_to_new_will_throw(db: Session) -> None:
    car = create_test_car(db)
    customer = create_test_customer(db)

    start_date1 = get_datetime(2030, 12, 3, 9)
    end_date1 = get_datetime(2030, 12, 4, 12)

    reservation = create_test_reservation(db, car, customer, start_date1, end_date1)

    reservation_update_dto = ReservationUpdateDto(
        car_id=reservation.car_id,
        customer_id=reservation.customer_id,
        start_date=reservation.start_date,
        end_date=reservation.end_date,
        status=ReservationStatus.COLLECTED,
    )

    services.reservation.update(
        db=db, db_obj=reservation, obj_in=reservation_update_dto
    )

    reservation_update_dto = ReservationUpdateDto(
        car_id=reservation.car_id,
        customer_id=reservation.customer_id,
        start_date=reservation.start_date,
        end_date=reservation.end_date + timedelta(days=1),
        status=ReservationStatus.NEW,
    )

    with pytest.raises(UpdatingCollectedReservationException):
        services.reservation.update(
            db=db, db_obj=reservation, obj_in=reservation_update_dto
        )
Exemplo n.º 8
0
def test_create_rental_with_reservation(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)

    reservation = create_test_reservation(db, car, customer, start_date,
                                          end_date)

    data = {
        "car_id": car.id,
        "customer_id": customer.id,
        "reservation_id": reservation.id,
        "start_date": start_date.isoformat(),
        "end_date": end_date.isoformat(),
        "status": "IN_PROGRESS",
    }
    response = client.post(
        f"{settings.API_V1_STR}/rentals/",
        headers=superuser_token_headers,
        json=data,
    )
    assert response.status_code == 200
    content = response.json()
    assert "id" in content
Exemplo n.º 9
0
def test_create_reservation_wrong_dates2(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, 1, 9, 0)

    with pytest.raises(StartDateNotBeforeEndDateException):
        create_test_reservation(db, car, customer, start_date, end_date)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
def test_create_reservation_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)
    end_date = get_datetime(2020, 12, 5, 12)

    with pytest.raises(ReservationCreatedInThePastException):
        create_test_reservation(db, car, customer, start_date, end_date)
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
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
Exemplo n.º 15
0
def test_create_reservation_same_car_different_intervals(db: Session) -> None:
    car = create_test_car(db)
    customer = create_test_customer(db)

    start_date1 = get_datetime(2030, 12, 5, 9)
    end_date1 = get_datetime(2030, 12, 9, 12)

    start_date2 = get_datetime(2030, 12, 10, 3)
    end_date2 = get_datetime(2030, 12, 15, 7)

    create_test_reservation(db, car, customer, start_date1, end_date1)

    create_test_reservation(db, car, customer, start_date2, end_date2)
Exemplo n.º 16
0
def test_create_reservation_same_car_same_dates_will_throw(db: Session) -> None:
    car = create_test_car(db)
    customer = create_test_customer(db)

    start_date1 = get_datetime(2030, 12, 1, 9)
    end_date1 = get_datetime(2030, 12, 2, 12)

    start_date2 = get_datetime(2030, 12, 1, 11)
    end_date2 = get_datetime(2030, 12, 2, 15)

    create_test_reservation(db, car, customer, start_date1, end_date1)

    with pytest.raises(ReservationCollisionException):
        create_test_reservation(db, car, customer, start_date2, end_date2)
Exemplo n.º 17
0
def test_create_reservation(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)

    reservation = create_test_reservation(db, car, customer, start_date, end_date)

    assert reservation.id is not None
    assert reservation.start_date == start_date
    assert reservation.end_date == end_date
    assert reservation.status == ReservationStatus.NEW
    assert reservation.car == car
    assert reservation.customer == customer
Exemplo n.º 18
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
Exemplo n.º 19
0
def test_mark_reservation_collected(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)

    reservation = create_test_reservation(db, car, customer, start_date1, end_date1)

    services.reservation.mark_collected(db=db, reservation_id=reservation.id)

    updated_reservation = services.reservation.get(db=db, _id=reservation.id)

    assert updated_reservation
    assert updated_reservation.id == reservation.id
    assert updated_reservation.status == ReservationStatus.COLLECTED
Exemplo n.º 20
0
def test_create_reservation_same_car_one_day_intersection_will_throw2(
    db: Session,
) -> None:
    car = create_test_car(db)
    customer = create_test_customer(db)

    start_date1 = get_datetime(2030, 12, 5, 9)
    end_date1 = get_datetime(2030, 12, 9, 12)

    start_date2 = get_datetime(2030, 12, 2, 9)
    end_date2 = get_datetime(2030, 12, 5, 7)

    create_test_reservation(db, car, customer, start_date1, end_date1)

    with pytest.raises(ReservationCollisionException):
        create_test_reservation(db, car, customer, start_date2, end_date2)
Exemplo n.º 21
0
def test_create_reservation_with_custom_status_will_default_to_new(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)

    reservation = create_test_reservation(
        db, car, customer, start_date, end_date, status=ReservationStatus.COLLECTED
    )

    assert reservation.id is not None
    assert reservation.start_date == start_date
    assert reservation.end_date == end_date
    assert reservation.status == ReservationStatus.NEW
    assert reservation.car == car
    assert reservation.customer == customer
Exemplo n.º 22
0
def test_get_reservation(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)

    reservation = create_test_reservation(
        db, car, customer, start_date, end_date, status=ReservationStatus.COLLECTED
    )

    stored_reservation = services.reservation.get(db=db, _id=reservation.id)

    assert stored_reservation
    assert stored_reservation.start_date == reservation.start_date
    assert stored_reservation.end_date == reservation.end_date
    assert stored_reservation.status == reservation.status
    assert stored_reservation.id is not None
Exemplo n.º 23
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]
Exemplo n.º 24
0
def test_get_active(db: Session) -> None:
    car = create_test_car(db)
    car2 = create_test_car(db)
    customer = create_test_customer(db)
    customer2 = 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_reservation(db, car, customer, start_date2, end_date2)

    create_test_reservation(db, car2, customer2, start_date2, end_date2)

    active_reservations = services.reservation.get_active(db)
    assert len(active_reservations) >= 3  # there might be other objects in db
Exemplo n.º 25
0
def test_create_rental_with_customer_not_existing(
        client: TestClient, superuser_token_headers: dict,
        db: Session) -> None:
    car = create_test_car(db)

    start_date = get_datetime(2030, 12, 24)
    end_date = get_datetime(2030, 12, 25)

    data = {
        "car_id": car.id,
        "customer_id": 9999999999,
        "start_date": start_date.isoformat(),
        "end_date": end_date.isoformat(),
        "status": "IN_PROGRESS",
    }
    response = client.post(
        f"{settings.API_V1_STR}/rentals/",
        headers=superuser_token_headers,
        json=data,
    )
    assert response.status_code == 404
Exemplo n.º 26
0
def test_get_active_by_car_id(db: Session) -> None:
    car1 = create_test_car(db)
    car2 = 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, car1, customer, start_date1, end_date1, status=ReservationStatus.NEW
    )

    create_test_reservation(
        db, car2, customer, start_date2, end_date2, status=ReservationStatus.NEW
    )

    active_reservations = services.reservation.get_active_by_car_id(db, car2.id)
    assert len(active_reservations) == 1
Exemplo n.º 27
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