66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
"""
|
|
Workflow Test: General Turnero Flow
|
|
|
|
This is a COMPOSITION test that validates the full turnero flow
|
|
by calling endpoints in sequence. Use this to ensure the flow works
|
|
end-to-end, but individual endpoint behavior is tested in app folders.
|
|
|
|
Flow:
|
|
1. Check coverage at address
|
|
2. Create pet owner (guest with mock email)
|
|
3. Create pet for owner
|
|
4. Get available services for pet
|
|
5. Create service request
|
|
|
|
Frontend route: /turnos/
|
|
User type: Guest (invitado)
|
|
"""
|
|
|
|
from ..base import ContractTestCase
|
|
from ..endpoints import Endpoints
|
|
from ..helpers import sample_pet_owner, unique_email, SAMPLE_CAT
|
|
|
|
|
|
class TestTurneroGeneralFlow(ContractTestCase):
|
|
"""
|
|
End-to-end flow test for general turnero.
|
|
|
|
Note: This tests the SEQUENCE of calls, not individual endpoint behavior.
|
|
Individual endpoint tests are in mascotas/, productos/, solicitudes/.
|
|
"""
|
|
|
|
def test_full_flow_sequence(self):
|
|
"""
|
|
Complete turnero flow should work end-to-end.
|
|
|
|
This test validates that a guest user can complete the full
|
|
appointment booking flow.
|
|
"""
|
|
# Step 0: Check coverage at address
|
|
coverage_response = self.get(Endpoints.COVERAGE_CHECK, params={
|
|
"lat": -34.6037,
|
|
"lng": -58.3816,
|
|
})
|
|
self.assert_status(coverage_response, 200)
|
|
|
|
# Step 1: Create pet owner (frontend creates mock email for guest)
|
|
mock_email = unique_email("invitado")
|
|
owner_data = sample_pet_owner(mock_email)
|
|
owner_response = self.post(Endpoints.PET_OWNERS, owner_data)
|
|
self.assert_status(owner_response, 201)
|
|
owner_id = owner_response.data["id"]
|
|
|
|
# Step 2: Create pet for owner
|
|
pet_data = {**SAMPLE_CAT, "owner": owner_id}
|
|
pet_response = self.post(Endpoints.PETS, pet_data)
|
|
self.assert_status(pet_response, 201)
|
|
pet_id = pet_response.data["id"]
|
|
|
|
# Step 3: Get services (optionally filtered by pet)
|
|
services_response = self.get(Endpoints.SERVICES, params={"pet_id": pet_id})
|
|
# Services endpoint may return 200 even without pet filter
|
|
self.assertIn(services_response.status_code, [200, 404])
|
|
|
|
# Note: Steps 4-5 (select date/time, create service request) require
|
|
# more setup (available times, cart, etc.) and are tested separately.
|