Skip to content

QA: Speciály a rezervace (CHK-438)

Ruční průchod větve feat/chk-438-specials-reservations. Větev dotahuje MR !274 (zrušení s potvrzením, změna počtu hráčů z e-mailu, obnovení rezervace, připomínka týden předem) a přidává skrytí speciálu z webu, povinný počet hráčů u pozvaného náhradníka a serverové vynucení minima hráčů na speciálech. Zadání: Asana Speciály rezervace - update.


Oblast Změna
Zrušení rezervace z e-mailu Odkaz vede na stránku s potvrzením, ne rovnou na zrušení.
Počet hráčů V potvrzovacím e-mailu a v připomínce týden předem jsou chipsy, kliknutí rovnou uloží. Rozsah je 2 až 8 na běžném kvízu a 3 až 8 na speciálu.
Obnovení rezervace E-mail o zrušení má tlačítko Obnovit rezervaci, stůl se přiděluje znovu.
Připomínka týden předem Nová notifikace pro rezervace založené aspoň 4 týdny před kvízem.
Náhradník Potvrzení pozvánky vyžaduje počet hráčů, pole je předvyplněné z čekací listiny.
Minimum na speciálu Tři hráči na speciál hlídá server, ne jen formulář. Platí i pro náhradníky, změnu počtu z e-mailu, obnovení rezervace a potvrzení stálé rezervace.
Chyby validace Rezervační stránky vypisují, proč byl formulář odmítnut. Dřív se jen znovu načetly.
Tlačítka v potvrzení Potvrzovací e-mail má Upravit počet hráčů, Přidat se do skupiny a Zrušit rezervaci. Skupina jen tam, kde ji kvíz má.
Připomínka den předem Nově i úprava počtu hráčů, tlačítkem a chipsy.
Města u turnaje Výběr města štítky s počty, filtruje bez načtení stránky, volba drží v adrese.
Detail speciálu v adminu Tlačítko Zobrazit na webu vedle Upravit, funguje i u skrytého speciálu.
Poptávka po místě K hlídce jde připsat, kam by zájemce jel. Admin ji vidí na detailu speciálu sečtenou podle měst.
Hlídka lokalit Pod výpisem termínů je Nenašli jste svůj podnik? Jednou denně ve 12:00 odejde souhrn podniků přidaných od poslední zprávy, každý s odkazem na rezervaci. Nastavenou hlídku stránka pozná a nabídne zrušení.
Skrytí speciálu Toggle Skrýt z webu v adminu. Skrytý speciál není ve výpisu a jeho stránka vrací 404, admin ji vidí.
Cache výpisu speciálů Uložení speciálu maže 12hodinovou cache výpisu.
Žádost o změnu rezervace V potvrzení a v připomínce týden předem je odkaz Upravte rezervaci. Stránka mění počet hráčů hned, text „Jiná změna” založí žádost do CRM (Systém → Žádosti o změnu). Autor bez účtu je identifikovaný e-mailem z rezervace.
Úprava rezervace v adminu Rezervace → tužka. Admin mění název týmu, počet hráčů, kontakt a přesouvá rezervaci na jiný termín nebo podnik téhož speciálu. Po přesunu dostane tým nové potvrzení. Na stejné stránce vyřizuje žádosti.

Známá mezera proti ticketu, kterou tento průchod jen potvrzuje:

  • Potvrzovací stránka zrušení neukazuje název speciálu, jen tým, datum a podnik.

Testovací data vytvoří tento skript (uložit jako qa-seed.php, spustit docker compose exec -T fpm php artisan tinker < qa-seed.php):

