readProjectFile('pages/admin/tenants/index(default).phtml'); $this->assertStringNotContainsString("can('tenants.create')", $indexTemplate); $this->assertStringContainsString('$canCreateTenants', $indexTemplate); $createTemplate = $this->readProjectFile('pages/admin/tenants/create(default).phtml'); $this->assertStringNotContainsString("can('custom_fields.manage')", $createTemplate); $this->assertStringNotContainsString("can('tenants.sso_manage')", $createTemplate); $this->assertStringContainsString('$canManageCustomFields', $createTemplate); $this->assertStringContainsString('$canManageSso', $createTemplate); } public function testAdminDepartmentsListTemplateUsesServerCapabilities(): void { $content = $this->readProjectFile('pages/admin/departments/index(default).phtml'); $this->assertStringNotContainsString("can('departments.create')", $content); $this->assertStringContainsString('$canCreateDepartments', $content); } public function testAdminRoleTemplatesUseServerCapabilities(): void { $indexTemplate = $this->readProjectFile('pages/admin/roles/index(default).phtml'); $this->assertStringNotContainsString("can('roles.create')", $indexTemplate); $this->assertStringContainsString('$canCreateRoles', $indexTemplate); $editTemplate = $this->readProjectFile('pages/admin/roles/edit(default).phtml'); $this->assertStringNotContainsString("can('roles.update')", $editTemplate); $this->assertStringNotContainsString("can('roles.delete')", $editTemplate); $this->assertStringContainsString('$canUpdateRole', $editTemplate); $this->assertStringContainsString('$canDeleteRole', $editTemplate); } public function testAdminPermissionTemplatesUseServerCapabilities(): void { $indexTemplate = $this->readProjectFile('pages/admin/permissions/index(default).phtml'); $this->assertStringNotContainsString("can('permissions.create')", $indexTemplate); $this->assertStringContainsString('$canCreatePermissions', $indexTemplate); $editTemplate = $this->readProjectFile('pages/admin/permissions/edit(default).phtml'); $this->assertStringNotContainsString("can('permissions.update')", $editTemplate); $this->assertStringNotContainsString("can('permissions.delete')", $editTemplate); $this->assertStringContainsString('$canUpdatePermission', $editTemplate); $this->assertStringContainsString('$canDeletePermission', $editTemplate); } public function testAdminSettingsTemplateUsesServerCapabilities(): void { $templateContent = $this->readProjectFile('pages/admin/settings/index(default).phtml'); $this->assertStringNotContainsString("can('settings.update')", $templateContent); $this->assertStringContainsString('$canUpdateSettings', $templateContent); } public function testAdminUserEditTemplateUsesServerCapabilities(): void { $content = $this->readProjectFile('pages/admin/users/edit(default).phtml'); $this->assertStringNotContainsString("can('users.", $content); $this->assertStringNotContainsString("can('permissions.view')", $content); $this->assertStringContainsString('$canViewSecurityArtifacts', $content); } public function testHardCutTemplatesDoNotUseLegacyCanHelper(): void { $templates = [ 'templates/partials/app-main-aside.phtml', 'templates/partials/app-main-aside-icon-bar.phtml', 'pages/admin/api-audit/index(default).phtml', 'pages/admin/system-audit/index(default).phtml', 'pages/admin/import-audit/index(default).phtml', 'pages/admin/scheduled-jobs/index(default).phtml', 'pages/admin/stats/index(default).phtml', 'pages/admin/user-lifecycle-audit/index(default).phtml', 'pages/admin/user-lifecycle-audit/view(default).phtml', 'pages/admin/users/index(default).phtml', 'pages/admin/users/create(default).phtml', 'pages/admin/tenants/edit(default).phtml', 'pages/admin/departments/edit(default).phtml', ]; foreach ($templates as $template) { $content = $this->readProjectFile($template); $this->assertStringNotContainsString("can('", $content, $template); } } public function testStatsTemplateDefinesAuditTabAndPanel(): void { $content = $this->readProjectFile('pages/admin/stats/index(default).phtml'); $this->assertStringContainsString('data-tab="audit"', $content); $this->assertStringContainsString('data-tab-panel="audit"', $content); } }