const test = require('node:test'); const assert = require('node:assert/strict'); require('../src/common'); const pages = require('../src/web/pages'); const registerViewAsRoutes = require('../src/web/routes/settings/view-as'); const renderUsersPage = require('../src/web/routes/settings/users/list'); const renderUsersEditPage = require('../src/web/routes/settings/users/edit'); const renderRssFeedEditPage = require('../src/web/routes/data-sources/rss-feeds/edit'); const renderWeatherLocationEditPage = require('../src/web/routes/data-sources/weather/edit'); const { hasAssignedPermission, hasPermission, PERMISSIONS } = require('../src/rbac'); test('preview permission is Impersonate > Allow and read-only execution stays denied', () => { const permission = PERMISSIONS.find(function (item) { return item.key === 'impersonate.allow'; }); assert.ok(permission); assert.equal(permission.resourceName, 'Impersonate'); assert.equal(permission.actionName, 'Allow'); assert.ok(!PERMISSIONS.some(function (item) { return item.key === 'users.allow' || item.key === 'users.impersonate' || item.key === 'dashboard.allow'; })); const previewUser = { isViewingAs: true, permissionKeys: ['clients.allow'] }; assert.equal(hasAssignedPermission(previewUser, 'clients.allow'), true); assert.equal(hasPermission(previewUser, 'clients.allow'), false); assert.equal(hasPermission({ permissionKeys: ['clients.allow'] }, 'clients.allow'), true); }); test('View as is on the user edit footer, not the Users table', () => { const user = { id: 19, name: 'Screen operator', username: 'operator', roleNames: 'Operators' }; const administrator = { id: 7, permissionKeys: ['users.read', 'impersonate.allow'] }; const adminPage = renderUsersPage({ users: [user] }, '', administrator); const editPage = renderUsersEditPage(user, '', administrator, [], []); const previewPage = renderUsersPage({ users: [user] }, '', Object.assign({}, administrator, { isViewingAs: true })); const previewEditPage = renderUsersEditPage(user, '', Object.assign({}, administrator, { isViewingAs: true }), [], []); assert.doesNotMatch(adminPage, /view-as/); assert.match(editPage, /form="view-as-user-form"/); assert.match(editPage, /