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