102 lines
3.3 KiB
JavaScript
102 lines
3.3 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
require('../src/common');
|
|
|
|
const { buildPlaylistFormViewModel } = require('../src/web/routes/signage/playlists/form-view-model');
|
|
|
|
test('playlist rows show mute controls for RTMP slides', () => {
|
|
const model = buildPlaylistFormViewModel(
|
|
{ id: 22, name: 'Playlist 22' },
|
|
{
|
|
playlistSlides: [
|
|
{
|
|
id: 1,
|
|
playlist_id: 22,
|
|
slide_id: 101,
|
|
position: 1,
|
|
title: 'Video slide',
|
|
content_json: '{"videoRegion":{"type":"video","value":"/media/video.mp4"}}',
|
|
duration_seconds: 10,
|
|
use_video_duration: 0,
|
|
disable_audio: 1
|
|
},
|
|
{
|
|
id: 2,
|
|
playlist_id: 22,
|
|
slide_id: 102,
|
|
position: 2,
|
|
title: 'RTMP slide',
|
|
content_json: '{"rtmpRegion":{"type":"rtmp","value":"rtmp://example/live"}}',
|
|
duration_seconds: 10,
|
|
use_video_duration: 0,
|
|
disable_audio: 1
|
|
},
|
|
{
|
|
id: 3,
|
|
playlist_id: 22,
|
|
slide_id: 103,
|
|
position: 3,
|
|
title: 'Image slide',
|
|
content_json: '{"imageRegion":{"type":"image","value":"/media/image.png"}}',
|
|
duration_seconds: 10,
|
|
use_video_duration: 0,
|
|
disable_audio: 1
|
|
}
|
|
],
|
|
slides: []
|
|
},
|
|
'',
|
|
null,
|
|
{ isEdit: true }
|
|
);
|
|
|
|
assert.equal(model.playlistSlides[0].showMuteButton, true);
|
|
assert.equal(model.playlistSlides[1].showMuteButton, true);
|
|
assert.equal(model.playlistSlides[2].showMuteButton, false);
|
|
});
|
|
|
|
test('playlist rows use the longest video region duration', () => {
|
|
const model = buildPlaylistFormViewModel(
|
|
{ id: 23, name: 'Playlist 23' },
|
|
{
|
|
playlistSlides: [
|
|
{
|
|
id: 4,
|
|
playlist_id: 23,
|
|
slide_id: 104,
|
|
position: 1,
|
|
title: 'Multi-video slide',
|
|
content_json: '{"firstVideo":{"type":"video","value":"/media/first.mp4","duration_seconds":12.5},"secondVideo":{"type":"video","value":"/media/second.mp4","duration_seconds":27.75},"textRegion":{"type":"text","value":"Hello"}}',
|
|
duration_seconds: 10,
|
|
use_video_duration: 1,
|
|
disable_audio: 1
|
|
}
|
|
],
|
|
slides: []
|
|
},
|
|
'',
|
|
null,
|
|
{ isEdit: true }
|
|
);
|
|
|
|
assert.equal(model.playlistSlides[0].showVideoDurationButton, true);
|
|
assert.equal(model.playlistSlides[0].videoDurationSeconds, 27.75);
|
|
assert.equal(model.playlistSlides[0].durationSeconds, 27.75);
|
|
});
|
|
|
|
test('disabled canvas sizes are hidden for new playlists but retained for existing assignments', () => {
|
|
const canvasSizes = [
|
|
{ id: 1, name: 'Full HD', width: 1920, height: 1080, enabled: 1 },
|
|
{ id: 2, name: 'Legacy', width: 1280, height: 720, enabled: 0 }
|
|
];
|
|
const data = { playlistSlides: [], slides: [], canvasSizes: canvasSizes };
|
|
|
|
const createModel = buildPlaylistFormViewModel({}, data, '', null, {});
|
|
assert.deepEqual(createModel.canvasSizes.map((size) => size.id), [1]);
|
|
|
|
const editModel = buildPlaylistFormViewModel({ id: 12, canvas_id: 2 }, data, '', null, { isEdit: true });
|
|
assert.deepEqual(editModel.canvasSizes.map((size) => size.id), [1, 2]);
|
|
assert.match(editModel.canvasSizes[1].label, /Disabled/);
|
|
assert.equal(editModel.canvasSizes[1].selected, true);
|
|
}); |