Co nowego: - Wsparcie Active Directory dla LDAP (obok LLDAP/OpenLDAP), przełącznik typu katalogu w Admin > Integracje. - Wyszukiwarka klientów dla operatora (Operator > Klienci). - Stronicowanie kolejki operatora (50/stronę) i dashboardu klienta (20/stronę). - Globalna wyszukiwarka zgłoszeń (Ctrl+K/Cmd+K) z operatorami w stylu Gmaila (od:, temat:, treść:, numer:), plus przycisk "Szukaj" w panelu bocznym. - Ostatnio przeglądane zgłoszenia w panelu bocznym operatora. - Przeprojektowany pasek nawigacji: suwak Klient/Operator/Administrator zamiast rozwijanego menu, bogatsze menu profilu (nazwa/e-mail/role), dynamiczne tytuły kart przeglądarki na każdej podstronie. - Narzędzie do jednorazowego importu historii zgłoszeń z Heska 3.x (scripts/hesk-import/). - Poprawka: paginacja pokazywała surowe klucze tłumaczeń zamiast tekstu (brakujący lang/pl/pagination.php). Zaktualizowana dokumentacja: README, CLAUDE.md, install.md, ARCHITECTURE.md, CHANGELOG.md, wiki/*. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.5 KiB
Testing
Tests live in src/tests/ and run on Pest 4 (with the Laravel
plugin), backed by PHPUnit's runner. src/phpunit.xml configures two suites,
Unit and Feature (almost everything lives in Feature/ — end-to-end Livewire
component and API tests), running against an in-memory SQLite database
(DB_CONNECTION=sqlite, DB_DATABASE=:memory:) so tests never touch the real
MariaDB instance. Mail, queue, cache, session and broadcasting are all swapped for
fast in-process fakes (array/sync) for the same reason.
Running the suite
From inside the app container (or on a bare-metal install, from src/):
docker compose exec app php artisan test
or directly with Pest:
docker compose exec app ./vendor/bin/pest
Run a single file or filter by name:
docker compose exec app php artisan test --filter=SlaBreachNotificationTest
docker compose exec app ./vendor/bin/pest tests/Feature/TicketApiTest.php
There is no CI pipeline configured for this repository — running the suite locally/in-container before merging or deploying is the only gate today.
What's covered
The Feature/ suite is organized by area and is the main source of truth for
expected behavior — read the relevant test before changing logic in that area:
- Admin: category/subcategory + custom fields, teams, users, branding, status/ priority reordering, response templates, email templates & notification toggles, SMTP/timezone/session-lifetime config.
- Operator: ticket queue (search/sort/columns, bulk actions, closed tab, team scoping), ticket detail editing, quick actions, time tracking.
- Client: new ticket submission.
- Auth/LDAP: LDAP login, LDAP-restricted guest ticket creation + local-account fallback, account-creation toggles.
- API: ability-scoped Sanctum enforcement (
ApiAbilityEnforcementTest), API key management, tickets/messages/users/dictionaries endpoints. - Cross-cutting: role middleware, SLA breach notifications, attachment limits, ticket business rules (status/priority transitions, merging, history log).
tests/Pest.php wires up Tests\TestCase (Laravel's RefreshDatabase-style base)
for the whole suite — new test files under tests/Feature/ pick this up
automatically without extra boilerplate.
Code style
laravel/pint is installed as a dev dependency (no custom pint.json, so it runs
on Laravel's default preset). Run it before committing:
docker compose exec app ./vendor/bin/pint