From ec0e83e69b642665d626b0ff39c62f7d3f49dd64 Mon Sep 17 00:00:00 2001 From: nexxo Date: Mon, 3 Aug 2026 16:00:44 +0200 Subject: [PATCH] Waechtertest sucht rekursiv und nur echte Mailables glob('Mail/*.php') sah nur die oberste Ebene von app/Mail. Der Ordner hat mit Concerns/ und Transport/ schon zwei Unterordner - eine kuenftige Mailklasse dort waere dem Waechter nie aufgefallen, und die Mail liefe still auf MailLane::CALM statt auf eine bewusst gewaehlte Spur. File::allFiles() sucht rekursiv; is_subclass_of(..., Mailable::class) schraenkt danach auf echte Mailables ein, statt auf "liegt irgendwo unter app/Mail" - ein Trait wie RidesALane selbst oder eine kuenftige Basisklasse macht den Test damit nicht mehr faelschlich rot. Falsifizierbarkeit erneut geprueft, diesmal an OrderConfirmationMail statt an der zuvor benutzten VerifyEmailMail: Trait entfernt, Test rot mit genau dieser Klasse benannt, Trait zurueckgesetzt, Test wieder gruen. Co-Authored-By: Claude Opus 5 --- tests/Feature/Mail/MailLaneRoutingTest.php | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tests/Feature/Mail/MailLaneRoutingTest.php b/tests/Feature/Mail/MailLaneRoutingTest.php index 8f356d8..e32ff2b 100644 --- a/tests/Feature/Mail/MailLaneRoutingTest.php +++ b/tests/Feature/Mail/MailLaneRoutingTest.php @@ -1,5 +1,6 @@ map(fn (string $path) => 'App\\Mail\\'.basename($path, '.php')) - ->reject(fn (string $class) => in_array(App\Mail\Concerns\RidesALane::class, class_uses_recursive($class), true)) + $missing = collect(File::allFiles(app_path('Mail'))) + ->map(fn ($file) => 'App\\Mail\\'.str_replace( + [DIRECTORY_SEPARATOR, '.php'], ['\\', ''], $file->getRelativePathname() + )) + ->filter(fn (string $class) => is_subclass_of($class, Mailable::class)) + ->reject(fn (string $class) => in_array(RidesALane::class, class_uses_recursive($class), true)) ->values() ->all();