feat(export): nametag slide builder
This commit is contained in:
parent
a19c967594
commit
bb877d16c6
19
.sisyphus/evidence/task-10-nametag-macro.txt
Normal file
19
.sisyphus/evidence/task-10-nametag-macro.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
Task T10 evidence: configured Namenseinblender macro
|
||||
|
||||
RED:
|
||||
- `ddev exec php artisan test tests/Feature/NameTagSlideBuilderTest.php`
|
||||
- Failed with `Target class [App\Services\NameTagSlideBuilder] does not exist.` before implementation.
|
||||
|
||||
GREEN:
|
||||
- `ddev exec php artisan test tests/Feature/NameTagSlideBuilderTest.php`
|
||||
- Result: 3 passed (4 assertions).
|
||||
|
||||
Full verification:
|
||||
- `ddev exec php artisan test`
|
||||
- Result: 544 passed (2703 assertions).
|
||||
- `ddev exec ./vendor/bin/pint`
|
||||
- Result: PASS, 213 files.
|
||||
|
||||
Configured macro contract verified by test:
|
||||
- text: `Anna Müller\nModeration`
|
||||
- macro keys: `name`, `uuid`, `collectionName`, `collectionUuid`
|
||||
13
.sisyphus/evidence/task-10-no-macro.txt
Normal file
13
.sisyphus/evidence/task-10-no-macro.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Task T10 evidence: no Namenseinblender macro configured
|
||||
|
||||
Test coverage:
|
||||
- `build returns null when namenseinblender macro is not configured`
|
||||
- Verifies `NameTagSlideBuilder::build('Max Mustermann', 'Moderation')` returns `null` when `namenseinblender_macro_name` is missing.
|
||||
|
||||
Targeted verification:
|
||||
- `ddev exec php artisan test tests/Feature/NameTagSlideBuilderTest.php`
|
||||
- Result: 3 passed (4 assertions).
|
||||
|
||||
Full verification:
|
||||
- `ddev exec php artisan test`
|
||||
- Result: 544 passed (2703 assertions).
|
||||
37
app/Services/NameTagSlideBuilder.php
Normal file
37
app/Services/NameTagSlideBuilder.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\Setting;
|
||||
|
||||
class NameTagSlideBuilder
|
||||
{
|
||||
public function buildModeratorSlide(string $name): ?array
|
||||
{
|
||||
return $this->build($name, 'Moderation');
|
||||
}
|
||||
|
||||
public function buildPreacherSlide(string $name): ?array
|
||||
{
|
||||
return $this->build($name, 'Predigt');
|
||||
}
|
||||
|
||||
public function build(string $name, string $title): ?array
|
||||
{
|
||||
$macroName = Setting::get('namenseinblender_macro_name');
|
||||
|
||||
if ($macroName === null || trim($macroName) === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'text' => $name."\n".$title,
|
||||
'macro' => [
|
||||
'name' => $macroName,
|
||||
'uuid' => Setting::get('namenseinblender_macro_uuid'),
|
||||
'collectionName' => Setting::get('namenseinblender_macro_collection_name', '--MAIN--'),
|
||||
'collectionUuid' => Setting::get('namenseinblender_macro_collection_uuid'),
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
39
tests/Feature/NameTagSlideBuilderTest.php
Normal file
39
tests/Feature/NameTagSlideBuilderTest.php
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
use App\Models\Setting;
|
||||
use App\Services\NameTagSlideBuilder;
|
||||
|
||||
test('build returns null when namenseinblender macro is not configured', function () {
|
||||
expect(app(NameTagSlideBuilder::class)->build('Max Mustermann', 'Moderation'))->toBeNull();
|
||||
});
|
||||
|
||||
test('build returns text lines and macro when configured', function () {
|
||||
Setting::set('namenseinblender_macro_name', 'Namenseinblender');
|
||||
Setting::set('namenseinblender_macro_uuid', '11111111-1111-1111-1111-111111111111');
|
||||
Setting::set('namenseinblender_macro_collection_name', 'Service Macros');
|
||||
Setting::set('namenseinblender_macro_collection_uuid', '22222222-2222-2222-2222-222222222222');
|
||||
|
||||
$slide = app(NameTagSlideBuilder::class)->build('Anna Müller', 'Moderation');
|
||||
|
||||
expect($slide)->toBe([
|
||||
'text' => "Anna Müller\nModeration",
|
||||
'macro' => [
|
||||
'name' => 'Namenseinblender',
|
||||
'uuid' => '11111111-1111-1111-1111-111111111111',
|
||||
'collectionName' => 'Service Macros',
|
||||
'collectionUuid' => '22222222-2222-2222-2222-222222222222',
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
test('convenience methods use moderator and preacher titles', function () {
|
||||
Setting::set('namenseinblender_macro_name', 'Namenseinblender');
|
||||
Setting::set('namenseinblender_macro_uuid', '11111111-1111-1111-1111-111111111111');
|
||||
Setting::set('namenseinblender_macro_collection_name', 'Service Macros');
|
||||
Setting::set('namenseinblender_macro_collection_uuid', '22222222-2222-2222-2222-222222222222');
|
||||
|
||||
$builder = app(NameTagSlideBuilder::class);
|
||||
|
||||
expect($builder->buildModeratorSlide('Max Mustermann')['text'])->toBe("Max Mustermann\nModeration")
|
||||
->and($builder->buildPreacherSlide('Erika Beispiel')['text'])->toBe("Erika Beispiel\nPredigt");
|
||||
});
|
||||
Loading…
Reference in a new issue