const test = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const { buildUsersEditViewModel, buildUsersAddViewModel } = require('../src/web/routes/settings/users/form-view-model'); const usersFormTemplate = fs.readFileSync(require.resolve('../src/web/views/settings/users/form.hbs'), 'utf8'); test('user edit view model includes delete confirmation text', () => { const model = buildUsersEditViewModel({ id: 12, inUse: false, roleIds: [] }, 'Saved.', { id: 1 }, []); assert.equal(model.footerDeleteUrl, '/users/12/delete'); assert.equal(model.footerDeleteConfirmMessage, 'Delete this user?'); assert.equal(model.footerDeleteDisabled, false); assert.equal(model.showSaveSecondaryActions, true); assert.equal(model.formAttrs, 'data-async-save data-async-save-close-url="/users" data-async-save-new-url="/users/new"'); }); test('user add view model keeps delete disabled without a confirm message', () => { const model = buildUsersAddViewModel('Saved.', { id: 1 }, [], { name: 'New User', username: 'newuser' }, 'primary'); assert.equal(model.footerDeleteDisabled, true); assert.equal(model.footerDeleteUrl, ''); assert.equal(model.footerDeleteConfirmMessage, undefined); assert.equal(model.formAttrs, 'data-async-save data-async-save-close-url="/users" data-async-save-new-redirect="response-url" data-async-save-new-url="/users/new"'); }); test('user add view model uses success messaging for redirected saves', () => { const model = buildUsersAddViewModel('User created.', { id: 1 }, [], { name: 'New User', username: 'newuser' }); assert.equal(model.messageVariant, 'success'); }); test('user form keeps username editable in the admin section', () => { assert.ok(usersFormTemplate.includes('name="username"')); assert.ok(!usersFormTemplate.includes('{{#if isEdit}}disabled{{else}}required{{/if}}')); assert.ok(usersFormTemplate.includes('required />')); });