Release 2.8.0
This commit is contained in:
@@ -4,17 +4,23 @@ const fs = require('node:fs');
|
||||
|
||||
const rbacPermissionsScript = fs.readFileSync(require.resolve('../src/web/public/js/rbac-permissions.js'), 'utf8');
|
||||
const rbacFormTemplate = fs.readFileSync(require.resolve('../src/web/views/settings/rbac/form.hbs'), 'utf8');
|
||||
const rbacRoutesSource = fs.readFileSync(require.resolve('../src/web/routes/admin/rbac.js'), 'utf8');
|
||||
const { buildPermissionSections } = require('../src/web/routes/settings/rbac/form-view-model');
|
||||
const rbacFormViewModel = fs.readFileSync(require.resolve('../src/web/routes/settings/rbac/form-view-model.js'), 'utf8');
|
||||
const rbacSource = fs.readFileSync(require.resolve('../src/rbac.js'), 'utf8');
|
||||
|
||||
test('rbac form exposes bulk permission controls', () => {
|
||||
assert.match(rbacFormTemplate, /name="permissions_present" value="1"/);
|
||||
assert.match(rbacFormTemplate, /name="user_ids_present\[\]" value="\{\{id\}\}"/);
|
||||
assert.match(rbacFormTemplate, /accordion accordion-flush/);
|
||||
assert.match(rbacFormTemplate, /card card-outline card-secondary overflow-hidden/);
|
||||
assert.match(rbacFormTemplate, /rbac-permissions-table-head/);
|
||||
assert.ok(!rbacFormTemplate.includes('table-light'));
|
||||
assert.match(rbacFormTemplate, /<h3 class="card-title">Permissions<\/h3>[\s\S]*<div class="card-body p-0">[\s\S]*accordion accordion-flush/);
|
||||
assert.match(rbacFormTemplate, /card card-outline card-secondary admin-form-card overflow-hidden[\s\S]*<h3 class="card-title">Permissions<\/h3>/);
|
||||
assert.ok(!rbacFormTemplate.includes('card card-outline card-secondary overflow-hidden'));
|
||||
assert.match(rbacFormTemplate, /accordion-item overflow-hidden" data-permission-section/);
|
||||
assert.match(rbacFormTemplate, /accordion-body p-0/);
|
||||
assert.ok(!rbacFormTemplate.includes('data-bs-parent="#role-permissions-accordion"'));
|
||||
assert.match(rbacFormTemplate, /data-bs-parent="#role-permissions-accordion"/);
|
||||
assert.match(rbacFormTemplate, /table-layout: fixed; width: 100%;/);
|
||||
assert.match(rbacFormTemplate, /<col style="width: 5\.5rem;" \/>/);
|
||||
assert.match(rbacFormTemplate, /class="text-center"/);
|
||||
@@ -37,9 +43,12 @@ test('rbac form exposes bulk permission controls', () => {
|
||||
assert.ok(rbacFormViewModel.includes("label: 'Delete'"));
|
||||
assert.ok(rbacFormViewModel.includes("label: 'Allow'"));
|
||||
assert.ok(rbacFormViewModel.includes('left.resourceOrder'));
|
||||
assert.ok(rbacRoutesSource.includes('resourceOrder: Number(permission.resourceOrder) || 999'));
|
||||
assert.ok(rbacFormViewModel.includes('section.actions = actionDefinitions.map'));
|
||||
assert.ok(rbacFormViewModel.includes('data-async-save-new-url="/rbac/new"'));
|
||||
assert.ok(rbacFormViewModel.includes('data-async-save-close-url="/rbac" data-async-save-new-url="/rbac/new"'));
|
||||
assert.ok(rbacFormViewModel.includes('data-async-save-new-url="/settings/roles/new"'));
|
||||
assert.ok(rbacFormViewModel.includes('data-async-save-close-url="/settings/roles" data-async-save-new-url="/settings/roles/new"'));
|
||||
assert.ok(rbacFormViewModel.includes('cancelConfirmMessage: "You\'ve made changes. Are you sure you want to leave this page?"'));
|
||||
assert.match(rbacFormTemplate, /cancelConfirmMessage=cancelConfirmMessage/);
|
||||
assert.ok(rbacSource.includes("sectionName: 'Main navigation'"));
|
||||
assert.ok(rbacSource.includes("permissions: ["));
|
||||
assert.ok(rbacSource.includes("resourceOrder: resource.order"));
|
||||
@@ -50,15 +59,16 @@ test('rbac permissions script supports bulk permission selection', () => {
|
||||
assert.ok(rbacPermissionsScript.includes('function toggleRowCheckboxes(row)'));
|
||||
assert.ok(rbacPermissionsScript.includes('data-permission-row-toggle'));
|
||||
assert.ok(rbacPermissionsScript.includes("toggleRowCheckboxes(findPermissionRow(targetId));"));
|
||||
assert.match(rbacPermissionsScript, /toggleRowCheckboxes\(findPermissionRow\(targetId\)\);\s*markPermissionFormDirty\(control\);/);
|
||||
assert.ok(!rbacPermissionsScript.includes('data-permission-select-none'));
|
||||
assert.ok(!rbacPermissionsScript.includes('data-permission-section-select-none'));
|
||||
});
|
||||
|
||||
test('rbac accordion sections follow source order', () => {
|
||||
test('rbac accordion sections follow configured order', () => {
|
||||
const sections = buildPermissionSections([
|
||||
{
|
||||
categoryName: 'Settings',
|
||||
sectionIndex: 3,
|
||||
sectionIndex: 0,
|
||||
sectionOrder: 40,
|
||||
resourceIndex: 1,
|
||||
resourceOrder: 20,
|
||||
@@ -67,9 +77,9 @@ test('rbac accordion sections follow source order', () => {
|
||||
},
|
||||
{
|
||||
categoryName: 'Main navigation',
|
||||
sectionIndex: 0,
|
||||
sectionIndex: 3,
|
||||
sectionOrder: 10,
|
||||
resourceIndex: 1,
|
||||
resourceIndex: 0,
|
||||
resourceOrder: 20,
|
||||
title: 'Clients',
|
||||
permissions: []
|
||||
@@ -78,7 +88,7 @@ test('rbac accordion sections follow source order', () => {
|
||||
categoryName: 'Main navigation',
|
||||
sectionIndex: 0,
|
||||
sectionOrder: 10,
|
||||
resourceIndex: 0,
|
||||
resourceIndex: 1,
|
||||
resourceOrder: 10,
|
||||
title: 'Dashboard',
|
||||
permissions: []
|
||||
@@ -97,7 +107,7 @@ test('rbac duplicate route exists', () => {
|
||||
const rbacRoutes = fs.readFileSync(require.resolve('../src/web/routes/admin/rbac.js'), 'utf8');
|
||||
const duplicateHelpers = fs.readFileSync(require.resolve('../src/web/routes/settings/rbac/duplicate.js'), 'utf8');
|
||||
|
||||
assert.match(rbacRoutes, /\/rbac\/:id\/duplicate/);
|
||||
assert.match(rbacRoutes, /\/settings\/roles\/:id\/duplicate/);
|
||||
assert.ok(rbacRoutes.includes("requirePermission('rbac.create')"));
|
||||
assert.ok(duplicateHelpers.includes('buildDuplicateRoleName'));
|
||||
assert.ok(duplicateHelpers.includes('buildDuplicateRole'));
|
||||
|
||||
Reference in New Issue
Block a user