$config = \App\Modules\QuizzConfig::query()->firstOrFail();
$mkPub = fn (string $name) => \App\Modules\Pub\Pub::factory()->create(['display_name' => $name, 'online_reservations' => true]);
$pubA = $mkPub('QA Hospoda A (2 stoly)');
$pubB = $mkPub('QA Hospoda B (reminder tyden)');
$pubC = $mkPub('QA Hospoda C (reminder zitra)');
foreach ([1, 2] as $i) { \App\Models\PubTable::create(['pub_id' => $pubA->id, 'optimal_capacity' => 4, 'max_capacity' => 8, 'sort_order' => $i, 'is_active' => true]); }
$start = now()->addDays(14)->setTime(19, 0);
$special = \App\Special::create(['quizz_id' => 0, 'type' => 'TOURNAMENT', 'name' => 'qa-special-chk-438', 'display_name' => 'QA speciál CHK-438', 'start_time' => $start, 'moderator_reward' => 500, 'player_fee' => 50, 'config' => $config->id, 'is_hidden' => false]);
$mkEvent = fn ($pub, $when) => \App\Models\QuizzEvent::createQuietly(['special_id' => $special->id, 'quizz_config_id' => $config->id, 'pub_id' => $pub->id, 'status' => \App\Enums\EventState::ACTIVE, 'mode' => \App\Enums\QuizzMode::ACTIVE, 'start_time' => $when, 'week' => $when->format('yW')]);
$eventA = $mkEvent($pubA, $start);
$eventB = $mkEvent($pubB, now()->addDays(7)->setTime(19, 0));
$eventC = $mkEvent($pubC, now()->addDay()->setTime(19, 0));
// createQuietly obchází generování tokenu, bez něj by odkazy v e-mailech nefungovaly.
\App\Models\TeamReservation::query()->createQuietly(['event_id' => $eventB->id, 'token' => \Illuminate\Support\Str::random(64), 'team_name' => 'QA tym reminder tyden', 'email' => '[email protected]', 'phone' => '777000001', 'players' => 4, 'created_at' => now()->subWeeks(5), 'updated_at' => now()->subWeeks(5)]);
\App\Models\TeamReservation::query()->createQuietly(['event_id' => $eventC->id, 'token' => \Illuminate\Support\Str::random(64), 'team_name' => 'QA tym reminder zitra', 'email' => '[email protected]', 'phone' => '777000002', 'players' => 4]);
echo "special={$special->id} eventA={$eventA->id} eventB={$eventB->id} eventC={$eventC->id}\n";

Výsledek: speciál QA speciál CHK-438 (web /specialy/qa-special-chk-438) se třemi událostmi.

Událost Podnik Kdy K čemu
A QA Hospoda A, 2 stoly (kapacita 2 týmy) za 14 dní rezervace, změna počtu, zrušení, obnovení, čekací listina
B QA Hospoda B, bez stolů za 7 dní, rezervace stará 5 týdnů připomínka týden předem
C QA Hospoda C, bez stolů zítra připomínka den předem

Část notifikací (pozvánka náhradníka, připomínky) jde přes frontu. Lokálně je fronta Redis, takže musí běžet worker: docker compose exec -d fpm php artisan horizon. Stav: docker compose exec fpm php artisan horizon:status.


Příprava: Speciál QA speciál CHK-438 je viditelný, web /specialy ho ukazuje mezi nadcházejícími.

  1. Admin → Speciály → QA speciál CHK-438 → Upravit → zapnout Skrýt z webu → Uložit.
  2. Ověřit: v tabulce speciálů má řádek ve sloupci Skrytý ikonu přeškrtnutého oka.
  3. Otevřít /specialy v anonymním okně. Ověřit: speciál chybí, a to hned, ne až po vypršení cache.
  4. Otevřít /specialy/qa-special-chk-438 v anonymním okně. Ověřit: 404.
  5. Otevřít stejnou adresu v okně, kde je přihlášený admin. Ověřit: stránka se zobrazí.
  6. Otevřít /rezervace/<eventA> anonymně. Ověřit: rezervační stránka funguje dál (skrytí nemá blokovat přímé odkazy).
  7. Vypnout přepínač a uložit. Ověřit: speciál je zpět ve výpisu.

Očekávání:

Test Výsledek
Výpis po skrytí speciál chybí okamžitě
Detail anonymně 404
Detail jako admin 200
Rezervační stránka události 200

SC-02 · Rezervace na speciál a potvrzovací e-mail

Section titled “SC-02 · Rezervace na speciál a potvrzovací e-mail”

Příprava: Událost A bez rezervací. Anonymní okno.

  1. Web → /specialy/qa-special-chk-438 → událost A → Rezervovat.
  2. Ověřit: pole Počet hráčů má minimum 3 (speciál) a je předvyplněné.
  3. Vyplnit tým QA Alfa, e-mail [email protected], telefon, 3 hráči → odeslat.
  4. Mailpit: e-mail „Potvrzení přihlášky týmu”.
  5. Ověřit: e-mail obsahuje tlačítko „Potvrdit počet hráčů (3)“, řádek chipsů 4 až 8 (dvojka na speciálu chybí) a odkaz „zrušte rezervaci”.

Příprava: SC-02 hotové, e-mail otevřený v Mailpitu.

  1. Kliknout na chips 5.
  2. Ověřit: stránka /rezervace/pocet-hracu/... s hláškou „Počet hráčů jsme upravili na 5”.
  3. Admin → Rezervace → událost A. Ověřit: tým QA Alfa má 5 hráčů a sedí u stolu s max. kapacitou 8.
  4. Vrátit se na stránku změny, zvolit 8. Ověřit: uloží se 8, stůl zůstává (vejde se).

