Release 2.22.1: preserve playlist row identities
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile, web, pulse-signage-web) (push) Successful in 1m18s
Publish Docker Image / build-and-push-existing-registry (./build/Dockerfile.player, player, pulse-signage-player) (push) Successful in 34s

This commit is contained in:
lzstealth committed 2026-10-27 23:46:47 +00:00
1 parent c40bc6844a
commit 9b87ad4721
10 files changed
+337 -75

No files matched your search

+26
View File
@@ -41,6 +41,32 @@ test('new playlist rows receive preview URLs, titles and canvas dimensions', ()
assert.equal(attrs['aria-label'], 'Preview slide: Portrait');
});
test('playlist group rule JSON is escaped in the hidden form field and remains intact', () => {
const { renderView } = require('../src/web/view');
const model = buildPlaylistFormViewModel({ id: 3, name: 'Group rules' }, {
playlistSlides: [{
id: 12,
playlist_id: 3,
slide_id: 22,
position: 0,
group_id: 5,
group_key: 'events',
group_name: 'Events',
group_pick_count: 1,
groupScheduleRules: [{ id: 71, playlist_group_id: 5, position: 0, start_time: '09:00:00', end_time: '17:00:00', schedule_days_json: '[1,3]' }],
scheduleRules: []
}],
slides: [],
canvasSizes: []
}, '', null, { isEdit: true });
const html = renderView('playlists/form', model);
const hiddenRuleField = html.match(/<input[^>]+data-playlist-group-schedule-rules[^>]+>/);
assert.ok(hiddenRuleField);
assert.match(hiddenRuleField[0], /value="\[\{&quot;id&quot;:71,/);
assert.doesNotMatch(hiddenRuleField[0], /value="\[\{"id/);
});
test('playlist schedule summaries show up to two short rules on separate lines and count longer summaries', () => {
const fs = require('node:fs');
const path = require('node:path');