コード例 #1
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)
コード例 #2
0
def test_update_car(client: TestClient, superuser_token_headers: dict,
                    db: Session) -> None:
    car = create_test_car(db)

    data = {
        "model_name": "test",
        "type": "CAR",
        "fuel_type": "DIESEL",
        "gearbox_type": "AUTO",
        "ac_type": "AUTO",
        "number_of_passengers": 8,
        "drive_type": "FRONT",
        "number_of_airbags": 8,
        "price_per_day": "99.99",
    }
    response = client.put(
        f"{settings.API_V1_STR}/cars/{car.id}",
        headers=superuser_token_headers,
        json=data,
    )
    assert response.status_code == 200
    content = response.json()
    assert content["id"] == car.id
    assert content["model_name"] == car.model_name
    assert content["type"] == "CAR"
    assert content["number_of_passengers"] == data["number_of_passengers"]
コード例 #3
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
        )
コード例 #4
0
def test_update_reservation(
    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)

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

    data = {
        "car_id": reservation.car_id,
        "customer_id": reservation.customer_id,
        "start_date": reservation.start_date.isoformat(),
        "end_date": reservation.end_date.isoformat(),
        "status": "COLLECTED",
    }

    response = client.put(
        f"{settings.API_V1_STR}/reservations/{reservation.id}",
        headers=superuser_token_headers,
        json=data,
    )
    assert response.status_code == 200
コード例 #5
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)
コード例 #6
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
        )
コード例 #7
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
コード例 #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
コード例 #9
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
コード例 #10
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)
コード例 #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)
コード例 #12
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)
コード例 #13
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)
コード例 #14
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)
コード例 #15
0
def test_delete_car_no_permissions(client: TestClient,
                                   normal_user_token_headers: dict,
                                   db: Session) -> None:
    car = create_test_car(db)

    response = client.delete(
        f"{settings.API_V1_STR}/cars/{car.id}",
        headers=normal_user_token_headers,
    )
    assert response.status_code == 401
コード例 #16
0
def test_get_car(db: Session) -> None:
    car = create_test_car(db)

    stored_car = services.car.get(db=db, _id=car.id)

    assert stored_car
    assert stored_car.type == car.type
    assert stored_car.price_per_day == car.price_per_day
    assert stored_car.model_name == car.model_name
    assert stored_car.id is not None
コード例 #17
0
def test_delete_car(db: Session) -> None:
    car = create_test_car(db)

    deleted_car = services.car.remove(db=db, _id=car.id)
    car_after_delete = services.car.get(db=db, _id=car.id)

    assert car_after_delete is None
    assert deleted_car.id == car.id
    assert deleted_car.price_per_day == car.price_per_day
    assert deleted_car.model_name == car.model_name
コード例 #18
0
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]
コード例 #19
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
コード例 #20
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)
コード例 #21
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
コード例 #22
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)
コード例 #23
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
コード例 #24
0
def test_get_car_by_id(client: TestClient, superuser_token_headers: dict,
                       db: Session) -> None:
    car = create_test_car(db)
    response = client.get(
        f"{settings.API_V1_STR}/cars/{car.id}",
        headers=superuser_token_headers,
    )
    assert response.status_code == 200
    content = response.json()
    assert content["id"] == car.id
    assert content["model_name"] == car.model_name
    assert content["type"] == "CAR"
    assert content["number_of_passengers"] == car.number_of_passengers
コード例 #25
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)
コード例 #26
0
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
コード例 #27
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
コード例 #28
0
def test_delete_car(client: TestClient, superuser_token_headers: dict,
                    db: Session) -> None:
    car = create_test_car(db)

    response = client.delete(
        f"{settings.API_V1_STR}/cars/{car.id}",
        headers=superuser_token_headers,
    )
    assert response.status_code == 200

    response = client.get(
        f"{settings.API_V1_STR}/cars/{car.id}",
        headers=superuser_token_headers,
    )
    assert response.status_code == 404
コード例 #29
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
コード例 #30
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