QA: Blokační scénáře
Detailní testování blokačního systému moderátorského panelu. Každý blokátor má vlastní sekci s přípravou, kroky a očekáváním. Referenční dokumentace: Blokace a jejich řešení
Rychlý přehled blokerů
Section titled “Rychlý přehled blokerů”| ID | Bloker | enum kód | Trigger |
|---|---|---|---|
| B-01 | Finanční blokace | OutstandingBlocks | user->getBlock() → balance < block.amount |
| B-02 | Finanční varování | DebtWarning | blocks → type=warning, balance < amount |
| B-03 | Nejsi moderátor | NotModerator | User není v moderator_id ani moderators() |
| B-04 | Příliš brzy | BadWeek | week_number(now) < event.week |
| B-05 | Event zrušen | EventCancelled | event.status = CANCELED |
| B-06 | Event pozastaven | EventOnHold | event.status = ON_HOLD |
| B-07 | Chybějící výsledky | MissingPreviousResults | Blueprint + předchozí event bez results_entered_at |
| B-08 | Pondělí před 12:00 | UnavailableBeforeNoon | Managed kvíz, pondělí < 12:00 |
Bloker kódy jsou v app/Enums/UnableToDownloadQuizzReason.php. Vyhodnocení probíhá v app/Services/ModeratorStatusService.php::evaluateAccess().
B-01 · OutstandingBlocks – finanční blokace
Section titled “B-01 · OutstandingBlocks – finanční blokace”Příprava:
-
Admin panel → Moderátoři → detail moderátora → sekce Blokace → zjisti hodnotu blokační hranice.
-
Admin panel → Platby → vybrat moderátora → Přidat platbu → záporná hodnota tak, aby výsledná balance klesla pod blokační hranici.
-
Snížit balance pod
block.amount(záporná transakce) -
Přihlásit jako moderátor → otevřít libovolný event
-
Ověřit: červený banner nahoře s textem o nedostatku kreditu
-
Ověřit: tlačítko Stáhnout je disabled/schováno
-
Ověřit: ostatní záložky (Rezervace, Týmy) jsou stále přístupné
-
Dobít kredit (admin → platba, balance ≥ block.amount)
-
Obnovit stránku → Ověřit: banner zmizel, tlačítko Stáhnout aktivní
Očekávání:
| Test | Výsledek |
|---|---|
| Banner barva | červená |
| Tlačítko Stáhnout | disabled nebo chybí |
| Ostatní záložky | přístupné |
| Po dobití kreditu | banner zmizel, tlačítko aktivní |
B-02 · DebtWarning – finanční varování (non-blocking)
Section titled “B-02 · DebtWarning – finanční varování (non-blocking)”Příprava: Kredit mezi warning.amount a block.amount (najít oba thresholdy v admin → Platby → Blokace).
- Nastavit balance do pásma varování
- Otevřít event
- Ověřit: oranžový banner varování
- Ověřit: tlačítko Stáhnout aktivní (není blokováno)
- Projít standardní průchod SC-01 – vše musí fungovat
B-03 · NotModerator – přístup jiného uživatele
Section titled “B-03 · NotModerator – přístup jiného uživatele”- Přihlásit uživatele, který nemá
moderator_id = event.moderator_ida není vevent.moderators() - Přejít na
/moderator/quizz/{event_id}ručně v URL - Ověřit: 403 nebo redirect, panel se nezobrazí
- Zkusit API endpoint pro stažení (
/quizz/{event}/download-new/{platform}) - Ověřit: 403 nebo chybová odpověď
B-04 · BadWeek – příliš brzy
Section titled “B-04 · BadWeek – příliš brzy”Příprava: Event naplánovaný na příští týden — ověř datum v Admin → Eventy → detail eventu.
- Otevřít event z příštího týdne
- Ověřit: modrý banner s datem od kdy
- Ověřit: datum v banneru odpovídá začátku týdne eventu
- Záložky Rezervace, Týmy, Nastavení přístupné
B-05 · EventCancelled – event zrušen
Section titled “B-05 · EventCancelled – event zrušen”- Nastavit
status=canceled(admin panel nebo tinker) - Otevřít event
- Ověřit: šedý banner
- Ověřit: Stáhnout i Zadat výsledky nedostupné
- Záložka Rezervace přístupná (read-only)
Automatické CANCELED po změně frekvence blueprintu
Section titled “Automatické CANCELED po změně frekvence blueprintu”- Otevřít blueprint v admin panelu
- Změnit
frequency(např. zweeklynamonthly) - Ověřit: všechny budoucí eventy tohoto blueprintu mají
status=canceled
docker-compose exec fpm php artisan tinker --execute=" App\Models\QuizzBlueprint::find(BP_ID) ->events() ->where('start_time', '>', now()) ->pluck('status');"B-06 · EventOnHold – event pozastaven
Section titled “B-06 · EventOnHold – event pozastaven”Varianta A: Nevyřešený ChangeRequest
Section titled “Varianta A: Nevyřešený ChangeRequest”- V admin panelu → CRM → Žádosti o změnu → přidat nový pro daný event
- Ponechat nevyřešené
- Otevřít event → Ověřit: oranžový banner
- Admin vyřeší ChangeRequest (
resolved_at = now()) - Obnov stránku → Ověřit: banner zmizel
Varianta B: Blueprint ON_HOLD (admin)
Section titled “Varianta B: Blueprint ON_HOLD (admin)”- Admin nastaví blueprint
status=on_hold - Ověřit: všechny budoucí eventy blueprintu
status=on_hold - Otevřít budoucí event → oranžový banner
Varianta C: Letní přestávka
Section titled “Varianta C: Letní přestávka”- Admin zapne
is_summer_break=truena blueprintu - Ověřit:
status=on_holdna blueprintu a budoucích eventech - Otevřít event → banner (ověřit, zda text zmiňuje letní přestávku)
- Admin vypne
is_summer_break=false - Ověřit:
status=activese obnoví na blueprintu a budoucích eventech
B-07 · MissingPreviousResults – chybějící výsledky
Section titled “B-07 · MissingPreviousResults – chybějící výsledky”Příprava: Blueprint s alespoň dvěma eventy, kde starší event nemá zadané výsledky — ověř v Admin → Blueprint → záložka Eventy (chybí datum v sloupci Výsledky zadány).
- Otevřít aktuální event blueprintu
- Ověřit: oranžový banner s tlačítky odkazujícími na chybějící eventy
- Ověřit: počet tlačítek = počet eventů bez výsledků
- Klik na tlačítko → přesměrování na starý event
- Zadat výsledky u starého eventu (kroky 2–5 z SC-01)
- Vrátit se na aktuální event
- Ověřit: banner zmizel (nebo se aktualizoval pokud zbývají další chybějící)
- Krok 1 Stáhnout aktivní
B-08 · UnavailableBeforeNoon – pondělí před 12:00
Section titled “B-08 · UnavailableBeforeNoon – pondělí před 12:00”Příprava: Managed kvíz = event s quizz_config klíčem ze speciálního setu (zjistit z ModeratorStatusService). Testovat v pondělí dopoledne nebo mock time.
- Otevřít managed event v pondělí dopoledne
- Ověřit: modrý banner s odpočtem do 12:00
- Záložky Rezervace, Týmy přístupné
- Po 12:00 obnovit stránku → Ověřit: banner zmizel, Stáhnout aktivní
Automatizované testy
Section titled “Automatizované testy”docker-compose exec fpm php artisan test --filter=ModeratorStatusService --compactdocker-compose exec fpm php artisan test --filter=DownloadBlocker --compact