SC-04 · Zrušení rezervace s potvrzením a obnovení

Section titled “SC-04 · Zrušení rezervace s potvrzením a obnovení”

Příprava: Tým QA Alfa má rezervaci na události A.

  1. V e-mailu z SC-02 kliknout na „zrušte rezervaci”.
  2. Ověřit: načte se stránka „Opravdu chcete zrušit rezervaci?” s týmem, datem a podnikem. Rezervace ještě existuje (admin ji vidí).
  3. Kliknout Potvrdit zrušení. Ověřit: stránka s potvrzením, v adminu rezervace zmizela.
  4. Mailpit: e-mail „Potvrzení odhlášení týmu”. Ověřit: tlačítko „Obnovit rezervaci”.
  5. Kliknout na Obnovit. Ověřit: formulář s předvyplněným počtem hráčů. Odeslat.
  6. Ověřit: rezervace je zpět, má přidělený stůl, v adminu je vidět.
  7. Otevřít odkaz na obnovení znovu. Ověřit: hláška, že rezervace je platná a není co obnovovat.

SC-05 · Čekací listina: zápis vyžaduje počet hráčů

Section titled “SC-05 · Čekací listina: zápis vyžaduje počet hráčů”

Příprava: Událost A plná: QA Alfa obnovená (SC-04) plus druhý tým QA Beta (jiný e-mail) přes formulář. Kapacita jsou 2 stoly.

  1. Anonymně otevřít /rezervace/<eventA>. Ověřit: místo rezervačního formuláře je formulář čekací listiny.
  2. Vyplnit tým QA Gama, e-mail [email protected], telefon, počet hráčů nechat prázdný → odeslat.
  3. Ověřit: prohlížeč formulář nepustí (pole je povinné). V devtools odebrat atribut required a odeslat znovu. Ověřit: stránka vrátí chybu „Počet hráčů je povinný.”
  4. Vyplnit 4 hráče → odeslat. Ověřit: hláška o zapsání jako náhradní, e-mail „Hlídací pes nastaven”.

SC-06 · Pozvaný náhradník musí zadat počet hráčů

Section titled “SC-06 · Pozvaný náhradník musí zadat počet hráčů”

Příprava: SC-05 hotové, QA Gama na čekací listině se 4 hráči.

  1. Jako QA Beta zrušit rezervaci přes e-mail (SC-04 kroky 1 až 3).
  2. Mailpit: QA Gama dostala „Uvolnilo se místo na kvízu!” → kliknout Přihlásit tým.
  3. Ověřit: formulář má pole Počet hráčů předvyplněné na 4 a označené jako povinné.
  4. V devtools odebrat required, vymazat hodnotu, odeslat. Ověřit: návrat na formulář s chybou u počtu hráčů, rezervace nevznikla, QA Gama je stále na listině.
  5. Zadat 1 a odeslat. Ověřit: chyba „alespoň 2”.
  6. Zadat 6 a odeslat. Ověřit: stránka „Budeme se na vás těšit”, v adminu rezervace QA Gama se 6 hráči, náhradník z listiny zmizel.

Očekávání:

Vstup Výsledek
prázdné chyba validace, nic se nezaložilo
1 chyba validace
6 rezervace se 6 hráči

Příprava: Událost B za 7 dní, rezervace QA tým reminder týden založená před 5 týdny.

  1. Spustit docker compose exec fpm php artisan reservations:remind (a případně worker fronty).
  2. Mailpit: e-mail „Za týden vás čeká kvíz …” pro [email protected].
  3. Ověřit: e-mail vyká, má tlačítko „Potvrdit počet hráčů (4)“, chipsy a odkaz na zrušení.
  4. Spustit příkaz znovu. Ověřit: druhý e-mail nepřišel (early_reminder_sent_at je vyplněné).
  5. Založit na události B novou rezervaci přes web (vzniká dnes) a spustit příkaz. Ověřit: připomínka týden předem jí nepřijde, práh jsou 4 týdny mezi rezervací a kvízem.

Příprava: Událost C zítra, rezervace QA tým reminder zítra se čtyřmi hráči.

  1. Vývojář spustí reservations:remind.
  2. Mailpit: e-mail „Už zítra … jdete na kvíz!” pro [email protected].
  3. Ověřit: e-mail uvádí, že se počítá se čtyřmi hráči, a nabízí tlačítka Upravit počet hráčů a Odhlásit tým.
  4. Ověřit: pod tlačítky je řádek chipsů s ostatními počty, čtyřka mezi nimi chybí.
  5. Kliknout na chips 6. Ověřit: stránka hlásí „Počet hráčů jsme upravili na 6”.

