From 0bb09dd039afe3147bc5f55032e6815c178920ae Mon Sep 17 00:00:00 2001 From: Carlos Valente <34649812+cpvalente@users.noreply.github.com> Date: Mon, 11 Sep 2023 21:06:32 +0200 Subject: [PATCH] fix: sanitise cue import (#519) * fix: sanitise cue import --- .../server/src/utils/__tests__/parser.test.ts | 23 +++++++++++++++++++ apps/server/src/utils/parser.ts | 13 +++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/apps/server/src/utils/__tests__/parser.test.ts b/apps/server/src/utils/__tests__/parser.test.ts index 4fe3eb91d..1d1be49f9 100644 --- a/apps/server/src/utils/__tests__/parser.test.ts +++ b/apps/server/src/utils/__tests__/parser.test.ts @@ -269,6 +269,24 @@ describe('test json parser with valid def', () => { }); describe('test parser edge cases', () => { + it('stringifies necessary values', async () => { + const testData = { + rundown: [ + { + cue: 101, + type: 'event', + }, + { + cue: 101.1, + type: 'event', + }, + ], + }; + const parseResponse = await parseJson(testData); + expect(typeof (parseResponse.rundown[0] as OntimeEvent).cue).toBe('string'); + expect(typeof (parseResponse.rundown[1] as OntimeEvent).cue).toBe('string'); + }); + it('generates missing ids', async () => { const testData = { rundown: [ @@ -579,6 +597,7 @@ describe('test parseExcel function', () => { 'user8:test8', 'user9:test9', 'Colour', + 'cue', ], [ '1899-12-30T07:00:00.000Z', @@ -602,6 +621,7 @@ describe('test parseExcel function', () => { 'a8', 'a9', 'red', + 101, ], [ '1899-12-30T08:00:00.000Z', @@ -625,6 +645,7 @@ describe('test parseExcel function', () => { '', '', '#F00', + 102, ], [], ]; @@ -662,6 +683,7 @@ describe('test parseExcel function', () => { user9: 'a9', colour: 'red', type: 'event', + cue: '101', }, { //timeStart: 32400000, @@ -678,6 +700,7 @@ describe('test parseExcel function', () => { user5: 'b5', colour: '#F00', type: 'event', + cue: '102', }, ]; diff --git a/apps/server/src/utils/parser.ts b/apps/server/src/utils/parser.ts index bd054f477..55482c986 100644 --- a/apps/server/src/utils/parser.ts +++ b/apps/server/src/utils/parser.ts @@ -100,19 +100,19 @@ export const parseExcel = async (excelData) => { } else if (j === timeEndIndex) { event.timeEnd = parseExcelDate(column); } else if (j === titleIndex) { - event.title = column; + event.title = makeString(column, ''); } else if (j === cueIndex) { - event.cue = column; + event.cue = makeString(column, ''); } else if (j === presenterIndex) { - event.presenter = column; + event.presenter = makeString(column, ''); } else if (j === subtitleIndex) { - event.subtitle = column; + event.subtitle = makeString(column, ''); } else if (j === isPublicIndex) { event.isPublic = Boolean(column); } else if (j === skipIndex) { event.skip = Boolean(column); } else if (j === notesIndex) { - event.note = column; + event.note = makeString(column, ''); } else if (j === endActionIndex) { if (column === '') { event.endAction = EndAction.None; @@ -326,7 +326,6 @@ export const parseJson = async (jsonData, enforce = false): Promise, cueFallback: string) => { // ensure id is defined and unique const id = eventArgs.id || generateId(); - const cue = eventArgs.cue || cueFallback; let event = null; @@ -365,7 +364,7 @@ export const validateEvent = (eventArgs: Partial, cueFallback: stri user9: makeString(e.user9, d.user9), colour: makeString(e.colour, d.colour), id, - cue, + cue: makeString(e.cue, cueFallback), type: 'event', }; }