Files
HRM-System/tests/Feature/TenantEntitlementEnforcementTest.php

52 lines
1.8 KiB
PHP

<?php
namespace Tests\Feature;
use App\Models\Inquiry;
use App\Models\TenantEntitlement;
use App\Jobs\ProvisionTenantJob;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Models\Tenant;
use Tests\TestCase;
class TenantEntitlementEnforcementTest extends TestCase
{
use RefreshDatabase;
public function test_employee_creation_is_rejected_when_max_limit_reached(): void
{
$tenantId = 'entitlement-limit-test';
$inquiry = Inquiry::create([
'company_name' => 'Limit Corp',
'contact_name' => 'Limit Admin',
'email' => 'admin@limitcorp.com',
'desired_subdomain' => $tenantId,
'employee_count' => 2, // Max 2 staff members
'requested_features' => ['payroll'],
'email_verified_at' => now(),
'status' => 'approved',
]);
(new ProvisionTenantJob($inquiry))->handle();
$tenant = Tenant::find($tenantId);
$tenant->run(function () use ($tenantId) {
// Seed 2 active employees (reaching limit of 2)
\App\Models\User::create(['name' => 'Staff 1', 'email' => 'staff1@limitcorp.com', 'type' => 'employee', 'password' => 'secret']);
\App\Models\User::create(['name' => 'Staff 2', 'email' => 'staff2@limitcorp.com', 'type' => 'employee', 'password' => 'secret']);
$middleware = new \App\Http\Middleware\EnforceEmployeeLimit();
$request = \Illuminate\Http\Request::create('/hr/employees', 'POST');
$request->headers->set('Accept', 'application/json');
$response = $middleware->handle($request, function () {
return response()->json(['success' => true]);
});
// 3rd employee attempt must be rejected with 403 Forbidden
$this->assertEquals(403, $response->getStatusCode());
});
}
}