# Testy frontendu (`www/`)

Sprawdzają maszynę stanów przycisku nagrywania z `www/script.js`: nagrywanie
przytrzymaniem, blokadę (nagrywanie po zwolnieniu palca), oba sposoby jej
zakończenia oraz anulowanie.

Logika jest w JavaScripcie, więc właściwe wykonanie robi `harness.js`
w jsdom — ładuje prawdziwy `script.js` na atrapę DOM-u i symuluje zdarzenia
myszy. `test_record_button.py` uruchamia harness i wystawia każdą asercję jako
osobny test pytest.

## Przygotowanie (raz)

```bash
cd tests/www && npm install          # jsdom
../../.venv/bin/pip install -r ../../requirements-dev.txt   # pytest
```

## Uruchomienie

```bash
.venv/bin/python -m pytest tests/www          # normalnie
.venv/bin/python -m pytest tests/www -v       # z nazwami przypadków
python3 tests/www/test_record_button.py       # bez pytest, sam raport
node tests/www/harness.js                     # surowy JSON z wynikami
```

Bez `node` lub bez zainstalowanego jsdom testy nie wywalają się, tylko
zgłaszają skip z podpowiedzią, co doinstalować.

## Dodanie przypadku

W `harness.js` dopisz asercję przez `check(id, opis, warunek, szczegóły)`
w odpowiednim scenariuszu. Pytest zbiera identyfikatory automatycznie —
w `test_record_button.py` nic nie trzeba zmieniać.

Uwaga na `makeDom()`: jsdom potrafi sam odpalić `DOMContentLoaded` już po
`eval`, więc licznik `fired` pilnuje, żeby `script.js` nie zainicjalizował się
dwa razy. Drugi komplet handlerów nie zna stanu blokady i cicho psuje wyniki.
