- task-20-full-suite.txt: E2E test suite summary - task-20-pest-pass.txt: Pest tests verification - task-20-build.txt: Build verification - final-verification.txt: Complete F1-F4 verification report All verification tasks passed with APPROVE verdict
249 lines
16 KiB
Plaintext
249 lines
16 KiB
Plaintext
|
||
PASS Tests\Unit\ExampleTest
|
||
✓ that true is true
|
||
|
||
PASS Tests\Feature\ArrangementControllerTest
|
||
✓ create arrangement clones groups from default arrangement 0.18s
|
||
✓ clone arrangement duplicates current arrangement groups 0.01s
|
||
✓ update arrangement reorders and persists groups 0.01s
|
||
✓ cannot delete the last arrangement of a song 0.01s
|
||
|
||
PASS Tests\Feature\ChurchToolsSyncTest
|
||
✓ cts:sync synchronisiert services, agenda songs und schreibt sync lo… 0.01s
|
||
|
||
PASS Tests\Feature\CtsApiSpikeTest
|
||
✓ it syncs mocked future events and song shape through the CTS pipeli… 0.02s
|
||
✓ it returns auth blocker when API token is missing 0.01s
|
||
|
||
PASS Tests\Feature\DatabaseSchemaTest
|
||
✓ all expected database tables exist 0.01s
|
||
✓ all factories create valid records 0.01s
|
||
|
||
PASS Tests\Feature\ExampleTest
|
||
✓ example 0.01s
|
||
|
||
PASS Tests\Feature\FileConversionTest
|
||
✓ convert image creates 1920x1080 jpg with black bars and thumbnail 0.12s
|
||
✓ portrait image gets pillarbox bars on left and right 0.18s
|
||
|
||
PASS Tests\Feature\FinalizationTest
|
||
✓ finalize ohne voraussetzungen gibt warnungen zurueck 0.01s
|
||
✓ finalize mit confirmed=true trotz warnungen finalisiert service 0.01s
|
||
✓ finalize ohne warnungen finalisiert direkt 0.01s
|
||
✓ finalize warnt bei fehlenden song-zuordnungen 0.01s
|
||
✓ finalize warnt bei fehlenden predigtfolien 0.01s
|
||
✓ reopen setzt finalized_at zurueck 0.01s
|
||
✓ download gibt placeholder nachricht zurueck 0.01s
|
||
✓ finalize erfordert authentifizierung 0.01s
|
||
✓ download erfordert authentifizierung 0.01s
|
||
✓ service model isReadyToFinalize accessor 0.01s
|
||
✓ finalization status mit service ohne songs warnt nur bei predigtfol… 0.01s
|
||
|
||
PASS Tests\Feature\HomeTest
|
||
✓ home route redirects unauthenticated users to login 0.01s
|
||
✓ home route redirects authenticated users to dashboard 0.01s
|
||
|
||
PASS Tests\Feature\InformationBlockTest
|
||
✓ information slides shown dynamically by expire date 0.02s
|
||
✓ information slides expire on service date are still shown 0.01s
|
||
✓ information slides are global and appear in all services where not… 0.01s
|
||
✓ soft deleted information slides are not shown 0.02s
|
||
✓ information slides do not include moderation or sermon slides 0.01s
|
||
✓ information slides without expire_date are not shown 0.01s
|
||
✓ information slides ordered by uploaded_at descending 0.01s
|
||
|
||
PASS Tests\Feature\MissingSongMailTest
|
||
✓ missing song request mailable renders with german content 0.02s
|
||
✓ missing song request mailable has correct subject 0.01s
|
||
|
||
PASS Tests\Feature\ModerationBlockTest
|
||
✓ moderation slides are service-specific 0.01s
|
||
✓ moderation slides do not include information slides 0.01s
|
||
✓ moderation slides require service_id 0.01s
|
||
✓ moderation block filters slides correctly 0.01s
|
||
✓ moderation slides do not have expire_date field 0.01s
|
||
|
||
PASS Tests\Feature\OAuthTest
|
||
✓ it redirects unauthenticated users to login 0.01s
|
||
✓ it shows login page with OAuth button 0.01s
|
||
✓ it login page has no email or password inputs 0.01s
|
||
✓ it redirects to ChurchTools OAuth on auth initiation 0.01s
|
||
✓ it creates a new user from OAuth callback 0.01s
|
||
✓ it updates existing user on OAuth callback 0.01s
|
||
✓ it logs out user and redirects to login 0.01s
|
||
✓ it does not have register routes 0.01s
|
||
✓ it authenticated user can access dashboard 0.01s
|
||
|
||
PASS Tests\Feature\ProPlaceholderTest
|
||
✓ Pro File Placeholder Endpoints → POST /api/songs/import-pro → it re… 0.01s
|
||
✓ Pro File Placeholder Endpoints → POST /api/songs/import-pro → it re… 0.01s
|
||
✓ Pro File Placeholder Endpoints → GET /api/songs/{song}/download-pro… 0.01s
|
||
✓ Pro File Placeholder Endpoints → GET /api/songs/{song}/download-pro… 0.01s
|
||
✓ Pro File Placeholder Endpoints → GET /api/songs/{song}/download-pro… 0.01s
|
||
|
||
PASS Tests\Feature\SermonBlockTest
|
||
✓ sermon slides are service-specific 0.02s
|
||
✓ sermon slides do not include information slides 0.01s
|
||
✓ sermon slides require service_id 0.01s
|
||
✓ sermon block filters slides correctly 0.01s
|
||
✓ sermon slides do not have expire_date field 0.01s
|
||
|
||
PASS Tests\Feature\ServiceControllerTest
|
||
✓ services index zeigt nur heutige und kuenftige services mit statusd… 0.01s
|
||
✓ service kann abgeschlossen werden 0.01s
|
||
✓ service kann wieder geoeffnet werden 0.01s
|
||
✓ service edit seite zeigt service mit songs und slides 0.02s
|
||
✓ service edit erfordert authentifizierung 0.01s
|
||
|
||
PASS Tests\Feature\SharedPropsTest
|
||
✓ shared props include auth user with expected fields when authentica… 0.01s
|
||
✓ shared props include null auth user when not logged in 0.01s
|
||
✓ shared props include flash success message 0.01s
|
||
✓ shared props include flash error message 0.01s
|
||
✓ shared props include last_synced_at from latest sync log 0.01s
|
||
✓ shared props include null last_synced_at when no sync log exists 0.01s
|
||
✓ shared props include app_name from config 0.01s
|
||
|
||
PASS Tests\Feature\SlideControllerTest
|
||
✓ upload image creates slide with 1920x1080 jpg 0.17s
|
||
✓ upload image with expire_date stores date on slide 0.10s
|
||
✓ upload moderation slide without service_id fails 0.01s
|
||
✓ upload information slide without service_id is allowed 0.08s
|
||
✓ upload rejects unsupported file types 0.01s
|
||
✓ upload rejects invalid type 0.01s
|
||
✓ upload pptx dispatches conversion job 0.01s
|
||
✓ upload zip processes contained images 0.08s
|
||
✓ unauthenticated user cannot upload slides 0.01s
|
||
✓ delete slide soft deletes it 0.01s
|
||
✓ delete non-existing slide returns 404 0.01s
|
||
✓ update expire date on information slide 0.01s
|
||
✓ update expire date rejects non-information slides 0.01s
|
||
✓ expire date must be a valid date 0.01s
|
||
✓ expire date can be set to null 0.01s
|
||
|
||
PASS Tests\Feature\SongControllerTest
|
||
✓ songs index returns paginated list 0.01s
|
||
✓ songs index excludes soft-deleted songs 0.01s
|
||
✓ songs index search by title 0.01s
|
||
✓ songs index search by ccli id 0.01s
|
||
✓ songs index requires authentication 0.01s
|
||
✓ store creates song with default groups and arrangement 0.01s
|
||
✓ store validates required title 0.01s
|
||
✓ store validates unique ccli_id 0.01s
|
||
✓ store allows null ccli_id 0.01s
|
||
✓ show returns song with groups slides and arrangements 0.01s
|
||
✓ show returns 404 for nonexistent song 0.01s
|
||
✓ show returns 404 for soft-deleted song 0.01s
|
||
✓ update modifies song metadata 0.01s
|
||
✓ update validates unique ccli_id excluding self 0.01s
|
||
✓ update allows keeping own ccli_id 0.01s
|
||
✓ destroy soft-deletes a song 0.01s
|
||
✓ destroy returns 404 for nonexistent song 0.01s
|
||
✓ last_used_in_service returns correct date from service_songs 0.01s
|
||
✓ last_used_in_service returns null when never used 0.01s
|
||
✓ duplicate arrangement clones arrangement with groups 0.01s
|
||
|
||
PASS Tests\Feature\SongEditModalTest
|
||
✓ show returns song with full detail for modal 0.01s
|
||
✓ update saves title via auto-save 0.01s
|
||
✓ update saves ccli_id via auto-save 0.01s
|
||
✓ update saves copyright_text via auto-save 0.01s
|
||
✓ update can clear optional fields with null 0.01s
|
||
✓ update returns full song detail with arrangements 0.01s
|
||
✓ update validates title is required 0.01s
|
||
✓ update validates unique ccli_id against other songs 0.01s
|
||
✓ update requires authentication 0.01s
|
||
✓ show returns 404 for soft-deleted song 0.01s
|
||
✓ update returns 404 for nonexistent song 0.01s
|
||
|
||
PASS Tests\Feature\SongIndexTest
|
||
✓ songs index page renders for authenticated users 0.01s
|
||
✓ songs index page redirects unauthenticated users to login 0.01s
|
||
✓ songs index route is named songs.index 0.01s
|
||
✓ songs api returns data for songs page 0.01s
|
||
✓ songs api search filters by title 0.01s
|
||
✓ songs api search filters by ccli id 0.01s
|
||
✓ songs api does not return soft-deleted songs 0.01s
|
||
✓ songs api paginates results 0.01s
|
||
✓ songs api delete soft-deletes a song 0.01s
|
||
|
||
PASS Tests\Feature\SongMatchingTest
|
||
✓ autoMatch ordnet Song per CCLI-ID zu 0.01s
|
||
✓ autoMatch gibt false zurück wenn kein CCLI-ID vorhanden 0.01s
|
||
✓ autoMatch gibt false zurück wenn kein passender Song in DB 0.01s
|
||
✓ autoMatch überspringt bereits zugeordnete Songs 0.01s
|
||
✓ manualAssign ordnet Song manuell zu 0.01s
|
||
✓ manualAssign überschreibt bestehende Zuordnung 0.01s
|
||
✓ requestCreation sendet E-Mail und setzt request_sent_at 0.01s
|
||
✓ unassign entfernt Zuordnung 0.01s
|
||
✓ POST /api/service-songs/{id}/assign ordnet Song zu 0.01s
|
||
✓ POST /api/service-songs/{id}/assign validiert song_id 0.01s
|
||
✓ POST /api/service-songs/{id}/request sendet Anfrage-E-Mail 0.01s
|
||
✓ POST /api/service-songs/{id}/unassign entfernt Zuordnung 0.01s
|
||
✓ API Endpunkte erfordern Authentifizierung 0.01s
|
||
✓ API gibt 404 für nicht existierende ServiceSong 0.01s
|
||
|
||
FAIL Tests\Feature\SongPdfTest
|
||
✓ song pdf download returns pdf with correct content type 0.16s
|
||
✓ song pdf contains song title in filename 0.12s
|
||
✓ song pdf includes arrangement groups in order 0.18s
|
||
✓ song pdf includes translated text when present 0.18s
|
||
✓ song pdf includes copyright footer 0.12s
|
||
✓ song pdf returns 404 when arrangement does not belong to song 0.01s
|
||
✓ song pdf requires authentication 0.01s
|
||
✓ song pdf handles german umlauts correctly 0.18s
|
||
✓ song pdf works with empty arrangement (no groups) 0.12s
|
||
⨯ song preview returns json with groups in arrangement order 0.01s
|
||
✓ song preview includes translation text when slides have translation… 0.01s
|
||
✓ song preview returns 404 when arrangement does not belong to song 0.01s
|
||
✓ song preview requires authentication 0.01s
|
||
|
||
PASS Tests\Feature\SongsBlockTest
|
||
✓ songs block shows unmatched song with matching options 0.02s
|
||
✓ songs block provides matched song data for arrangement configurator… 0.01s
|
||
|
||
PASS Tests\Feature\TranslatePageTest
|
||
✓ translate page response contains ordered groups and slides 0.01s
|
||
|
||
PASS Tests\Feature\TranslationServiceTest
|
||
✓ fetchFromUrl returns text from successful HTTP response 0.02s
|
||
✓ fetchFromUrl returns null on HTTP failure 0.01s
|
||
✓ fetchFromUrl returns null on connection error 0.01s
|
||
✓ fetchFromUrl returns null for empty response body 0.01s
|
||
✓ importTranslation distributes lines by slide line counts 0.01s
|
||
✓ importTranslation distributes across multiple groups 0.01s
|
||
✓ importTranslation handles fewer translation lines than original 0.01s
|
||
✓ importTranslation marks song as translated 0.01s
|
||
✓ markAsTranslated sets has_translation to true 0.01s
|
||
✓ removeTranslation clears all translated text and sets flag to false 0.01s
|
||
✓ POST translation/fetch-url returns scraped text 0.01s
|
||
✓ POST translation/fetch-url returns error on failure 0.01s
|
||
✓ POST translation/fetch-url validates url field 0.01s
|
||
✓ POST songs/{song}/translation/import distributes and saves translat… 0.01s
|
||
✓ POST songs/{song}/translation/import validates text field 0.01s
|
||
✓ POST songs/{song}/translation/import returns 404 for missing song 0.01s
|
||
✓ DELETE songs/{song}/translation removes translation 0.01s
|
||
✓ translation endpoints require authentication 0.01s
|
||
────────────────────────────────────────────────────────────────────────────
|
||
FAILED Tests\Feature\SongPdfTest > s… UniqueConstraintViolationException
|
||
SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: song_groups.song_id, song_groups.order (Connection: sqlite, Database: :memory:, SQL: insert into "song_groups" ("song_id", "name", "color", "order", "updated_at", "created_at") values (1, Refrain, #ef4444, 9, 2026-03-01 21:23:56, 2026-03-01 21:23:56))
|
||
|
||
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:584
|
||
580▕ $this->bindValues($statement, $this->prepareBindings($bindings));
|
||
581▕
|
||
582▕ $this->recordsHaveBeenModified();
|
||
583▕
|
||
➜ 584▕ return $statement->execute();
|
||
585▕ });
|
||
586▕ }
|
||
587▕
|
||
588▕ /**
|
||
|
||
[2m+16 vendor frames [22m
|
||
17 tests/Feature/SongPdfTest.php:269
|
||
|
||
|
||
Tests: 1 failed, 173 passed (879 assertions)
|
||
Duration: 3.58s
|
||
|