This commit is contained in:
@@ -123,6 +123,37 @@ async def test_new_sto_application_creates_admin_notification(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_first_vehicle_and_first_record_create_admin_notifications(
|
||||
client, auth_headers, admin_auth_headers, internal_headers
|
||||
) -> None:
|
||||
await ensure_admin(client, internal_headers)
|
||||
vehicle = (
|
||||
await client.post(
|
||||
"/api/cars",
|
||||
headers=auth_headers,
|
||||
json={"name": "First admin-visible car", "current_odometer": 1500},
|
||||
)
|
||||
).json()
|
||||
fuel = await client.post(
|
||||
"/api/fuel",
|
||||
headers=auth_headers,
|
||||
json={
|
||||
"car_id": vehicle["id"],
|
||||
"entry_date": "2026-05-19",
|
||||
"odometer": 1510,
|
||||
"liters": 30,
|
||||
"price_per_liter": 2,
|
||||
},
|
||||
)
|
||||
notifications = await client.get("/api/admin/notifications?limit=100", headers=admin_auth_headers)
|
||||
events = {item["event_type"] for item in notifications.json()["rows"]}
|
||||
|
||||
assert fuel.status_code == 201
|
||||
assert "vehicle_created" in events
|
||||
assert "first_record_created" in events
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_admin_dashboard_requires_admin_role(client, auth_headers, admin_auth_headers, internal_headers) -> None:
|
||||
forbidden = await client.get("/api/admin/dashboard", headers=auth_headers)
|
||||
@@ -389,6 +420,29 @@ async def test_blocked_ocr_upload_creates_admin_notification(
|
||||
assert any(item["event_type"] == "upload_blocked" for item in notifications.json()["rows"])
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_ocr_preview_is_available_in_admin_data_explorer(
|
||||
client, auth_headers, admin_auth_headers, internal_headers
|
||||
) -> None:
|
||||
await ensure_admin(client, internal_headers)
|
||||
|
||||
response = await client.post(
|
||||
"/api/ocr/vin",
|
||||
headers=auth_headers,
|
||||
files={"file": ("vin.txt", b"VIN KMHCT41BAHU123456", "text/plain")},
|
||||
)
|
||||
query = await client.post(
|
||||
"/api/admin/data/query",
|
||||
headers=admin_auth_headers,
|
||||
json={"source": "ocr_results", "category": "vin", "limit": 25},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert query.status_code == 200
|
||||
assert query.json()["rows"][0]["scope"] == "vin"
|
||||
assert query.json()["rows"][0]["status"] == "preview"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_rate_limit_creates_admin_notification(
|
||||
client, auth_headers, admin_auth_headers, internal_headers
|
||||
|
||||
@@ -243,6 +243,9 @@ async def test_work_order_completion_creates_vehicle_records_and_updates_costs(
|
||||
assert refreshed.json()["engine_oil_type"] == "5W-30"
|
||||
assert refreshed.json()["engine_oil_volume_l"] == "4.00"
|
||||
assert stats.json()["total_cost"] == "130.00"
|
||||
admin_notifications = await client.get("/api/admin/notifications?limit=100", headers=admin_auth_headers)
|
||||
admin_events = {item["event_type"] for item in admin_notifications.json()["rows"]}
|
||||
assert {"work_order_completed", "work_order_correction_requested", "work_order_correction_resolved"} <= admin_events
|
||||
|
||||
cannot_edit = await client.patch(
|
||||
f"/api/work-orders/{work_order['id']}",
|
||||
|
||||
@@ -204,6 +204,9 @@ async def test_customer_booking_lifecycle_capacity_calendar_work_order_and_notif
|
||||
)
|
||||
assert work_order.status_code == 201
|
||||
assert work_order.json()["vehicle_id"] == vehicle["id"]
|
||||
admin_notifications = await client.get("/api/admin/notifications?limit=100", headers=admin_auth_headers)
|
||||
admin_events = {item["event_type"] for item in admin_notifications.json()["rows"]}
|
||||
assert {"appointment_created", "work_order_created"} <= admin_events
|
||||
|
||||
my_appointments = await client.get("/api/appointments/my", headers=other_auth_headers)
|
||||
assert my_appointments.json()[0]["linked_work_order_id"] == work_order.json()["id"]
|
||||
|
||||
Reference in New Issue
Block a user