Files
InvoiceShelf/tests/Feature/Receivables/PaymentEmailLogTest.php
T
Darko Gjorgjijoski 5ef7804e60 refactor: adopt modular domain architecture (#747)
* refactor: stabilize model identities for domain migration

* refactor: extract module platform context

* refactor: assign models to domain contexts

* refactor: extract ai platform context

* refactor: extract storage platform context

* refactor: extract mail platform context

* refactor: extract pdf platform context

* refactor: extract operations platform context

* refactor: move installation into operations platform

* refactor: extract money domain context

* refactor: extract taxation domain context

* refactor: extract catalog domain context

* refactor: extract metadata domain context

* refactor: extract reporting domain context

* refactor: extract purchases domain context

* refactor: extract receivables domain context

* refactor: extract accounts domain context

* refactor: complete reporting statement boundary

* refactor: extract contacts domain context

* refactor: extract sales domain context

* refactor: remove legacy application layers

* fix: migrate legacy bouncer role identities
2026-08-05 17:40:03 +02:00

40 lines
1.3 KiB
PHP

<?php
use App\Domains\Receivables\Mail\SendPaymentMail;
use App\Domains\Receivables\Models\Payment;
use App\Platform\Mail\Models\EmailLog;
use App\Platform\Persistence\ModelIdentityMap;
use Illuminate\Support\Facades\Artisan;
use function Pest\Laravel\getJson;
beforeEach(function () {
Artisan::call('db:seed', ['--class' => 'DatabaseSeeder', '--force' => true]);
Artisan::call('db:seed', ['--class' => 'DemoSeeder', '--force' => true]);
});
test('payment mail records a stable public link through the mail platform', function () {
$payment = Payment::factory()->create();
$mail = new SendPaymentMail([
'from' => 'billing@example.com',
'to' => 'customer@example.com',
'subject' => 'Payment receipt',
'body' => 'Thanks for your payment.',
'payment' => $payment->toArray(),
'attach' => ['data' => null],
]);
$mail->build();
$log = EmailLog::query()->sole();
expect($log->mailable_type)->toBe(ModelIdentityMap::aliasFor(Payment::class))
->and((int) $log->mailable_id)->toBe($payment->id)
->and($log->token)->not->toBeEmpty()
->and($mail->data['url'])->toBe(route('payment', ['email_log' => $log->token]));
getJson('/customer/payments/'.$log->token)
->assertOk()
->assertJsonPath('data.id', $payment->id);
});