create(); $user = User::factory()->create(); $policies = Policy::factory() ->count(3) ->create([ 'tenant_id' => $tenant->id, 'policy_type' => 'deviceConfiguration', 'platform' => 'windows10AndLater', 'last_synced_at' => null, ]); app()->bind(GraphClientInterface::class, fn () => new class implements GraphClientInterface { public function listPolicies(string $policyType, array $options = []): GraphResponse { return new GraphResponse(true, []); } public function getPolicy(string $policyType, string $policyId, array $options = []): GraphResponse { return new GraphResponse(true, [ 'payload' => [ 'id' => $policyId, 'displayName' => "Synced {$policyId}", 'platform' => $options['platform'] ?? null, 'example' => 'value', ], ]); } public function getOrganization(array $options = []): GraphResponse { return new GraphResponse(true, []); } public function applyPolicy(string $policyType, string $policyId, array $payload, array $options = []): GraphResponse { return new GraphResponse(true, []); } public function getServicePrincipalPermissions(array $options = []): GraphResponse { return new GraphResponse(true, []); } public function request(string $method, string $path, array $options = []): GraphResponse { return new GraphResponse(true, []); } }); Livewire::actingAs($user) ->test(PolicyResource\Pages\ListPolicies::class) ->callTableBulkAction('bulk_sync', $policies) ->assertHasNoTableBulkActionErrors(); $policies->each(function (Policy $policy) { $policy->refresh(); expect($policy->last_synced_at)->not->toBeNull(); expect($policy->display_name)->toBe("Synced {$policy->external_id}"); expect($policy->metadata)->toMatchArray([ 'example' => 'value', ]); }); expect(AuditLog::where('action', 'bulk.policy.sync.completed')->exists())->toBeTrue(); });