R0.3: Newsletter-Sync-Binding config-aware + ehrliche Test-Sync-Meldung

Bisher wurde der NullNewsletterSyncClient unbedingt gebunden -
NEWSLETTER_SYNC_ENABLED=true mit echtem Provider haette stumm nichts
getan. Jetzt: Platzhalter-Provider -> No-Op-Client, aktivierter aber
nicht implementierter Provider -> RuntimeException (fail fast). Das
Admin-UI weist beim Test-Sync auf den Platzhalter hin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-03 07:55:35 +00:00
parent a4184af4fb
commit f9e3c64238
3 changed files with 44 additions and 1 deletions

View file

@ -0,0 +1,26 @@
<?php
use App\Contracts\NewsletterSyncClient;
use App\Services\Newsletter\NullNewsletterSyncClient;
test('newsletter sync resolves to the null client while no real provider exists', function () {
config()->set('newsletter.sync.enabled', false);
config()->set('newsletter.sync.provider', 'placeholder');
expect(app(NewsletterSyncClient::class))->toBeInstanceOf(NullNewsletterSyncClient::class);
});
test('newsletter sync resolves to the null client for the placeholder provider even when enabled', function () {
config()->set('newsletter.sync.enabled', true);
config()->set('newsletter.sync.provider', 'placeholder');
expect(app(NewsletterSyncClient::class))->toBeInstanceOf(NullNewsletterSyncClient::class);
});
test('an enabled but unimplemented sync provider fails fast instead of silently doing nothing', function () {
config()->set('newsletter.sync.enabled', true);
config()->set('newsletter.sync.provider', 'mailchimp');
expect(fn () => app(NewsletterSyncClient::class))
->toThrow(RuntimeException::class, 'mailchimp');
});