Files
drivers_bot/tests/test_gamification.py
2026-05-12 20:06:25 +09:00

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"