Files
pulse-signage/test/users-duplicate-route.test.js
T
2026-08-05 19:38:16 +01:00

74 lines
2.0 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const registerUsersRoutes = require('../src/web/routes/admin/users');
test('user duplicate route pre-fills the add form', async () => {
const handlers = {};
const app = {
get(path, ...routeHandlers) {
handlers[path] = routeHandlers;
},
post() {}
};
const deps = {
pool: {
async query() {
return [[]];
}
},
common: {},
pages: {
renderUsersAddPage(message, currentUser, roles, formValues, messageVariant) {
return JSON.stringify({ message, currentUser, roles, formValues, messageVariant });
}
},
formatDashboardDate: () => '',
getAuditUserId: () => 1,
hashPassword: () => ({ hash: '', salt: '', iterations: 1 }),
validatePasswordStrength: () => '',
readArrayField: () => [],
rbacData: {
fetchRoles: async () => ([{ id: 2, name: 'Editors' }]),
fetchUsersWithRolesPage: async () => ({ users: [], totalItems: 0, currentPage: 1 }),
fetchUserWithRoles: async () => ({ id: 7, name: 'Alice', username: 'alice', roleIds: [2] }),
syncUserRoles: async () => {}
},
requirePermission() {
return function (_req, _res, next) {
next();
};
}
};
registerUsersRoutes(app, deps);
const routeHandlers = handlers['/users/:id/duplicate'];
assert.equal(Array.isArray(routeHandlers), true);
const req = {
params: { id: '7' },
currentUser: { id: 1 }
};
const res = {
send(value) {
this.body = value;
},
redirect(url) {
this.redirectedTo = url;
},
status(code) {
this.statusCode = code;
return this;
}
};
await routeHandlers[2](req, res, () => {});
const payload = JSON.parse(res.body);
assert.equal(payload.formValues.name, 'Copy of Alice');
assert.equal(Object.prototype.hasOwnProperty.call(payload.formValues, 'username'), false);
assert.equal(payload.roles.length, 1);
assert.equal(payload.roles[0].isSelected, true);
});