Some checks failed
Main Confidence / confidence (push) Failing after 53s
Automated commit and PR created by Copilot per user request. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #287
111 lines
5.0 KiB
PHP
111 lines
5.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Filament\Pages\Settings\WorkspaceSettings;
|
|
use App\Models\User;
|
|
use App\Models\Workspace;
|
|
use App\Models\WorkspaceMembership;
|
|
use App\Services\Entitlements\WorkspaceEntitlementResolver;
|
|
use App\Support\Workspaces\WorkspaceContext;
|
|
use Livewire\Livewire;
|
|
|
|
/**
|
|
* @return array{0: Workspace, 1: User}
|
|
*/
|
|
function entitlementSettingsManager(): array
|
|
{
|
|
$workspace = Workspace::factory()->create();
|
|
$user = User::factory()->create();
|
|
|
|
WorkspaceMembership::factory()->create([
|
|
'workspace_id' => (int) $workspace->getKey(),
|
|
'user_id' => (int) $user->getKey(),
|
|
'role' => 'manager',
|
|
]);
|
|
|
|
session()->put(WorkspaceContext::SESSION_KEY, (int) $workspace->getKey());
|
|
|
|
return [$workspace, $user];
|
|
}
|
|
|
|
it('saves entitlement plan profile and override pairs through the workspace settings page', function (): void {
|
|
[$workspace, $user] = entitlementSettingsManager();
|
|
|
|
$this->actingAs($user)
|
|
->get(WorkspaceSettings::getUrl(panel: 'admin'))
|
|
->assertSuccessful()
|
|
->assertSee('Workspace entitlements');
|
|
|
|
$component = Livewire::actingAs($user)
|
|
->test(WorkspaceSettings::class)
|
|
->assertSet('data.entitlements_plan_profile', null)
|
|
->assertSet('data.entitlements_managed_tenant_limit_override_value', null)
|
|
->assertSet('data.entitlements_managed_tenant_limit_override_reason', null)
|
|
->assertSet('data.entitlements_review_pack_generation_override_value', null)
|
|
->assertSet('data.entitlements_review_pack_generation_override_reason', null)
|
|
->set('data.entitlements_plan_profile', 'starter')
|
|
->set('data.entitlements_managed_tenant_limit_override_value', 2)
|
|
->set('data.entitlements_managed_tenant_limit_override_reason', 'Temporary support-approved exception')
|
|
->set('data.entitlements_review_pack_generation_override_value', '0')
|
|
->set('data.entitlements_review_pack_generation_override_reason', 'Workspace is temporarily limited to manual reporting only')
|
|
->callAction('save')
|
|
->assertHasNoErrors()
|
|
->assertSet('data.entitlements_plan_profile', 'starter')
|
|
->assertSet('data.entitlements_managed_tenant_limit_override_value', 2)
|
|
->assertSet('data.entitlements_managed_tenant_limit_override_reason', 'Temporary support-approved exception')
|
|
->assertSet('data.entitlements_review_pack_generation_override_value', '0')
|
|
->assertSet('data.entitlements_review_pack_generation_override_reason', 'Workspace is temporarily limited to manual reporting only');
|
|
|
|
$summary = app(WorkspaceEntitlementResolver::class)->summary($workspace);
|
|
|
|
expect($summary['plan_profile']['id'])->toBe('starter')
|
|
->and($summary['decisions'][WorkspaceEntitlementResolver::KEY_MANAGED_TENANT_ACTIVATION_LIMIT])
|
|
->toMatchArray([
|
|
'effective_value' => 2,
|
|
'source' => 'workspace_override',
|
|
'rationale' => 'Temporary support-approved exception',
|
|
'last_changed_by' => $user->name,
|
|
])
|
|
->and($summary['decisions'][WorkspaceEntitlementResolver::KEY_REVIEW_PACK_GENERATION_ENABLED])
|
|
->toMatchArray([
|
|
'effective_value' => false,
|
|
'source' => 'workspace_override',
|
|
'rationale' => 'Workspace is temporarily limited to manual reporting only',
|
|
'last_changed_by' => $user->name,
|
|
]);
|
|
|
|
$component
|
|
->mountFormComponentAction('entitlements_managed_tenant_limit_override_value', 'reset_entitlements_managed_tenant_limit_override_value', [], 'content')
|
|
->callMountedFormComponentAction()
|
|
->assertHasNoErrors()
|
|
->assertSet('data.entitlements_managed_tenant_limit_override_value', null)
|
|
->assertSet('data.entitlements_managed_tenant_limit_override_reason', null);
|
|
|
|
$summary = app(WorkspaceEntitlementResolver::class)->summary($workspace);
|
|
|
|
expect($summary['decisions'][WorkspaceEntitlementResolver::KEY_MANAGED_TENANT_ACTIVATION_LIMIT])
|
|
->toMatchArray([
|
|
'effective_value' => 1,
|
|
'source' => 'plan_profile_default',
|
|
'rationale' => 'Minimal allowance for early workspace access and low-volume operations.',
|
|
]);
|
|
});
|
|
|
|
it('requires an override reason when a workspace entitlement override value is set', function (): void {
|
|
[, $user] = entitlementSettingsManager();
|
|
|
|
Livewire::actingAs($user)
|
|
->test(WorkspaceSettings::class)
|
|
->set('data.entitlements_managed_tenant_limit_override_value', 3)
|
|
->set('data.entitlements_managed_tenant_limit_override_reason', '')
|
|
->callAction('save')
|
|
->assertHasErrors(['data.entitlements_managed_tenant_limit_override_reason']);
|
|
|
|
Livewire::actingAs($user)
|
|
->test(WorkspaceSettings::class)
|
|
->set('data.entitlements_review_pack_generation_override_value', '0')
|
|
->set('data.entitlements_review_pack_generation_override_reason', '')
|
|
->callAction('save')
|
|
->assertHasErrors(['data.entitlements_review_pack_generation_override_reason']);
|
|
}); |