CluPilotCloud/tests/Feature/Mail/MailLaneTest.php

51 lines
2.0 KiB
PHP

<?php
use App\Mail\DunningNoticeMail;
use App\Mail\InvoiceMail;
use App\Mail\MaintenanceAnnouncementMail;
use App\Mail\ResetPasswordMail;
use App\Services\Mail\MailLane;
use App\Support\Settings;
/**
* Welche Mail in welcher Spur fährt.
*
* Die Vorgaben stehen im Code, die Änderung des Betreibers darüber. Gesperrt
* sind die Mails, auf die gerade ein Mensch wartet: ein Kennwort-Zurücksetzen,
* das zwanzig Minuten liegt, ist ein Supportfall und kein gespartes Ansehen.
*/
it('kennt die Vorgabe jeder Mailklasse', function () {
expect(MailLane::for(ResetPasswordMail::class))->toBe(MailLane::DIRECT)
->and(MailLane::for(MaintenanceAnnouncementMail::class))->toBe(MailLane::URGENT)
->and(MailLane::for(InvoiceMail::class))->toBe(MailLane::CALM)
->and(MailLane::for(DunningNoticeMail::class))->toBe(MailLane::CALM);
});
it('schickt eine unbekannte Mailklasse in die ruhige Spur', function () {
expect(MailLane::for('App\\Mail\\GibtEsNichtMail'))->toBe(MailLane::CALM);
});
it('lässt den Betreiber eine Mail verschieben', function () {
MailLane::assign(InvoiceMail::class, MailLane::URGENT);
expect(MailLane::for(InvoiceMail::class))->toBe(MailLane::URGENT);
});
it('sperrt die Mails, auf die jemand wartet', function () {
expect(MailLane::isLocked(ResetPasswordMail::class))->toBeTrue()
->and(MailLane::isLocked(InvoiceMail::class))->toBeFalse();
expect(fn () => MailLane::assign(ResetPasswordMail::class, MailLane::CALM))
->toThrow(RuntimeException::class);
expect(MailLane::for(ResetPasswordMail::class))->toBe(MailLane::DIRECT);
});
it('lässt eine gespeicherte Zuordnung eine gesperrte Klasse nicht überschreiben', function () {
// Nicht über assign(), sondern direkt in die Einstellung geschrieben — so
// sähe es aus, wenn jemand an der Prüfung vorbei schreibt.
Settings::set('mail.lanes', [ResetPasswordMail::class => MailLane::CALM]);
expect(MailLane::for(ResetPasswordMail::class))->toBe(MailLane::DIRECT);
});