'shopping']); expect(CheckoutFunnelEvent::count())->toBe(1); $event = CheckoutFunnelEvent::first(); expect($event->event)->toBe('checkout_visited'); expect($event->consultant_user_id)->toBe(42); expect($event->metadata)->toMatchArray(['is_from' => 'shopping']); }); it('speichert ein form_submitted Ereignis', function () { CheckoutFunnelTracker::submittedForm( shoppingUserId: 1, shoppingOrderId: 10, consultantUserId: 5, paymentMethod: 'elv', amountCents: 4990, ); $event = CheckoutFunnelEvent::first(); expect($event->event)->toBe('form_submitted'); expect($event->shopping_user_id)->toBe(1); expect($event->shopping_order_id)->toBe(10); expect($event->payment_method)->toBe('elv'); expect($event->amount_cents)->toBe(4990); }); it('speichert ein payment_initiated Ereignis', function () { CheckoutFunnelTracker::initiatedPayment( shoppingUserId: 1, shoppingOrderId: 10, shoppingPaymentId: 20, consultantUserId: 5, paymentMethod: 'cc', amountCents: 9900, ); $event = CheckoutFunnelEvent::first(); expect($event->event)->toBe('payment_initiated'); expect($event->shopping_payment_id)->toBe(20); expect($event->amount_cents)->toBe(9900); }); it('speichert ein payment_returned Ereignis mit return_status', function () { CheckoutFunnelTracker::returnedFromPayment( shoppingPaymentId: 20, returnStatus: 'cancel', ); $event = CheckoutFunnelEvent::first(); expect($event->event)->toBe('payment_returned'); expect($event->return_status)->toBe('cancel'); expect($event->shopping_payment_id)->toBe(20); }); it('speichert ein payment_confirmed Ereignis', function () { CheckoutFunnelTracker::confirmedPayment( shoppingPaymentId: 20, txaction: 'paid', ); $event = CheckoutFunnelEvent::first(); expect($event->event)->toBe('payment_confirmed'); expect($event->metadata)->toMatchArray(['txaction' => 'paid']); }); it('schluckt Exceptions und loggt nur eine Warnung', function () { // Ungültiges event-Enum — soll keinen Fehler werfen expect(fn () => CheckoutFunnelTracker::visitedCheckout())->not->toThrow(\Throwable::class); }); it('Funnel-View gibt korrekten View zurück', function () { $admin = \App\User::forceCreate([ 'email' => 'admin-funnel-'.uniqid().'@test.com', 'password' => \Illuminate\Support\Facades\Hash::make('secret'), 'admin' => 2, 'lang' => 'de', ]); $this->actingAs($admin); CheckoutFunnelTracker::visitedCheckout(); CheckoutFunnelTracker::submittedForm(1, 1, null, 'elv', 3990); $controller = new \App\Http\Controllers\Admin\PaymentDashboardController; $response = $controller->funnel(); expect($response->getName())->toBe('admin.payment-dashboard.funnel'); $data = $response->getData(); expect($data)->toHaveKey('funnelSteps'); expect($data['funnelSteps'][0]['count'])->toBe(1); expect($data['funnelSteps'][1]['count'])->toBe(1); });