Release v2.5.6
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const Module = require('module');
|
||||
const path = require('path');
|
||||
|
||||
const originalResolveFilename = Module._resolveFilename;
|
||||
Module._resolveFilename = function (request, parent, isMain, options) {
|
||||
if (request === '#src/data/announcement-icons') {
|
||||
return path.join(__dirname, '..', 'src', 'data', 'announcement-icons.js');
|
||||
}
|
||||
if (request === '#root/package.json') {
|
||||
return path.join(__dirname, '..', 'package.json');
|
||||
}
|
||||
return originalResolveFilename.call(this, request, parent, isMain, options);
|
||||
};
|
||||
|
||||
const { buildAnnouncementFormViewModel } = require('../src/web/routes/signage/announcements/form-view-model');
|
||||
const renderAnnouncementsPage = require('../src/web/routes/signage/announcements/list');
|
||||
const renderAnnouncementEditPage = require('../src/web/routes/signage/announcements/edit');
|
||||
|
||||
test('announcement add page shows a disabled delete button placeholder', () => {
|
||||
const model = buildAnnouncementFormViewModel({ id: null, canDelete: false }, '', { permissionKeys: ['announcements.delete'] }, { announcementTypes: [], announcementColors: [], announcementIcons: [], announcementScreens: [] }, false);
|
||||
|
||||
assert.equal(model.showSaveSecondaryActions, true);
|
||||
assert.equal(model.showDeleteAction, true);
|
||||
assert.equal(model.deleteDisabled, true);
|
||||
assert.match(model.deleteTitle, /available after the announcement has been created/i);
|
||||
});
|
||||
|
||||
test('announcement edit page enables delete when the announcement is inactive', () => {
|
||||
const model = buildAnnouncementFormViewModel({ id: 12, canDelete: true, expires_at: '2026-08-04T00:00:00.000Z' }, '', { permissionKeys: ['announcements.delete'] }, { announcementTypes: [], announcementColors: [], announcementIcons: [], announcementScreens: [] }, true);
|
||||
|
||||
assert.equal(model.showDeleteAction, true);
|
||||
assert.equal(model.deleteDisabled, false);
|
||||
assert.equal(model.deleteConfirmMessage, 'Delete this announcement?');
|
||||
assert.equal(model.deleteTitle, '');
|
||||
});
|
||||
|
||||
test('announcement edit page renders delete confirmation on the delete button', () => {
|
||||
const html = renderAnnouncementEditPage({
|
||||
id: 12,
|
||||
message: 'Test message',
|
||||
short_label: 'Test announcement',
|
||||
announcement_type: 'top-banner',
|
||||
color_key: 'primary',
|
||||
icon_key: 'info-circle',
|
||||
duration_seconds: null,
|
||||
expires_at: '2026-08-03T00:00:00.000Z',
|
||||
canDelete: true,
|
||||
screen_ids: [1]
|
||||
}, {
|
||||
announcementTypes: [],
|
||||
announcementColors: [],
|
||||
announcementIcons: [],
|
||||
announcementScreens: []
|
||||
}, '', { permissionKeys: ['announcements.delete'] }, {
|
||||
announcementTypes: [],
|
||||
announcementColors: [],
|
||||
announcementIcons: [],
|
||||
announcementScreens: []
|
||||
});
|
||||
|
||||
assert.match(html, /data-delete-action-url="\/announcements\/12\/delete"/);
|
||||
assert.match(html, /data-confirm-message="Delete this announcement\?"/);
|
||||
});
|
||||
|
||||
test('announcement list disables delete for active announcements', () => {
|
||||
const html = renderAnnouncementsPage({
|
||||
announcements: [
|
||||
{
|
||||
id: 1,
|
||||
short_label: 'Active announcement',
|
||||
message: 'Now live',
|
||||
icon_key: 'info-circle',
|
||||
color_key: 'primary',
|
||||
announcement_type: 'top-banner',
|
||||
duration_seconds: null,
|
||||
expires_at: null,
|
||||
screen_target_count: 1,
|
||||
total_screen_count: 1,
|
||||
screen_targets_label: 'Main Screen'
|
||||
}
|
||||
],
|
||||
pagination: { totalItems: 1, currentPage: 1 }
|
||||
}, '', { permissionKeys: ['announcements.delete'] });
|
||||
|
||||
assert.match(html, /action="\/announcements\/1\/delete"[\s\S]*button class="btn btn-sm btn-outline-danger" type="submit" disabled title="This announcement is currently active and cannot be deleted\.">Delete<\/button>/);
|
||||
});
|
||||
|
||||
test('announcement list enables delete for inactive announcements', () => {
|
||||
const html = renderAnnouncementsPage({
|
||||
announcements: [
|
||||
{
|
||||
id: 2,
|
||||
short_label: 'Expired announcement',
|
||||
message: 'Done',
|
||||
icon_key: 'info-circle',
|
||||
color_key: 'primary',
|
||||
announcement_type: 'top-banner',
|
||||
duration_seconds: null,
|
||||
expires_at: '2026-08-03T00:00:00.000Z',
|
||||
screen_target_count: 1,
|
||||
total_screen_count: 1,
|
||||
screen_targets_label: 'Main Screen'
|
||||
}
|
||||
],
|
||||
pagination: { totalItems: 1, currentPage: 1 }
|
||||
}, '', { permissionKeys: ['announcements.delete'] });
|
||||
|
||||
assert.match(html, /action="\/announcements\/2\/delete"[\s\S]*button class="btn btn-sm btn-danger" type="submit"\s*>Delete<\/button>/);
|
||||
});
|
||||
Reference in New Issue
Block a user