29 lines
1.8 KiB
Plaintext
29 lines
1.8 KiB
Plaintext
Task T7 preacher evidence
|
|
|
|
Implemented App\Services\NameTagResolver::preacherFor(Service $service).
|
|
|
|
Covered behavior:
|
|
- Non-empty services.preacher_name_override wins and is trimmed.
|
|
- Without override, services.preacher_name (CTS Predigt role) is returned.
|
|
- Without both fields, first visible non-song sermon agenda item is resolved by agenda_sermon_matching patterns via AgendaMatcherService.
|
|
- Multiple responsible entries are supported with comma-space joining; empty/missing names return null.
|
|
- No override, no CTS preacher name, and no sermon responsible returns null.
|
|
|
|
Responsible JSON findings:
|
|
- ServiceAgendaItem.responsible is cast to array.
|
|
- Existing sync test stores associative object shape: {"name":"Max Mustermann"}.
|
|
- New tests cover the expected multiple-person list shape: [{"name":"Anna Müller"},{"name":"Tom Klein"}].
|
|
- Resolver also supports string entries and firstName/lastName or first_name/last_name fallbacks.
|
|
|
|
Sermon detection used:
|
|
- Prefer configured Setting key agenda_sermon_matching, split by comma, matched with AgendaMatcherService::matchesAny().
|
|
- Only visible non-song agenda items are considered (is_before_event=false, service_song_id IS NULL).
|
|
- If no setting exists, title/type substring fallback accepts predigt or sermon.
|
|
|
|
Verification:
|
|
- RED before implementation: ddev exec php artisan test tests/Feature/NameTagResolverTest.php failed because App\Services\NameTagResolver did not exist.
|
|
- GREEN targeted: ddev exec php artisan test tests/Feature/NameTagResolverTest.php -> 7 passed.
|
|
- GREEN full suite: ddev exec php artisan test -> 532 passed (2659 assertions).
|
|
- Pint: ddev exec ./vendor/bin/pint app/Services/NameTagResolver.php tests/Feature/NameTagResolverTest.php.
|
|
- LSP diagnostics clean for app/Services/NameTagResolver.php and tests/Feature/NameTagResolverTest.php.
|