64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
def test_list_bookings_filters_by_vehicle(ops_client):
|
|
response = ops_client.get("/api/v1/bookings", params={"vehicle_ref": "MO-024"})
|
|
assert response.status_code == 200
|
|
bookings = response.json()
|
|
assert len(bookings) >= 1
|
|
assert all(b["vehicle_ref"] == "MO-024" for b in bookings)
|
|
|
|
|
|
def test_list_bookings_supports_bounded_search_pages(ops_client):
|
|
response = ops_client.get(
|
|
"/api/v1/bookings",
|
|
params={"query": "BK-", "page": 1, "page_size": 25},
|
|
)
|
|
assert response.status_code == 200
|
|
body = response.json()
|
|
assert body["page"] == 1
|
|
assert body["page_size"] == 25
|
|
assert body["total"] > 25
|
|
assert body["total_pages"] > 1
|
|
assert len(body["items"]) == 25
|
|
|
|
|
|
def test_create_booking_rejects_overlap_and_audits_valid_booking(ops_client):
|
|
existing = ops_client.get("/api/v1/bookings/BK-DEMO-RETURN").json()
|
|
conflict = ops_client.post(
|
|
"/api/v1/bookings",
|
|
json={
|
|
"customer_ref": "CUS-0001",
|
|
"vehicle_ref": existing["vehicle_ref"],
|
|
"starts_at": existing["starts_at"],
|
|
"ends_at": existing["ends_at"],
|
|
},
|
|
)
|
|
assert conflict.status_code == 409
|
|
available_vehicle = ops_client.get(
|
|
"/api/v1/vehicles", params={"status": "available"}
|
|
).json()[0]["public_ref"]
|
|
created = ops_client.post(
|
|
"/api/v1/bookings",
|
|
json={
|
|
"customer_ref": "CUS-0001",
|
|
"vehicle_ref": available_vehicle,
|
|
"starts_at": "2030-09-01T10:00:00Z",
|
|
"ends_at": "2030-09-02T12:00:00Z",
|
|
},
|
|
)
|
|
assert created.status_code == 201
|
|
body = created.json()
|
|
assert body["status"] == "reserved"
|
|
assert body["vehicle_ref"] == available_vehicle
|
|
|
|
|
|
def test_get_booking_detail(ops_client):
|
|
response = ops_client.get("/api/v1/bookings/BK-DEMO-RETURN")
|
|
assert response.status_code == 200
|
|
body = response.json()
|
|
assert body["status"] == "active"
|
|
assert body["vehicle_ref"] == "MO-024"
|
|
|
|
|
|
def test_get_booking_404_for_unknown_ref(ops_client):
|
|
response = ops_client.get("/api/v1/bookings/BK-UNKNOWN")
|
|
assert response.status_code == 404
|