const test = require('node:test'); const assert = require('node:assert/strict'); require('../src/common'); 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['/settings/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); });