const test = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); require('../src/common'); const { buildDuplicateSlideName, buildDuplicateSlide } = require('../src/web/routes/signage/slides/duplicate'); const renderSlideAddPage = require('../src/web/routes/signage/slides/add'); test('buildDuplicateSlide copies slide fields for the create page', () => { const duplicate = buildDuplicateSlide({ id: 11, title: 'Morning Loop', template_id: 7, content: { hero: { type: 'text', value: 'Hello' } } }, buildDuplicateSlideName('Morning Loop')); assert.equal(duplicate.id, null); assert.equal(duplicate.title, 'Copy of Morning Loop'); assert.equal(duplicate.template_id, 7); assert.deepEqual(duplicate.content, { hero: { type: 'text', value: 'Hello' } }); }); test('slide duplicate add page renders the copied slide title', async () => { const html = await renderSlideAddPage( { id: null, title: 'Copy of Morning Loop', template_id: 7, content: { hero: { type: 'text', value: 'Hello' } } }, { templates: [], templateRegions: [], rssFeeds: [], apiSources: [], timetableGroups: [], fontLibrary: null }, 'Review the copied values and save when ready.', { permissionKeys: ['slides.create'] } ); assert.match(html, /Copy of Morning Loop/); assert.match(html, /Create slide/); assert.match(html, /Select a template to preview the slide\./); }); test('slide list template includes duplicate action', () => { const template = fs.readFileSync(path.join(__dirname, '..', 'src', 'web', 'views', 'signage', 'slides', 'list.hbs'), 'utf8'); assert.match(template, /\/slides\/\{\{id\}\}\/duplicate/); assert.match(template, />Dupe<\/a>/); });