Očekávání:

Prvek Stav
Upravit počet hráčů tlačítko, vede na /rezervace/pocet-hracu/...
Odhlásit tým tlačítko, méně výrazné
Chipsy 2 až 8 bez aktuálního počtu, na speciálu od 3

Příprava: Speciál s volným místem a běžný kvíz v témže podniku.

  1. Rezervační formulář speciálu: v devtools změnit min="3" na min="1", poslat 1 hráče.
  2. Ověřit: formulář se vrátí s chybou „Počet hráčů musí být alespoň 3.” Rezervace nevznikla.
  3. Totéž zopakovat s 2 hráči. Ověřit: stejná chyba.
  4. Poslat 3 hráče. Ověřit: rezervace projde.
  5. Na běžném kvízu poslat 2 hráče. Ověřit: projde, minimum 3 platí jen na speciálech.
  6. U rezervace na speciál otevřít odkaz na změnu počtu z e-mailu. Ověřit: nabízené volby začínají trojkou.
  7. Do adresy ručně dopsat ?players=2 a odeslat. Ověřit: vrátí chybu, počet se nezmění.

Očekávání:

Cesta 2 hráči na speciálu
Rezervační formulář odmítnuto
Formulář náhradníka odmítnuto
Změna počtu z e-mailu odmítnuto
Obnovení zrušené rezervace odmítnuto
Potvrzení stálé rezervace odmítnuto

Příprava: Nový turnajový speciál s termínem za měsíc a jednou událostí bez přiřazeného podniku.

  1. Otevřít stránku speciálu na webu.
  2. Ověřit: pod větou „Podrobnosti k tomuto speciálu brzy doplníme.” je šedá karta „Kde se bude hrát, zatím nevíme” s polem pro e-mail a tlačítkem Chci připomínku.
  3. Vyplnit [email protected], odeslat.
  4. Ověřit: karta se přepne na „Hlídání máte nastavené” s tou adresou.
  5. Odeslat formulář znovu se stejnou adresou. Ověřit: druhá hlídka nevznikne, chování se nemění.
  6. V adminu přiřadit události podnik a uložit. Ověřit: v Mailpitu žádná nová zpráva, e-mail neodchází hned.
  7. Vývojář spustí docker compose exec fpm php artisan specials:notify-location-watchers (a případně worker fronty). Na produkci to dělá plánovač denně ve 12:00.
  8. Mailpit: ověřit zprávu „Nové místo pro …” se seznamem přidaných podniků, název podniku vede na jeho rezervaci, pod seznamem tlačítko Podívejte se na nové lokality a odkaz na odhlášení.
  9. Spustit příkaz znovu. Ověřit: druhá zpráva nepřijde, nic nového nepřibylo.
  10. Znovu otevřít stránku speciálu. Ověřit: karta hlídky je pod výpisem podniků s nadpisem „Hlídání máte nastavené”. Návštěvník bez hlídky tam vidí „Nenašli jste svůj podnik?“.
  11. V adminu změnit u události s podnikem čas a spustit příkaz. Ověřit: zpráva nepřijde, úprava události z podniku nové místo nedělá.
  12. Přiřadit podnik další události a spustit příkaz. Ověřit: přijde zpráva jen s tím novým podnikem.
  13. Kliknout v e-mailu na odhlášení. Ověřit: stránka „Upozornění zrušeno”.
  14. Přihlásit další dvě hlídky s poptávkou Olomouc a olomouc.
  15. Admin → Speciály → detail. Ověřit: dlaždice Čeká na lokality, sekce Kdo čeká na lokality, štítek olomouc 2× (různý zápis se sečte) a tabulka s e-maily.

Očekávání:

Situace Chování
Speciál bez podniků karta hlídky se nabízí
Speciál s podniky karta hlídky se nabízí pod výpisem podniků
Série speciálů (více termínů v jednom podniku) karta hlídky se nenabízí
Speciál po odehrání karta hlídky zmizí
Přidání podniku e-mail neodejde hned, přijde v denním souhrnu ve 12:00
Více podniků přidaných během dne jeden e-mail se všemi
Přidání dalšího podniku další den další souhrn, hlídka je trvalá
Úprava události s podnikem (čas, název) žádný e-mail
Zrušená nebo proběhlá událost v souhrnu není
Přihlášení téhož e-mailu na speciál hlídka zaniká, zpráva nedorazí
Neznámý odhlašovací token stejná stránka jako u platného

