Strona szczegółów aktywności (AppActivityPage)
Ścieżka: /zajecia/:id Dostęp: Publiczny
TC-AAP-001 — Ładowanie danych aktywności
| # | Akcja | Oczekiwany rezultat |
| 1 | Wejdź na stronę istniejącej aktywności | Widoczne dane: nazwa, opis, kategoria, organizacja, galeria, oceny |
| 2 | Wejdź na stronę nieistniejącej aktywności (błędne ID) | Komunikat o błędzie lub przekierowanie, brak crashu |
| 3 | Wejdź na stronę nieaktywnej aktywności | Zweryfikuj czy strona jest dostępna/ukryta zgodnie z logiką backendu |
TC-AAP-002 — Nawigacja zakładkami
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij zakładkę „Opis" | Wyświetlona treść opisowa aktywności |
| 2 | Kliknij zakładkę „Harmonogram" | Wyświetlona lista terminów (ActivityScheduleList) |
| 3 | Kliknij zakładkę „Cennik" | Wyświetlone informacje o cenach |
| 4 | Kliknij zakładkę „Opinie" | Wyświetlona lista opinii |
| 5 | Kliknij zakładkę „Lokalizacja" | Wyświetlony adres i link do Google Maps |
| 6 | Kliknij przycisk CTA „Sprawdź terminy" (mobilny) | Przewinięcie do zakładki Harmonogram |
TC-AAP-003 — Harmonogram i statusy terminów
| # | Akcja | Oczekiwany rezultat |
| 1 | Otwórz zakładkę Harmonogram dla aktywności z terminami | Terminy pogrupowane według dat, widoczne godziny, poziom, dostępne miejsca |
| 2 | Sprawdź termin z available_slots > 3 | Status zielony „Dostępne" |
| 3 | Sprawdź termin z available_slots od 1 do 3 | Status pomarańczowy „Ostatnie miejsca!" |
| 4 | Sprawdź termin z available_slots = 0 | Status czerwony „Brak miejsc", brak przycisku zapisu |
| 5 | Sprawdź termin z is_canceled = true | Oznaczony jako odwołany, brak możliwości zapisu |
| 6 | Sprawdź termin z is_active = false | Niedostępny do rejestracji |
| 7 | Sprawdź termin z datą w przeszłości | Brak przycisku zapisu |
TC-AAP-004 — Nawigacja po miesiącach w harmonogramie
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij „Następny miesiąc" | API pobiera terminy dla nowego zakresu dat, lista odświeżona |
| 2 | Kliknij „Poprzedni miesiąc" | API pobiera terminy dla poprzedniego zakresu dat |
| 3 | Kliknij „Dziś" (powrót do bieżącego miesiąca) | Powrót do aktualnego miesiąca, lista odświeżona |
| 4 | Nawiguj do miesiąca bez żadnych terminów | Komunikat o braku sesji w tym miesiącu |
TC-AAP-005 — Najbliższy dostępny termin
| # | Akcja | Oczekiwany rezultat |
| 1 | Aktywność ma przyszłe, aktywne terminy z wolnymi miejscami | Widoczny najbliższy termin w sekcji hero/CTA |
| 2 | Wszystkie terminy są w przeszłości lub zapełnione | Brak wyróżnionego najbliższego terminu |
| 3 | Wszystkie terminy są odwołane lub nieaktywne | Brak wyróżnionego najbliższego terminu |
TC-AAP-006 — Rejestracja na termin
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij „Zapisz się" przy dostępnym terminie | Otwiera się modal rejestracji z danymi wybranego terminu |
| 2 | Wypełnij formularz poprawnymi danymi i wyślij | Rezerwacja utworzona, modal zamknięty, lista terminów odświeżona, modal sukcesu widoczny |
| 3 | Modal sukcesu wyświetla poprawny e-mail i komunikat z API | E-mail zgodny z podanym w formularzu, wiadomość z backendu widoczna |
| 4 | Wyślij formularz z brakującymi wymaganymi polami | Błędy walidacji widoczne przy odpowiednich polach, formularz nie wysłany |
| 5 | Wyślij formularz z błędnym formatem e-mail | Błąd walidacji przy polu e-mail |
| 6 | Zamknij modal rejestracji bez wysyłania | Modal zamknięty, lista terminów bez zmian |
TC-AAP-007 — Rejestracja jako firma
| # | Akcja | Oczekiwany rezultat |
| 1 | Zaznacz „Firma" w formularzu rejestracji | Pola NIP, REGON, nazwa firmy stają się dostępne |
| 2 | Wyślij jako firma z poprawnymi danymi | Rezerwacja utworzona z danymi firmowymi |
TC-AAP-008 — Cennik
| # | Akcja | Oczekiwany rezultat |
| 1 | Aktywność płatna z publicznym cennikiem (is_public_price_list = true) | Ceny widoczne w zakładce Cennik |
| 2 | Aktywność płatna z niepublicznym cennikiem (is_public_price_list = false) | Ceny ukryte lub zastąpione komunikatem |
| 3 | Aktywność bezpłatna (is_paid = false) | Brak sekcji cennika lub widoczna informacja o darmowym udziale |
| 4 | Sprawdź czy cena bieżąca i najniższa cena są poprawnie wyróżnione | Cena bieżąca i najniższa historyczna wyświetlone osobno (jeśli różne) |
| # | Akcja | Oczekiwany rezultat |
| 1 | Otwórz zakładkę Opinie | Pierwsza strona opinii załadowana (5 rekordów) |
| 2 | Przewiń do końca listy opinii | Automatycznie ładowana kolejna strona (następne 5) |
| 3 | Brak kolejnych opinii | Ładowanie zatrzymane, brak błędów |
| 4 | Aktywność bez opinii | Komunikat o braku opinii |
TC-AAP-010 — Lokalizacja
| # | Akcja | Oczekiwany rezultat |
| 1 | Otwórz zakładkę Lokalizacja | Wyświetlony pełny adres (ulica, kod pocztowy, miasto) |
| 2 | Kliknij link do Google Maps | Otwiera Google Maps z adresem aktywności |
| 3 | Kliknij „Kopiuj adres" | Pełny adres skopiowany do schowka |
TC-AAP-011 — Ulubione
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij przycisk „Dodaj do ulubionych" | Aktywność zapisana w localStorage (app_activity_favorites), ikona zmienia stan |
| 2 | Odśwież stronę | Stan ulubionych zachowany (wczytany z localStorage) |
| 3 | Kliknij ponownie (usuń z ulubionych) | Aktywność usunięta z localStorage, ikona wraca do stanu poprzedniego |
TC-AAP-012 — Udostępnianie
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij „Udostępnij" na urządzeniu wspierającym Web Share API | Otwiera natywny systemowy dialog udostępniania |
| 2 | Kliknij „Udostępnij" na urządzeniu bez Web Share API | URL strony skopiowany do schowka |