101 lines
3.3 KiB
PHP
101 lines
3.3 KiB
PHP
<?php
|
|
|
|
use App\Models\CheckoutFunnelEvent;
|
|
use App\Services\CheckoutFunnelTracker;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
it('speichert ein checkout_visited Ereignis', function () {
|
|
CheckoutFunnelTracker::visitedCheckout(consultantUserId: 42, metadata: ['is_from' => '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);
|
|
});
|