Files
service-finder/backend/app/tests/e2e/test_marketplace_flow.py
2026-03-22 11:02:05 +00:00

72 lines
2.6 KiB
Python

"""
End-to-end test for Service Hunt (Marketplace) flow.
Tests the POST /api/v1/services/hunt endpoint with form data.
"""
import pytest
import httpx
@pytest.mark.asyncio
async def test_service_hunt(authenticated_client: httpx.AsyncClient):
"""
Test that a user can submit a service hunt (discovery) with location data.
"""
# Payload as form data (x-www-form-urlencoded)
payload = {
"name": "Test Garage",
"lat": 47.4979,
"lng": 19.0402
}
# Note: httpx sends form data with data=, not json=
response = await authenticated_client.post(
"/api/v1/services/hunt",
data=payload
)
# Assert success
assert response.status_code == 200, f"Unexpected status: {response.status_code}, response: {response.text}"
data = response.json()
assert data["status"] == "success"
print(f"✅ Service hunt submitted successfully: {data}")
@pytest.mark.asyncio
async def test_service_validation(authenticated_client: httpx.AsyncClient):
"""
Test the validation endpoint for staged service records.
- Creates a staging record via hunt endpoint.
- Attempts to validate own submission (should fail with 400).
- (Optional) Successful validation by a different user would require a second user.
"""
# 1. Create a staging record
payload = {
"name": "Validation Test Garage",
"lat": 47.5000,
"lng": 19.0500
}
response = await authenticated_client.post(
"/api/v1/services/hunt",
data=payload
)
assert response.status_code == 200, f"Failed to create staging: {response.text}"
hunt_data = response.json()
staging_id = hunt_data.get("staging_id")
if not staging_id:
# If response doesn't contain staging_id, we need to extract it from the message
# For now, skip this test if staging_id not present
print("⚠️ staging_id not found in response, skipping validation test")
return
# 2. Attempt to validate own submission (should return 400)
validate_response = await authenticated_client.post(
f"/api/v1/services/hunt/{staging_id}/validate"
)
# Expect 400 Bad Request because user cannot validate their own submission
assert validate_response.status_code == 400, f"Expected 400 for self-validation, got {validate_response.status_code}: {validate_response.text}"
# 3. (Optional) Successful validation by a different user would require a second authenticated client.
# For now, we can at least verify that the endpoint exists and returns proper error.
print(f"✅ Self-validation correctly rejected with 400")