'CluPilot Cloud e.U.', 'address' => 'Dreherstraße 66/1/8', 'postcode' => '1110', 'city' => 'Wien', 'vat_id' => 'ATU00000000', ]); $customer = Customer::factory()->create(['name' => 'Muster GmbH']); $orders = collect([Order::factory()->create([ 'customer_id' => $customer->id, 'amount_cents' => 1900, 'currency' => 'EUR', 'status' => 'paid', ])]); return app(IssueInvoice::class)->forOrders($customer, $orders); } it('reiht jede Mail in die Schlange ihrer Spur ein', function () { Queue::fake(); Mail::to('kunde@example.test')->queue(new InvoiceMail(invoiceForTest(), 'Muster')); Queue::assertPushedOn(MailLane::CALM, Illuminate\Mail\SendQueuedMailable::class); }); it('reiht eine Direkt-Mail in die Direkt-Spur ein', function () { Queue::fake(); $user = User::factory()->create(); Mail::to('kunde@example.test')->queue(new ResetPasswordMail($user, 'https://example.test/reset', 60)); Queue::assertPushedOn(MailLane::DIRECT, Illuminate\Mail\SendQueuedMailable::class); }); it('folgt einer verschobenen Zuordnung', function () { Queue::fake(); MailLane::assign(InvoiceMail::class, MailLane::URGENT); Mail::to('kunde@example.test')->queue(new InvoiceMail(invoiceForTest(), 'Muster')); Queue::assertPushedOn(MailLane::URGENT, Illuminate\Mail\SendQueuedMailable::class); }); it('lässt keine Mailklasse ohne Spur', function () { $missing = collect(glob(app_path('Mail/*.php'))) ->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)) ->values() ->all(); expect($missing)->toBe([]); });