Panel Klienta (AccessClientPanelPage)
Ścieżka: /panel-informacji-klienta/:id Dostęp: Publiczny — wymaga aktywnego tokenu sesji (Access Token)
TC-ACP-001 — Walidacja sesji przy wejściu
| # | Akcja | Oczekiwany rezultat |
| 1 | Wejdź na stronę z aktywnym tokenem | Strona ładuje się, dane klienta i rezerwacje są widoczne |
| 2 | Wejdź bez tokenu (czyste sessionStorage) | Przekierowanie na stronę logowania |
| 3 | Wejdź z wygasłym tokenem (access_expires_at w przeszłości) | Przekierowanie na stronę logowania |
| 4 | Wejdź z nieprawidłowym/sfałszowanym tokenem | Backend odrzuca token → przekierowanie na stronę logowania |
TC-ACP-002 — Dane klienta
| # | Akcja | Oczekiwany rezultat |
| 1 | Zaloguj jako klient indywidualny | Widoczne imię i nazwisko |
| 2 | Zaloguj jako klient firmowy (is_company = true) | Widoczna nazwa firmy |
TC-ACP-003 — Statystyki rezerwacji
| # | Akcja | Oczekiwany rezultat |
| 1 | Zaloguj jako klient z rezerwacjami w różnych statusach | Liczniki aktywnych i zakończonych rezerwacji są zgodne z danymi |
| 2 | Zaloguj jako klient bez rezerwacji | Wszystkie liczniki = 0, kwota = 0 |
| 3 | Sprawdź sumę wydatków | Kwota „Łącznie wydano" = suma total_price wszystkich rezerwacji |
TC-ACP-004 — Lista rezerwacji i paginacja
| # | Akcja | Oczekiwany rezultat |
| 1 | Zaloguj jako klient z rezerwacjami | Lista rezerwacji widoczna z poprawnymi danymi (nazwa, data, status, cena) |
| 2 | Zaloguj jako klient z > 10 rezerwacjami | Wyświetlone 10 na stronie 1, paginacja działa poprawnie |
| 3 | Kliknij kartę rezerwacji | Przekierowanie do widoku szczegółów tej rezerwacji |
| 4 | Zaloguj jako klient bez rezerwacji | Komunikat o braku rezerwacji, brak błędów |
TC-ACP-005 — Ostrzeżenie o wygasaniu sesji
| # | Akcja | Oczekiwany rezultat |
| 1 | Ustaw access_expires_at = teraz + 9 minut, odśwież stronę | Modal ostrzegawczy pojawia się automatycznie z czasem do wygaśnięcia i liczbą pozostałych przedłużeń |
| 2 | Sesja ma pełny TTL (2h) | Modal nie pojawia się |
TC-ACP-006 — Przedłużanie sesji
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij „Przedłuż sesję" gdy dostępne przedłużenia | Sesja wydłużona o 1h, licznik przedłużeń spada o 1 (np. ⅔), sessionStorage zaktualizowany |
| 2 | Kliknij „Przedłuż sesję" gdy extensionsRemaining = 0 | Przycisk nieaktywny — przedłużenie niemożliwe |
| 3 | Błąd API podczas przedłużania | Sesja nie zostaje przedłużona, modal pozostaje otwarty |
TC-ACP-007 — Wylogowanie
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij „Wyloguj" w modalu lub na stronie | Token unieważniony na backendzie, sessionStorage wyczyszczony, przekierowanie na logowanie |
| 2 | Błąd API podczas wylogowania | sessionStorage zostaje wyczyszczony mimo błędu, użytkownik przekierowany na logowanie |
| 3 | Po wylogowaniu kliknij „Wstecz" w przeglądarce | Panel niedostępny — przekierowanie na logowanie |
TC-ACP-008 — Spójność sesji przy wielu kartach
| # | Akcja | Oczekiwany rezultat |
| 1 | Otwórz panel w dwóch kartach, wyloguj się w pierwszej, odśwież drugą | Druga karta przekierowuje na logowanie |