Strona szczegółów obiektu (AppItemPage)
Ścieżka: /obiekty/:id Dostęp: Publiczny
TC-AIP-001 — Ładowanie danych obiektu
| # | Akcja | Oczekiwany rezultat |
| 1 | Wejdź na stronę istniejącego obiektu | Dane obiektu załadowane: nazwa, opis, lokalizacja, udogodnienia, oceny |
| 2 | Wejdź na stronę nieistniejącego obiektu (błędne ID) | Komunikat o błędzie lub przekierowanie, brak crashu |
| 3 | Przejdź z jednego obiektu do innego (zmiana ID w URL) | Dane odświeżone, stare dane nie są widoczne |
TC-AIP-002 — Nawigacja zakładkami
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij zakładkę „Opis" | Opis obiektu, udogodnienia, parametry (powierzchnia, pojemność) |
| 2 | Kliknij zakładkę „Kalendarz" | Kalendarz dostępności z możliwością wyboru dat |
| 3 | Kliknij zakładkę „Cennik" | Informacje o cenach (jeśli is_public_price_list = true) |
| 4 | Kliknij zakładkę „Opinie" | Lista opinii |
| 5 | Kliknij zakładkę „Lokalizacja" | Adres, link do Google Maps, dane kontaktowe zarządców |
| 6 | Kliknij zakładkę „Aktywności" | Lista aktywności powiązanych z obiektem |
| 7 | Kliknij zakładkę „Powiązane obiekty" | Lista podobiektów (powiązanych przez parent_id) |
| 8 | Kliknij CTA „Sprawdź dostępność" | Przewinięcie do zakładki Kalendarz |
TC-AIP-003 — Cennik
| # | Akcja | Oczekiwany rezultat |
| 1 | Obiekt płatny z publicznym cennikiem (is_public_price_list = true) | Ceny widoczne w zakładce Cennik |
| 2 | Obiekt płatny z niepublicznym cennikiem (is_public_price_list = false) | Ceny ukryte lub zastąpione komunikatem |
| 3 | Obiekt bezpłatny (is_paid = false) | Brak sekcji cennika lub widoczna informacja o bezpłatnym dostępie |
| 4 | Sprawdź wyświetlanie ceny bieżącej i najniższej (z ostatnich 30 dni) | Obie wartości widoczne jeśli różne |
TC-AIP-004 — Wybór dat w kalendarzu
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij dostępny dzień w kalendarzu | Dzień zaznaczony, pojawia się w panelu wybranych dat |
| 2 | Kliknij ponownie zaznaczony dzień | Dzień odznaczony, znika z panelu |
| 3 | Zaznacz kilka dni | Wszystkie dni widoczne w panelu, posortowane chronologicznie |
| 4 | Kliknij „Usuń" przy konkretnej dacie w panelu | Tylko ta data usunięta, pozostałe zachowane |
| 5 | Zaznacz datę w przeszłości | Zweryfikuj czy backend/frontend blokuje rezerwację przeszłych dat |
| 6 | Kliknij „Wyczyść wszystko" | Wszystkie zaznaczenia usunięte, powrót do widoku kalendarza |
TC-AIP-005 — Sloty godzinowe
| # | Akcja | Oczekiwany rezultat |
| 1 | Zaznacz datę — sprawdź domyślne godziny | Slot wypełniony domyślnymi godzinami z obiektu (reservation_start_time / reservation_end_time) |
| 2 | Zmień godzinę rozpoczęcia lub zakończenia slotu | Slot zaktualizowany dla tej konkretnej daty |
| 3 | Ustaw godzinę zakończenia wcześniejszą niż rozpoczęcia | Zweryfikuj czy walidacja blokuje niepoprawny zakres godzin |
| 4 | Zaznacz wiele dat i zmień godziny dla każdej osobno | Każda data ma niezależny slot godzinowy |
| # | Akcja | Oczekiwany rezultat |
| 1 | Zaznacz daty i kliknij „Przejdź do formularza" | Widok przechodzi do formularza z listą wybranych slotów |
| 2 | Wypełnij formularz poprawnymi danymi i wyślij | Rezerwacja utworzona, kalendarz odświeżony, modal sukcesu z adresem e-mail |
| 3 | Wyślij formularz bez zaznaczonych dat | Formularz zablokowany lub komunikat o konieczności wyboru dat |
| 4 | Wyślij z brakującymi wymaganymi polami | Błędy walidacji przy odpowiednich polach |
| 5 | Zaznacz „Firma" w formularzu | Pola NIP, REGON, nazwa firmy stają się dostępne |
| 6 | Wyślij jako firma z poprawnymi danymi | Rezerwacja z danymi firmowymi utworzona |
| 7 | Zamknij formularz przed wysłaniem | Powrót do widoku kalendarza, zaznaczenia zachowane lub wyczyszczone — zweryfikuj |
| # | Akcja | Oczekiwany rezultat |
| 1 | Otwórz zakładkę Opinie | Pierwsza strona załadowana (5 rekordów) |
| 2 | Przewiń do końca listy | Automatycznie ładowana kolejna strona |
| 3 | Brak kolejnych opinii | Ładowanie zatrzymane, brak błędów |
| 4 | Obiekt bez opinii | Komunikat o braku opinii |
TC-AIP-008 — Aktywności powiązane z obiektem
| # | Akcja | Oczekiwany rezultat |
| 1 | Otwórz zakładkę Aktywności | Lista aktywności przypisanych do obiektu (tylko aktywne, per_page: 20) |
| 2 | Obiekt bez aktywności | Komunikat o braku aktywności |
| 3 | Kliknij kartę aktywności | Przekierowanie na stronę szczegółów aktywności |
TC-AIP-009 — Powiązane obiekty (podobiekte)
| # | Akcja | Oczekiwany rezultat |
| 1 | Obiekt ma podobiekte (parent_id) | Zakładka „Powiązane obiekty" widoczna, lista załadowana (6 per_page) |
| 2 | Przejdź do kolejnej strony powiązanych obiektów | Paginacja działa, kolejne obiekty załadowane |
| 3 | Kliknij powiązany obiekt | Przekierowanie na jego stronę szczegółów |
TC-AIP-010 — Lokalizacja i kontakt
| # | Akcja | Oczekiwany rezultat |
| 1 | Otwórz zakładkę Lokalizacja | Wyświetlony pełny adres obiektu |
| 2 | Kliknij link do Google Maps | Otwiera Google Maps z adresem obiektu |
| 3 | Kliknij „Kopiuj adres" | Pełny adres skopiowany do schowka |
| 4 | Sprawdź dane zarządców | Widoczne dane kontaktowe (telefon, e-mail) zarządców obiektu |
TC-AIP-011 — Ulubione i udostępnianie
| # | Akcja | Oczekiwany rezultat |
| 1 | Kliknij „Dodaj do ulubionych" | Obiekt zapisany w localStorage (app_item_favorites), ikona zmienia stan |
| 2 | Odśwież stronę | Stan ulubionych zachowany |
| 3 | Kliknij ponownie (usuń z ulubionych) | Obiekt usunięty z localStorage |
| 4 | Kliknij „Udostępnij" (urządzenie wspiera Web Share API) | Otwiera systemowy dialog udostępniania |
| 5 | Kliknij „Udostępnij" (brak Web Share API) | URL skopiowany do schowka |