decisionFor($tenant); expect($decision->lifecycle)->toBe($expectedLifecycle) ->and($decision->canViewTenantSurface)->toBeTrue() ->and($decision->canSelectAsContext)->toBe($canSelectAsContext) ->and($decision->canOperate)->toBe($canOperate) ->and($decision->canArchive)->toBe($canArchive) ->and($decision->canRestore)->toBe($canRestore) ->and($decision->canResumeOnboarding)->toBe($canResumeOnboarding) ->and($decision->canReferenceInWorkspaceMonitoring)->toBeTrue(); })->with([ 'draft' => [ fn (): Tenant => Tenant::factory()->draft()->create(), TenantLifecycle::Draft, false, false, false, false, true, ], 'onboarding' => [ fn (): Tenant => Tenant::factory()->onboarding()->create(), TenantLifecycle::Onboarding, false, false, false, false, true, ], 'active' => [ fn (): Tenant => Tenant::factory()->active()->create(), TenantLifecycle::Active, true, true, true, false, false, ], 'archived' => [ fn (): Tenant => Tenant::factory()->archived()->create(), TenantLifecycle::Archived, false, false, false, true, false, ], ]); it('returns lifecycle-safe primary management action keys', function ( \Closure $tenantFactory, ?string $expectedActionKey, ): void { $tenant = $tenantFactory(); expect(app(TenantOperabilityService::class)->primaryManagementActionKey($tenant)) ->toBe($expectedActionKey); })->with([ 'draft-primary' => [fn (): Tenant => Tenant::factory()->draft()->create(), null], 'onboarding-primary' => [fn (): Tenant => Tenant::factory()->onboarding()->create(), null], 'active-primary' => [fn (): Tenant => Tenant::factory()->active()->create(), 'archive'], 'archived-primary' => [fn (): Tenant => Tenant::factory()->archived()->create(), 'restore'], ]); it('can prefer onboarding as the primary management action for draft-like tenants', function ( \Closure $tenantFactory, ): void { $tenant = $tenantFactory(); expect(app(TenantOperabilityService::class)->primaryManagementActionKey($tenant, preferOnboarding: true)) ->toBe('resume_onboarding'); })->with([ 'draft-prefers-onboarding' => [fn (): Tenant => Tenant::factory()->draft()->create()], 'onboarding-prefers-onboarding' => [fn (): Tenant => Tenant::factory()->onboarding()->create()], ]);