create([ 'moderator_name' => 'Override Mod', ]); $name = app(NameTagResolver::class)->moderatorFor($service); expect($name)->toBe('Override Mod'); }); test('moderator falls back to first visible agenda item responsibles', function () { $service = Service::factory()->create([ 'moderator_name' => null, ]); ServiceAgendaItem::factory()->create([ 'service_id' => $service->id, 'title' => 'Vorprogramm', 'is_before_event' => true, 'responsible' => [['name' => 'Ignored Person']], 'sort_order' => 1, ]); ServiceAgendaItem::factory()->create([ 'service_id' => $service->id, 'title' => 'Begrüßung', 'is_before_event' => false, 'responsible' => [ ['name' => 'Anna Müller'], ['name' => 'Tom Klein'], ], 'sort_order' => 2, ]); ServiceAgendaItem::factory()->create([ 'service_id' => $service->id, 'title' => 'Später', 'is_before_event' => false, 'responsible' => [['name' => 'Späte Person']], 'sort_order' => 3, ]); $name = app(NameTagResolver::class)->moderatorFor($service); expect($name)->toBe('Anna Müller, Tom Klein'); }); test('moderator returns null without override or visible agenda item', function () { $service = Service::factory()->create([ 'moderator_name' => null, ]); ServiceAgendaItem::factory()->create([ 'service_id' => $service->id, 'is_before_event' => true, 'responsible' => [['name' => 'Ignored Person']], 'sort_order' => 1, ]); $name = app(NameTagResolver::class)->moderatorFor($service); expect($name)->toBeNull(); }); test('preacher override wins', function () { $service = Service::factory()->create([ 'preacher_name_override' => 'Gast Sprecher', 'preacher_name' => 'Pfr. Lang', ]); $name = app(NameTagResolver::class)->preacherFor($service); expect($name)->toBe('Gast Sprecher'); }); test('preacher falls back to cts preacher name', function () { $service = Service::factory()->create([ 'preacher_name_override' => null, 'preacher_name' => 'Pfr. Lang', ]); $name = app(NameTagResolver::class)->preacherFor($service); expect($name)->toBe('Pfr. Lang'); }); test('preacher falls back to sermon agenda item responsibles', function () { Setting::set('agenda_sermon_matching', 'Predigt*,Sermon*'); $service = Service::factory()->create([ 'preacher_name_override' => null, 'preacher_name' => null, ]); ServiceAgendaItem::factory()->create([ 'service_id' => $service->id, 'title' => 'Lied vor der Predigt', 'service_song_id' => null, 'responsible' => [['name' => 'Ignored Person']], 'sort_order' => 1, ]); ServiceAgendaItem::factory()->create([ 'service_id' => $service->id, 'title' => 'Predigt', 'service_song_id' => null, 'responsible' => [['name' => 'Diakon Bauer']], 'sort_order' => 2, ]); $name = app(NameTagResolver::class)->preacherFor($service); expect($name)->toBe('Diakon Bauer'); }); test('preacher returns null without override cts name or sermon responsibles', function () { Setting::set('agenda_sermon_matching', 'Predigt*'); $service = Service::factory()->create([ 'preacher_name_override' => null, 'preacher_name' => null, ]); ServiceAgendaItem::factory()->create([ 'service_id' => $service->id, 'title' => 'Begrüßung', 'service_song_id' => null, 'responsible' => [['name' => 'Moderation']], 'sort_order' => 1, ]); $name = app(NameTagResolver::class)->preacherFor($service); expect($name)->toBeNull(); });