SC-10 · Žádost o změnu rezervace z e-mailu

Section titled “SC-10 · Žádost o změnu rezervace z e-mailu”

Příprava: Tým QA Alfa má rezervaci na události A, potvrzovací e-mail v Mailpitu.

  1. V e-mailu kliknout na „Upravte rezervaci”.
  2. Ověřit: stránka Změna rezervace s chipsy počtu hráčů (aktuální je vybraný) a textovým polem Jiná změna.
  3. Zvolit jiný počet, textové pole nechat prázdné, odeslat. Ověřit: hláška o úpravě počtu, v adminu (Systém → Žádosti o změnu) žádná nová žádost.
  4. Znovu otevřít stránku, do Jiná změna napsat „Chceme hrát v Hospodě B”, odeslat.
  5. Ověřit: hláška „Žádost o změnu jsme přijali”. Mailpit: e-mail „Žádost o změnu vytvořena” na adresu rezervace.
  6. Otevřít stránku potřetí. Ověřit: modrý box, že žádost čeká, textové pole je zablokované, počet hráčů jde měnit dál.
  7. Admin → Systém → Žádosti o změnu. Ověřit: řádek s typem Rezervace, položkou „tým QA Alfa, …” a autorem [email protected].

SC-11 · Admin vyřídí žádost a přesune rezervaci

Section titled “SC-11 · Admin vyřídí žádost a přesune rezervaci”

Příprava: SC-10 hotové. Speciál potřebuje druhou událost: v adminu u QA speciál CHK-438 přidat event v podniku QA Hospoda B (nebo jiném) a uložit.

  1. V Žádostech o změnu kliknout na Vyřešit. Ověřit: stránka Úprava rezervace, nahoře žádost s textem a e-mailem autora, dole formulář.
  2. Ve výběru Termín a podnik ověřit: jsou tam jen události tohoto speciálu, událost jiného speciálu chybí.
  3. Změnit název týmu na „QA Alfa Sovy”, vybrat druhou událost, uložit.
  4. Ověřit: hláška o přesunu, Rezervace → seznam ukazuje rezervaci u nové události, stůl přidělený v novém podniku.
  5. Mailpit: tým dostal nové „Potvrzení přihlášky týmu” s novým místem. Odkazy v něm vedou na stejnou rezervaci (token se nemění).
  6. Zpět na stránce úpravy napsat odpověď „Přesunuto do Hospody B” a kliknout Vyřešit.
  7. Ověřit: Mailpit: e-mail „Žádost o změnu vyřízena” s odpovědí na [email protected]. V CRM je žádost ve skupině Vyřízené.
  8. Zkusit přesun na událost, kde tým už rezervaci má. Ověřit: chyba u výběru události, nic se nezměnilo.

Po testování výše ověřit, že tyto oblasti nespadly:

  • Rezervace na běžný kvíz z podniku (ne speciál) včetně e-mailu
  • Stálá rezervace: potvrzení přes /rezervace/potvrzeni-stale/...
  • Admin → Rezervace → náhradníci → akce Povýšit na rezervaci
  • Výpis /specialy a detail seriálového speciálu (typ SERIES)
  • Admin formulář speciálu uloží beze změny přepínače (výchozí je viditelný)
  • Rezervace na běžný kvíz projde se dvěma hráči a e-mail nabízí chipsy od dvojky
  • Pozvánka náhradníka vede na potvrzení s předvyplněným a povinným počtem hráčů
  • Speciál v jednom městě štítky s městy nezobrazuje
  • Speciál s podniky nabízí hlídku pod výpisem podniků
  • Moderátorská žádost o změnu události (panel moderátora → Nahlásit změnu) jde založit i vyřídit, autor se zobrazí

Terminal window
docker compose exec fpm php artisan test tests/Feature/Special/ --compact
docker compose exec fpm php artisan test tests/Feature/Reservations/ --compact
- [ ] Rezervace na běžný kvíz projde se dvěma hráči a e-mail nabízí chipsy od dvojky
- [ ] Pozvánka náhradníka vede na potvrzení s předvyplněným a povinným počtem hráčů
- [ ] Speciál v jednom městě štítky s městy nezobrazuje
- [ ] Speciál s podniky nabízí hlídku pod výpisem podniků
- [ ] Moderátorská žádost o změnu události (panel moderátora → Nahlásit změnu) jde založit i vyřídit, autor se zobrazí
docker compose exec fpm php artisan test --filter='Reservation|Special' --compact