'DeviceManagementApps.Read.All', 'type' => 'application', 'description' => null, 'features' => ['backup'], 'status' => 'missing', 'details' => null, ], [ 'key' => 'DeviceManagementApps.ReadWrite.All', 'type' => 'application', 'description' => null, 'features' => ['backup'], 'status' => 'granted', 'details' => null, ], [ 'key' => 'Group.Read.All', 'type' => 'delegated', 'description' => null, 'features' => ['directory-groups'], 'status' => 'missing', 'details' => null, ], [ 'key' => 'Policy.Read.All', 'type' => 'application', 'description' => null, 'features' => ['conditional-access'], 'status' => 'missing', 'details' => null, ], ]; $payload = TenantRequiredPermissionsViewModelBuilder::deriveCopyPayload($rows, 'application'); expect($payload)->toBe(implode("\n", [ 'DeviceManagementApps.Read.All', 'Policy.Read.All', ])); }); it('respects the feature filter for copy payload', function (): void { $rows = [ [ 'key' => 'A', 'type' => 'delegated', 'description' => null, 'features' => ['f1', 'f2'], 'status' => 'missing', 'details' => null, ], [ 'key' => 'B', 'type' => 'delegated', 'description' => null, 'features' => ['f2'], 'status' => 'missing', 'details' => null, ], [ 'key' => 'C', 'type' => 'delegated', 'description' => null, 'features' => ['f3'], 'status' => 'missing', 'details' => null, ], ]; $payload = TenantRequiredPermissionsViewModelBuilder::deriveCopyPayload($rows, 'delegated', ['f2']); expect($payload)->toBe(implode("\n", [ 'A', 'B', ])); }); it('ignores search terms for copy payload but respects the feature filter', function (): void { $permissionService = \Mockery::mock(\App\Services\Intune\TenantPermissionService::class); $permissionService->shouldReceive('compare') ->andReturn([ 'overall_status' => 'missing', 'permissions' => [ [ 'key' => 'Match.Me', 'type' => 'application', 'description' => 'Some description', 'features' => ['f1'], 'status' => 'missing', 'details' => null, ], ], ]); $builder = new TenantRequiredPermissionsViewModelBuilder($permissionService); $tenant = Tenant::factory()->make(['external_id' => 'tenant-copy-a', 'name' => 'Tenant']); $vm = $builder->build($tenant, [ 'features' => ['f1'], 'search' => 'does not match', ]); expect($vm['permissions'])->toBeEmpty(); expect($vm['copy']['application'])->toBe('Match.Me'); });