create([ 'name' => 'Source Tenant', ]); [$user, $sourceTenant] = createUserWithTenant( tenant: $sourceTenant, role: $tenantRole, workspaceRole: $workspaceRole, ); $workspace = Workspace::query()->findOrFail((int) $sourceTenant->workspace_id); $targetTenant = Tenant::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Target Tenant', ]); $user->tenants()->syncWithoutDetaching([ (int) $targetTenant->getKey() => ['role' => $tenantRole], ]); app(CapabilityResolver::class)->clearCache(); app(WorkspaceCapabilityResolver::class)->clearCache(); return [ 'user' => $user, 'workspace' => $workspace, 'sourceTenant' => $sourceTenant, 'targetTenant' => $targetTenant, ]; } /** * @return array{0: string, 1: array} */ protected function setAdminWorkspaceContext(User $user, Workspace $workspace): array { $this->actingAs($user); Filament::setCurrentPanel('admin'); Filament::setTenant(null, true); Filament::bootCurrentPanel(); session()->put(WorkspaceContext::SESSION_KEY, (int) $workspace->getKey()); return [WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]; } /** * @param array $snapshot * @return array{policy: Policy, version: PolicyVersion, inventory: InventoryItem} */ protected function createPortfolioCompareSubject( Tenant $tenant, string $displayName, array $snapshot, string $policyType = 'deviceConfiguration', ?string $externalId = null, ): array { $policy = Policy::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'policy_type' => $policyType, 'external_id' => $externalId ?? str($displayName)->slug()->append('-')->append((string) str()->uuid())->toString(), 'display_name' => $displayName, 'platform' => 'windows', ]); $version = PolicyVersion::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'policy_id' => (int) $policy->getKey(), 'policy_type' => $policyType, 'platform' => 'windows', 'captured_at' => now(), 'snapshot' => $snapshot, 'assignments' => [], 'scope_tags' => [], ]); $inventory = InventoryItem::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'policy_type' => $policyType, 'external_id' => (string) $policy->external_id, 'display_name' => $displayName, 'last_seen_at' => now(), ]); return [ 'policy' => $policy, 'version' => $version, 'inventory' => $inventory, ]; } }