E2E test je kontrakt na data. Pokud data nejsou definovaná a zaručená před spuštěním testu, test nic nedokazuje — nebo projde náhodou a selže při jiném stavu DB.
Konkrétní problémy bez definované testovací datové vrstvy:
1. Test 'otevři detail ticketu' musí vědět jaký ticket_code má použít — nelze napevno zapsat produkční kód
2. Test 'změn status na resolved' musí vědět, že ticket je ve stavu kde je status change povolena
3. Test 'přihlášení agenta' musí mít usera s přesně definovanými rolemi pro správný tenant
4. Po resetu DB (lokální vývoj, CI) testy selžou, pokud seed data nejsou součástí migrace
Bez tohoto řešení: testy jsou křehké, závislé na ručně vytvořených datech, nepřenosné na čistou DB.
Zavést soft tenant 'e2e' jako součást DB seed infrastruktury. 'Soft' znamená: existuje jako řádek v core_tenant, sdílí DB schéma s produkčními tenanty — není to separátní deployment ani separátní DB.
Klíčové vlastnosti:
1. Tenant je oddělený od produkčního 'ep21' tenant_id — veškeré testovací záznamy jsou izolované přes tenant_id
2. Seed migrace je idempotentní: INSERT ... ON CONFLICT DO NOTHING — bezpečné opakované spuštění
3. Testovací data mají fixní, dokumentované identifikátory (ticket_code, email, username)
4. .env.e2e nastavuje TENANT_KEY=e2e — aplikace běží identicky, jen nad jiným tenantem
5. Testovací agent user má předem definované role a oprávnění pro e2e tenant
| Tabulka | Záznam | Účel |
|---|---|---|
public.core_tenant | name='e2e', display_name='E2E Test Tenant' | Soft tenant — izolace testovacích dat |
podpora21.user | username='e2e-agent', role=agent | Testovací agent user pro autentizované E2E testy |
podpora21.support_client | email='e2e-client@test.local' | Testovací klient pro Quick Ticket flow |
podpora21.support_category | name='E2E kategorie' | Kategorie pro filtrování v list testu |
podpora21.support_sla_policy | priority='normal', resolution_hours=24 | SLA policy pro ticket creation test |
podpora21.support_ticket | ticket_code='E2ENEW', status='new' | Ticket pro detail test, status change test |
podpora21.support_ticket | ticket_code='E2ERES', status='resolved' | Ticket pro ověření resolved stavu |
podpora21.support_ticket | ticket_code='E2EWEB', channel='web_form' | Ticket z Quick Ticket formuláře |
Seed data jsou spravována jako Phinx data migrace: phinx/db/data/YYYYMMDD_e2e_test_tenant_seed.php
Principy seed migrace:
1. Idempotentní — každý INSERT používá ON CONFLICT DO NOTHING nebo INSERT ... WHERE NOT EXISTS
2. Sekvenční závislosti — nejprve tenant, pak user, pak kategorie/SLA, pak tickety
3. Fixní identifikátory — ticket_code, email, username jsou konstanty, ne generované hodnoty
4. Žádné produkční záznamy nejsou modifikovány
Spuštění:
make migrations-data # spustí data migrace včetně e2e seedu
Po resetu DB:
make migrate # schema + views + data — e2e seed se automaticky zahrne
Soubor .env.e2e (gitignored, vzor v .env.e2e.example) obsahuje:
E2E_BASE_URL=http://localhost:8080
E2E_USERNAME=e2e-agent
E2E_PASSWORD=<heslo z lokálního setup>
TENANT_KEY=e2e
Poznámka: TENANT_KEY=e2e nastavuje aplikaci do testovacího tenanta. Testy pak vidí pouze e2e seed data, ne produkční tickety ep21 tenanta.
Toto je záměrné — E2E testy nikdy neoperují nad produkčními daty.
Každý E2E test deklaruje jaká data potřebuje. Tato data jsou zaručena seed migrací.
Kontrakt testů v helpdesk.spec.ts:
Dashboard test:
List test:
Detail test:
Status change test:
New ticket test (agent):
Quick Ticket test (anonymní):
Status change test mění stav seed ticketu — při opakovaném spuštění musí seed migrace ticket resetovat, nebo test musí operovat na jiném ticketu než ostatní testy. Řešení fáze 2: before-each reset přes API nebo separátní 'scratch' ticket pro destructive testy.
Seed migrace neobsahuje reset — pouze INSERT ON CONFLICT DO NOTHING. Po status change testu je E2ENEW ve stavu 'open', ne 'new'. Workaround: test operuje na E2EWRK (scratch working ticket) který je vždy znovu vytvořen.
Heslo e2e-agent user musí být nastaveno ručně v .env.e2e — není součástí seed migrace z bezpečnostních důvodů.
E2E testy předpokládají běžící Docker stack (make up). Nejsou navrženy pro CI bez DB.
Testovací tenant e2e není mazán ani archivován — data se akumulují při každém spuštění New Ticket testu. Plánovaná vylepšení: teardown krok nebo rate-limited cleanup job.
| Version | Date | Author | Note |
|---|---|---|---|
| 0.1.0 | 2026-04-10 | david.sorf + claude-sonnet-4-6 | Initial draft — testovací tenant, seed migrace, .env.e2e, datový kontrakt pro helpdesk.spec.ts testy. |