87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
import pytest
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_vehicle_score_is_backend_driven(client, auth_headers) -> None:
|
|
vehicle = (
|
|
await client.post(
|
|
"/api/my/vehicles",
|
|
headers=auth_headers,
|
|
json={
|
|
"name": "Passport car",
|
|
"make": "Hyundai",
|
|
"model": "Avante",
|
|
"year": 2020,
|
|
"license_plate": "12 가 3456",
|
|
"license_plate_country": "KR",
|
|
"vin": "KMHCT41BAHU123456",
|
|
"fuel_type": "gasoline",
|
|
"current_odometer": 12000,
|
|
"engine_oil_type": "5W-30",
|
|
"engine_oil_volume_l": 4.2,
|
|
},
|
|
)
|
|
).json()
|
|
await client.post(
|
|
"/api/fuel",
|
|
headers=auth_headers,
|
|
json={
|
|
"car_id": vehicle["id"],
|
|
"entry_date": "2026-05-12",
|
|
"odometer": 12000,
|
|
"liters": 35,
|
|
"price_per_liter": 2,
|
|
},
|
|
)
|
|
|
|
response = await client.get(f"/api/my/vehicles/{vehicle['id']}/score", headers=auth_headers)
|
|
|
|
assert response.status_code == 200
|
|
payload = response.json()
|
|
assert payload["vehicle_id"] == vehicle["id"]
|
|
assert payload["completeness_score"] >= 70
|
|
assert payload["profile_quality"] in {"strong", "high_confidence"}
|
|
assert isinstance(payload["missing_items"], list)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_timeline_contains_fuel_service_and_achievements(client, auth_headers) -> None:
|
|
vehicle = (await client.post("/api/my/vehicles", headers=auth_headers, json={"name": "Timeline car"})).json()
|
|
await client.post(
|
|
"/api/service",
|
|
headers=auth_headers,
|
|
json={
|
|
"car_id": vehicle["id"],
|
|
"entry_date": "2026-05-12",
|
|
"service_type": "maintenance",
|
|
"title": "Oil service",
|
|
"total_cost": 100,
|
|
},
|
|
)
|
|
await client.get(f"/api/my/vehicles/{vehicle['id']}/score", headers=auth_headers)
|
|
|
|
response = await client.get(f"/api/my/vehicles/{vehicle['id']}/timeline", headers=auth_headers)
|
|
|
|
assert response.status_code == 200
|
|
item_types = {item["type"] for item in response.json()}
|
|
assert "service" in item_types
|
|
assert "achievement" in item_types
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_service_center_trust_score_requires_employee_access(client, auth_headers, other_auth_headers) -> None:
|
|
center = (
|
|
await client.post(
|
|
"/api/service-centers",
|
|
headers=auth_headers,
|
|
json={"display_name": "Trust Service", "country": "KR", "city": "Seoul"},
|
|
)
|
|
).json()
|
|
|
|
forbidden = await client.get(f"/api/service-centers/{center['id']}/trust-score", headers=other_auth_headers)
|
|
allowed = await client.get(f"/api/service-centers/{center['id']}/trust-score", headers=auth_headers)
|
|
|
|
assert forbidden.status_code == 403
|
|
assert allowed.status_code == 200
|
|
assert allowed.json()["trust_level"] == "new_service"
|