TenantAtlas/apps/platform/tests/Unit/Entitlements/WorkspaceSubscriptionResolverTest.php
Ahmed Darrazi b7a587495f
Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 17m36s
chore: commit all local changes
2026-05-04 23:02:19 +02:00

72 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\Workspace;
use App\Models\WorkspaceSubscription;
use App\Services\Entitlements\WorkspaceCommercialLifecycleResolver;
use App\Services\Entitlements\WorkspaceSubscriptionResolver;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
it('summarizes a trial subscription as subscription-backed truth', function (): void {
$workspace = Workspace::factory()->create();
$trialEndsAt = now()->addDays(14)->startOfMinute();
WorkspaceSubscription::factory()->create([
'workspace_id' => (int) $workspace->getKey(),
'state' => 'trial',
'trial_ends_at' => $trialEndsAt,
'status_reason' => 'Trial access for onboarding.',
]);
$summary = app(WorkspaceSubscriptionResolver::class)->summary($workspace);
expect($summary)
->toMatchArray([
'workspace_id' => (int) $workspace->getKey(),
'subscription_present' => true,
'state' => 'trial',
'source' => 'workspace_subscription',
'fallback_status' => false,
'derived_lifecycle_state' => WorkspaceCommercialLifecycleResolver::STATE_TRIAL,
'needs_review' => false,
'status_reason' => 'Trial access for onboarding.',
'key_date_label' => 'Trial ends',
])
->and($summary['key_date']?->toDateTimeString())
->toBe($trialEndsAt->toDateTimeString());
});
it('marks stale cancel-at-period-end subscriptions for explicit review', function (): void {
$workspace = Workspace::factory()->create();
$periodStartsAt = now()->subDays(30)->startOfMinute();
$periodEndsAt = now()->subDay()->startOfMinute();
WorkspaceSubscription::factory()->create([
'workspace_id' => (int) $workspace->getKey(),
'state' => 'cancel_at_period_end',
'current_period_starts_at' => $periodStartsAt,
'current_period_ends_at' => $periodEndsAt,
'status_reason' => 'Cancellation takes effect at period end.',
]);
$summary = app(WorkspaceSubscriptionResolver::class)->summary($workspace);
expect($summary)
->toMatchArray([
'workspace_id' => (int) $workspace->getKey(),
'subscription_present' => true,
'state' => 'cancel_at_period_end',
'source' => 'workspace_subscription',
'fallback_status' => false,
'derived_lifecycle_state' => WorkspaceCommercialLifecycleResolver::STATE_ACTIVE_PAID,
'needs_review' => true,
'status_reason' => 'Cancellation takes effect at period end.',
'key_date_label' => 'Current period ends',
])
->and($summary['key_date']?->toDateTimeString())
->toBe($periodEndsAt->toDateTimeString());
});