pp-planer/.sisyphus/evidence/task-3-pest-pass.txt
Thorsten Bus 83da54215e docs(evidence): add final verification evidence files
- 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
2026-03-02 00:51:00 +01:00

249 lines
16 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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▕ /**
+16 vendor frames 
17 tests/Feature/SongPdfTest.php:269
Tests: 1 failed, 173 passed (879 assertions)
Duration: 3.58s