System-Mails im pressekonto-CI: zentrales E-Mail-Layout fuer alle Transaktionsmails
- Neues Layout components/emails/layout (Wortmarke, 'Publisher - Hub'- Tagline, Brand-Familien-Fusszeile) + Button-Komponente; alle System- Mails (Magic-Link, Go-Live-Reset, Kontakt, PM published/rejected, Kuendigung, Widerruf) darauf umgestellt - Framework-Auth-Mails (Passwort-Reset, E-Mail-Verifizierung) via toMailUsing auf eigene Views im gleichen CI statt Laravel-Default - Anmeldelink-Betreff vereinheitlicht; EmailBrandingTest sichert das Branding ueber alle Mails ab Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
1e15042152
commit
c523224da8
16 changed files with 351 additions and 168 deletions
100
tests/Feature/Mail/EmailBrandingTest.php
Normal file
100
tests/Feature/Mail/EmailBrandingTest.php
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
use App\Mail\ContactRequestSubmitted;
|
||||
use App\Mail\GoLivePasswordReset;
|
||||
use App\Mail\MagicLoginLink;
|
||||
use App\Mail\PressReleasePublished;
|
||||
use App\Mail\PressReleaseRejected;
|
||||
use App\Mail\TerminationRequestReceived;
|
||||
use App\Mail\TerminationRequestSubmitted;
|
||||
use App\Mail\WithdrawalRequestReceived;
|
||||
use App\Mail\WithdrawalRequestSubmitted;
|
||||
use App\Models\PressRelease;
|
||||
use App\Models\TerminationRequest;
|
||||
use App\Models\User;
|
||||
use App\Models\WithdrawalRequest;
|
||||
use Illuminate\Auth\Notifications\ResetPassword;
|
||||
use Illuminate\Auth\Notifications\VerifyEmail;
|
||||
|
||||
/**
|
||||
* Alle System-Mails müssen im pressekonto-CI erscheinen: Wortmarke,
|
||||
* „Publisher · Hub"-Tagline und die Zugehörigkeits-Erklärung zur
|
||||
* Brand-Familie (presseecho + businessportal24) aus dem zentralen
|
||||
* E-Mail-Layout (components/emails/layout).
|
||||
*/
|
||||
function assertHubEmailBranding(string $html): void
|
||||
{
|
||||
expect($html)
|
||||
->toContain('Publisher · Hub')
|
||||
->toContain('presseecho')
|
||||
->toContain('businessportal24')
|
||||
->toContain('ist der gemeinsame Publisher')
|
||||
->toContain('#1A2540')
|
||||
->toContain('#B07A3A');
|
||||
}
|
||||
|
||||
test('the magic login link mail uses the hub ci layout', function () {
|
||||
$user = User::factory()->make();
|
||||
|
||||
assertHubEmailBranding((new MagicLoginLink($user, 'https://pressekonto.test/magic-login/abc', '12.07.2026 10:00'))->render());
|
||||
});
|
||||
|
||||
test('the go-live password reset mail uses the hub ci layout', function () {
|
||||
$user = User::factory()->make();
|
||||
|
||||
assertHubEmailBranding((new GoLivePasswordReset($user, 'https://pressekonto.test/reset-password/abc'))->render());
|
||||
});
|
||||
|
||||
test('the press release published and rejected mails use the hub ci layout', function () {
|
||||
$pressRelease = PressRelease::factory()->published()->create();
|
||||
$user = $pressRelease->user;
|
||||
|
||||
assertHubEmailBranding((new PressReleasePublished($user, $pressRelease))->render());
|
||||
assertHubEmailBranding((new PressReleaseRejected($user, $pressRelease, 'Bitte Quellen ergänzen.'))->render());
|
||||
});
|
||||
|
||||
test('the termination mails use the hub ci layout', function () {
|
||||
$terminationRequest = TerminationRequest::factory()->create();
|
||||
|
||||
assertHubEmailBranding((new TerminationRequestReceived($terminationRequest))->render());
|
||||
assertHubEmailBranding((new TerminationRequestSubmitted($terminationRequest))->render());
|
||||
});
|
||||
|
||||
test('the withdrawal mails use the hub ci layout', function () {
|
||||
$withdrawalRequest = WithdrawalRequest::factory()->create();
|
||||
|
||||
assertHubEmailBranding((new WithdrawalRequestReceived($withdrawalRequest))->render());
|
||||
assertHubEmailBranding((new WithdrawalRequestSubmitted($withdrawalRequest))->render());
|
||||
});
|
||||
|
||||
test('the contact request mail uses the hub ci layout', function () {
|
||||
assertHubEmailBranding(
|
||||
(new ContactRequestSubmitted('Paula Presse', 'paula@example.test', 'Eine Frage zur Plattform.', 'pressekonto.test'))->render()
|
||||
);
|
||||
});
|
||||
|
||||
test('the password reset notification renders in the hub ci layout', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
$mailMessage = (new ResetPassword('test-token'))->toMail($user);
|
||||
|
||||
expect($mailMessage->subject)->toBe('Passwort zurücksetzen für Ihr pressekonto');
|
||||
|
||||
$html = (string) $mailMessage->render();
|
||||
|
||||
assertHubEmailBranding($html);
|
||||
expect($html)->toContain('/reset-password/test-token');
|
||||
});
|
||||
|
||||
test('the email verification notification renders in the hub ci layout', function () {
|
||||
$user = User::factory()->unverified()->create();
|
||||
|
||||
$mailMessage = (new VerifyEmail)->toMail($user);
|
||||
|
||||
expect($mailMessage->subject)->toBe('E-Mail-Adresse bestätigen für Ihr pressekonto');
|
||||
|
||||
$html = (string) $mailMessage->render();
|
||||
|
||||
assertHubEmailBranding($html);
|
||||
expect($html)->toContain('/verify-email/');
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue