← EP21 Internal Docs Podpora21.cz
Solution Design · DS-0005 · v0.1.0

E2E Test Data Strategy and Test Tenant

draft Authors: david.sorf, claude-sonnet-4-6 Created: 2026-04-10 Updated: 2026-04-10
e2e testing test-data tenant fixtures seed
E2E testy musí běžet na předem definovaných, zaručených datech — ne na náhodném stavu produkční DB. Řešením je dedikovaný soft tenant 'e2e' s idempotentní seed migrací, která deklaruje přesná vstupní data (tickety, uživatelé, kategorie, SLA). Testy pak testují chování systému vůči konkrétním záznamům, ne vůči 'prvnímu co najdou'.
Related docs:
Related tasks:

Problém

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.

Řešení: dedikovaný testovací tenant

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

Definice testovacího tenanta

TabulkaZá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 migrace

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

.env.e2e konfigurace

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.

Datový kontrakt pro testy

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í):

Omezení a plánovaná vylepšení

Changelog

VersionDateAuthorNote
0.1.02026-04-10david.sorf + claude-sonnet-4-6

Initial draft — testovací tenant, seed migrace, .env.e2e, datový kontrakt pro helpdesk.spec.ts testy.