fakeTransferBillingApi(); $user = User::create([ 'public_id' => (string) Str::uuid(), 'name' => 'Sender', 'email' => 'sender+'.uniqid().'@example.com', ]); $this->actingAs($user)->post(route('transfer.transfers.store'), [ 'title' => 'Project files', 'recipient_email' => 'recipient@example.com', 'email_milestones' => ['created'], 'files' => [UploadedFile::fake()->create('brief.pdf', 100, 'application/pdf')], ])->assertRedirect(); Notification::assertSentOnDemand( TransferRecipientNotification::class, fn ($notification, $channels, $notifiable) => $notifiable->routes['mail'] === 'recipient@example.com', ); } public function test_recipient_day_milestone_is_sent_once(): void { Notification::fake(); $user = User::create([ 'public_id' => (string) Str::uuid(), 'name' => 'Sender', 'email' => 'sender+'.uniqid().'@example.com', ]); $transfer = Transfer::create([ 'user_id' => $user->id, 'title' => 'Reminder test', 'recipient_email' => 'recipient@example.com', 'recipient_email_milestones' => ['7'], 'recipient_milestones_sent' => [], 'retention_days' => 30, 'paid_until' => now()->addDays(7)->startOfDay(), 'status' => Transfer::STATUS_ACTIVE, 'storage_bytes' => 1024, ]); $service = app(TransferRecipientMailService::class); $this->assertSame(1, $service->processDueMilestones()); $this->assertSame(0, $service->processDueMilestones()); $transfer->refresh(); $this->assertContains('7', $transfer->recipient_milestones_sent ?? []); Notification::assertSentOnDemand(TransferRecipientNotification::class, 1); } }