Skip to content

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í


IDBlokerenum kódTrigger
B-01Finanční blokaceOutstandingBlocksuser->getBlock() → balance < block.amount
B-02Finanční varováníDebtWarningblocks → type=warning, balance < amount
B-03Nejsi moderátorNotModeratorUser není v moderator_id ani moderators()
B-04Příliš brzyBadWeekweek_number(now) < event.week
B-05Event zrušenEventCancelledevent.status = CANCELED
B-06Event pozastavenEventOnHoldevent.status = ON_HOLD
B-07Chybějící výsledkyMissingPreviousResultsBlueprint + předchozí event bez results_entered_at
B-08Pondělí před 12:00UnavailableBeforeNoonManaged 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:

  1. Admin panel → Moderátoři → detail moderátora → sekce Blokace → zjisti hodnotu blokační hranice.

  2. Admin panel → Platby → vybrat moderátora → Přidat platbu → záporná hodnota tak, aby výsledná balance klesla pod blokační hranici.

  3. Snížit balance pod block.amount (záporná transakce)

  4. Přihlásit jako moderátor → otevřít libovolný event

  5. Ověřit: červený banner nahoře s textem o nedostatku kreditu

  6. Ověřit: tlačítko Stáhnout je disabled/schováno

  7. Ověřit: ostatní záložky (Rezervace, Týmy) jsou stále přístupné

  8. Dobít kredit (admin → platba, balance ≥ block.amount)

  9. Obnovit stránku → Ověřit: banner zmizel, tlačítko Stáhnout aktivní

Očekávání:

TestVýsledek
Banner barvačervená
Tlačítko Stáhnoutdisabled nebo chybí
Ostatní záložkypřístupné
Po dobití kreditubanner 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).

  1. Nastavit balance do pásma varování
  2. Otevřít event
  3. Ověřit: oranžový banner varování
  4. Ověřit: tlačítko Stáhnout aktivní (není blokováno)
  5. 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”
  1. Přihlásit uživatele, který nemá moderator_id = event.moderator_id a není v event.moderators()
  2. Přejít na /moderator/quizz/{event_id} ručně v URL
  3. Ověřit: 403 nebo redirect, panel se nezobrazí
  4. Zkusit API endpoint pro stažení (/quizz/{event}/download-new/{platform})
  5. Ověřit: 403 nebo chybová odpověď

Příprava: Event naplánovaný na příští týden — ověř datum v Admin → Eventy → detail eventu.

  1. Otevřít event z příštího týdne
  2. Ověřit: modrý banner s datem od kdy
  3. Ověřit: datum v banneru odpovídá začátku týdne eventu
  4. Záložky Rezervace, Týmy, Nastavení přístupné

  1. Nastavit status=canceled (admin panel nebo tinker)
  2. Otevřít event
  3. Ověřit: šedý banner
  4. Ověřit: Stáhnout i Zadat výsledky nedostupné
  5. Záložka Rezervace přístupná (read-only)

Automatické CANCELED po změně frekvence blueprintu

Section titled “Automatické CANCELED po změně frekvence blueprintu”
  1. Otevřít blueprint v admin panelu
  2. Změnit frequency (např. z weekly na monthly)
  3. Ověřit: všechny budoucí eventy tohoto blueprintu mají status=canceled
Terminal window
docker-compose exec fpm php artisan tinker --execute="
App\Models\QuizzBlueprint::find(BP_ID)
->events()
->where('start_time', '>', now())
->pluck('status');
"

  1. V admin panelu → CRM → Žádosti o změnu → přidat nový pro daný event
  2. Ponechat nevyřešené
  3. Otevřít event → Ověřit: oranžový banner
  4. Admin vyřeší ChangeRequest (resolved_at = now())
  5. Obnov stránku → Ověřit: banner zmizel
  1. Admin nastaví blueprint status=on_hold
  2. Ověřit: všechny budoucí eventy blueprintu status=on_hold
  3. Otevřít budoucí event → oranžový banner
  1. Admin zapne is_summer_break=true na blueprintu
  2. Ověřit: status=on_hold na blueprintu a budoucích eventech
  3. Otevřít event → banner (ověřit, zda text zmiňuje letní přestávku)
  4. Admin vypne is_summer_break=false
  5. Ověřit: status=active se 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).

  1. Otevřít aktuální event blueprintu
  2. Ověřit: oranžový banner s tlačítky odkazujícími na chybějící eventy
  3. Ověřit: počet tlačítek = počet eventů bez výsledků
  4. Klik na tlačítko → přesměrování na starý event
  5. Zadat výsledky u starého eventu (kroky 2–5 z SC-01)
  6. Vrátit se na aktuální event
  7. Ověřit: banner zmizel (nebo se aktualizoval pokud zbývají další chybějící)
  8. 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.

  1. Otevřít managed event v pondělí dopoledne
  2. Ověřit: modrý banner s odpočtem do 12:00
  3. Záložky Rezervace, Týmy přístupné
  4. Po 12:00 obnovit stránku → Ověřit: banner zmizel, Stáhnout aktivní

Terminal window
docker-compose exec fpm php artisan test --filter=ModeratorStatusService --compact
docker-compose exec fpm php artisan test --filter=DownloadBlocker --compact