(string) Str::uuid(), 'type' => Package::TYPE_SMS, 'status' => Package::STATUS_DRAFT, 'name' => 'Test SMS Package', 'total_items' => 1, ]); $profile = SmsProfile::factory()->create(); $item = $package->items()->create([ 'status' => 'queued', 'target_json' => ['number' => '+38640123456'], 'payload_json' => ['profile_id' => $profile->id, 'body' => 'Hello world'], ]); // Mock SmsService to return a successful log $log = new SmsLog([ 'status' => 'sent', 'provider_message_id' => 'abc123', 'cost' => 0.0100, 'currency' => 'EUR', 'meta' => ['parts' => 1], ]); $this->mock(SmsService::class) ->shouldReceive('sendFromTemplate')->zeroOrMoreTimes() ->andReturn($log); $this->mock(SmsService::class) ->shouldReceive('sendRaw')->zeroOrMoreTimes() ->andReturn($log); $job = new PackageItemSmsJob($item->id); $job->handle(app(SmsService::class)); $item->refresh(); $package->refresh(); expect($item->status)->toBe('sent'); expect($package->sent_count)->toBe(1); expect($package->failed_count)->toBe(0); });