mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-13 19:33:46 +00:00
286 lines
8.2 KiB
TypeScript
286 lines
8.2 KiB
TypeScript
import { EndAction, OntimeEvent, SupportedEntry, TimeStrategy, TimerType } from 'ontime-types';
|
|
import { millisToString } from 'ontime-utils';
|
|
|
|
import { getA1Notation, cellRequestFromEvent } from '../sheets.utils.js';
|
|
|
|
describe('getA1Notation()', () => {
|
|
test('A1', () => {
|
|
expect(getA1Notation(0, 0)).toStrictEqual('A1');
|
|
});
|
|
test('E3', () => {
|
|
expect(getA1Notation(2, 4)).toStrictEqual('E3');
|
|
});
|
|
test('AA100', () => {
|
|
expect(getA1Notation(99, 26)).toStrictEqual('AA100');
|
|
});
|
|
test('can not be negative', () => {
|
|
expect(() => getA1Notation(-1, 1)).toThrowError('Index can not be less than 0');
|
|
});
|
|
});
|
|
|
|
describe('cellRequestFromEvent()', () => {
|
|
test('string to string', () => {
|
|
const event: OntimeEvent = {
|
|
type: SupportedEntry.Event,
|
|
flag: false,
|
|
cue: '1',
|
|
title: 'Fancy',
|
|
note: 'Blue button on the right',
|
|
timeStart: 46800000,
|
|
timeEnd: 57600000,
|
|
timeStrategy: TimeStrategy.LockEnd,
|
|
linkStart: false,
|
|
endAction: EndAction.None,
|
|
timerType: TimerType.CountDown,
|
|
countToEnd: false,
|
|
duration: 10800000,
|
|
skip: false,
|
|
colour: 'red',
|
|
delay: 0,
|
|
gap: 0,
|
|
dayOffset: 0,
|
|
parent: null,
|
|
revision: 0,
|
|
id: '1358',
|
|
timeWarning: 0,
|
|
timeDanger: 0,
|
|
triggers: [],
|
|
custom: {},
|
|
};
|
|
const metadata = {
|
|
type: { row: 1, col: 14 },
|
|
cue: { row: 1, col: 15 },
|
|
title: { row: 1, col: 16 },
|
|
note: { row: 1, col: 19 },
|
|
timeStart: { row: 1, col: 20 },
|
|
timeEnd: { row: 1, col: 21 },
|
|
endAction: { row: 1, col: 22 },
|
|
timerType: { row: 1, col: 23 },
|
|
duration: { row: 1, col: 24 },
|
|
skip: { row: 1, col: 26 },
|
|
colour: { row: 1, col: 27 },
|
|
revision: { row: 1, col: 38 },
|
|
id: { row: 1, col: 39 },
|
|
timeWarning: { row: 1, col: 40 },
|
|
timeDanger: { row: 1, col: 41 },
|
|
};
|
|
const result = cellRequestFromEvent(event, 1, 1234, metadata);
|
|
expect(result.updateCells?.rows?.at(0)?.values?.at(5)?.userEnteredValue?.stringValue).toStrictEqual(event.note);
|
|
});
|
|
|
|
test('number to timer', () => {
|
|
const event: OntimeEvent = {
|
|
type: SupportedEntry.Event,
|
|
flag: false,
|
|
cue: '1',
|
|
title: 'Fancy',
|
|
note: 'Blue button on the right',
|
|
timeStart: 46800000,
|
|
timeEnd: 57600000,
|
|
endAction: EndAction.None,
|
|
timerType: TimerType.CountDown,
|
|
countToEnd: false,
|
|
duration: 10800000,
|
|
timeStrategy: TimeStrategy.LockEnd,
|
|
linkStart: false,
|
|
skip: false,
|
|
colour: 'red',
|
|
parent: null,
|
|
revision: 0,
|
|
delay: 0,
|
|
gap: 0,
|
|
dayOffset: 0,
|
|
id: '1358',
|
|
timeWarning: 0,
|
|
timeDanger: 0,
|
|
triggers: [],
|
|
custom: {},
|
|
};
|
|
const metadata = {
|
|
type: { row: 1, col: 14 },
|
|
cue: { row: 1, col: 15 },
|
|
title: { row: 1, col: 16 },
|
|
note: { row: 1, col: 19 },
|
|
timeStart: { row: 1, col: 20 },
|
|
timeEnd: { row: 1, col: 21 },
|
|
endAction: { row: 1, col: 22 },
|
|
timerType: { row: 1, col: 23 },
|
|
duration: { row: 1, col: 24 },
|
|
skip: { row: 1, col: 26 },
|
|
colour: { row: 1, col: 27 },
|
|
revision: { row: 1, col: 38 },
|
|
id: { row: 1, col: 39 },
|
|
timeWarning: { row: 1, col: 40 },
|
|
timeDanger: { row: 1, col: 41 },
|
|
};
|
|
const result = cellRequestFromEvent(event, 1, 1234, metadata);
|
|
expect(result.updateCells?.rows?.at(0)?.values?.at(10)?.userEnteredValue?.stringValue).toStrictEqual(
|
|
millisToString(event.duration),
|
|
);
|
|
});
|
|
|
|
test('boolean to TRUE', () => {
|
|
const event: OntimeEvent = {
|
|
type: SupportedEntry.Event,
|
|
flag: false,
|
|
cue: '1',
|
|
title: 'Fancy',
|
|
note: 'Blue button on the right',
|
|
timeStart: 46800000,
|
|
timeEnd: 57600000,
|
|
endAction: EndAction.None,
|
|
timerType: TimerType.CountDown,
|
|
countToEnd: false,
|
|
duration: 10800000,
|
|
timeStrategy: TimeStrategy.LockEnd,
|
|
linkStart: false,
|
|
skip: false,
|
|
colour: 'red',
|
|
parent: null,
|
|
revision: 0,
|
|
delay: 0,
|
|
gap: 0,
|
|
dayOffset: 0,
|
|
id: '1358',
|
|
timeWarning: 0,
|
|
timeDanger: 0,
|
|
triggers: [],
|
|
custom: {},
|
|
};
|
|
const metadata = {
|
|
type: { row: 1, col: 14 },
|
|
cue: { row: 1, col: 15 },
|
|
title: { row: 1, col: 16 },
|
|
note: { row: 1, col: 19 },
|
|
timeStart: { row: 1, col: 20 },
|
|
timeEnd: { row: 1, col: 21 },
|
|
endAction: { row: 1, col: 22 },
|
|
timerType: { row: 1, col: 23 },
|
|
duration: { row: 1, col: 24 },
|
|
skip: { row: 1, col: 26 },
|
|
colour: { row: 1, col: 27 },
|
|
revision: { row: 1, col: 38 },
|
|
id: { row: 1, col: 39 },
|
|
timeWarning: { row: 1, col: 40 },
|
|
timeDanger: { row: 1, col: 41 },
|
|
};
|
|
const result = cellRequestFromEvent(event, 1, 1234, metadata);
|
|
expect(result.updateCells?.rows?.at(0)?.values?.at(12)?.userEnteredValue?.boolValue).toStrictEqual(false);
|
|
});
|
|
|
|
test('spacing in metadata', () => {
|
|
const event: OntimeEvent = {
|
|
type: SupportedEntry.Event,
|
|
flag: false,
|
|
cue: '1',
|
|
title: 'Fancy',
|
|
note: 'Blue button on the right',
|
|
timeStart: 46800000,
|
|
timeEnd: 57600000,
|
|
endAction: EndAction.None,
|
|
timerType: TimerType.CountDown,
|
|
countToEnd: false,
|
|
timeStrategy: TimeStrategy.LockEnd,
|
|
linkStart: false,
|
|
duration: 10800000,
|
|
skip: false,
|
|
colour: 'red',
|
|
delay: 0,
|
|
gap: 0,
|
|
dayOffset: 0,
|
|
parent: null,
|
|
revision: 0,
|
|
id: '1358',
|
|
timeWarning: 0,
|
|
timeDanger: 0,
|
|
triggers: [],
|
|
custom: {},
|
|
};
|
|
const metadata = {
|
|
cue: { row: 1, col: 0 },
|
|
title: { row: 1, col: 6 },
|
|
};
|
|
const result = cellRequestFromEvent(event, 1, 1234, metadata);
|
|
expect(result.updateCells?.rows?.at(0)?.values?.at(0)?.userEnteredValue?.stringValue).toStrictEqual(event.cue);
|
|
expect(result.updateCells?.rows?.at(0)?.values?.at(6)?.userEnteredValue?.stringValue).toStrictEqual(event.title);
|
|
});
|
|
|
|
test('metadata offset from zero', () => {
|
|
const event: OntimeEvent = {
|
|
type: SupportedEntry.Event,
|
|
flag: false,
|
|
cue: '1',
|
|
title: 'Fancy',
|
|
note: 'Blue button on the right',
|
|
timeStart: 46800000,
|
|
timeEnd: 57600000,
|
|
endAction: EndAction.None,
|
|
timerType: TimerType.CountDown,
|
|
countToEnd: false,
|
|
duration: 10800000,
|
|
timeStrategy: TimeStrategy.LockEnd,
|
|
linkStart: false,
|
|
skip: false,
|
|
colour: 'red',
|
|
parent: null,
|
|
revision: 0,
|
|
delay: 0,
|
|
gap: 0,
|
|
dayOffset: 0,
|
|
id: '1358',
|
|
timeWarning: 0,
|
|
timeDanger: 0,
|
|
triggers: [],
|
|
custom: {},
|
|
};
|
|
const metadata = {
|
|
cue: { row: 1, col: 5 },
|
|
title: { row: 1, col: 6 },
|
|
user0: { row: 1, col: 16 },
|
|
};
|
|
const result = cellRequestFromEvent(event, 1, 1234, metadata);
|
|
expect(result.updateCells?.rows?.at(0)?.values?.at(0)?.userEnteredValue?.stringValue).toStrictEqual(event.cue);
|
|
expect(result.updateCells?.rows?.at(0)?.values?.at(1)?.userEnteredValue?.stringValue).toStrictEqual(event.title);
|
|
});
|
|
|
|
test('sheet setup', () => {
|
|
const event: OntimeEvent = {
|
|
type: SupportedEntry.Event,
|
|
flag: false,
|
|
cue: '1',
|
|
title: 'Fancy',
|
|
note: 'Blue button on the right',
|
|
timeStart: 46800000,
|
|
timeEnd: 57600000,
|
|
endAction: EndAction.None,
|
|
timerType: TimerType.CountDown,
|
|
countToEnd: false,
|
|
duration: 10800000,
|
|
timeStrategy: TimeStrategy.LockEnd,
|
|
linkStart: false,
|
|
skip: false,
|
|
colour: 'red',
|
|
parent: null,
|
|
revision: 0,
|
|
delay: 0,
|
|
gap: 0,
|
|
dayOffset: 0,
|
|
id: '1358',
|
|
timeWarning: 0,
|
|
timeDanger: 0,
|
|
triggers: [],
|
|
custom: {},
|
|
};
|
|
const metadata = {
|
|
cue: { row: 10, col: 5 },
|
|
title: { row: 10, col: 6 },
|
|
};
|
|
const result1 = cellRequestFromEvent(event, 1, 1234, metadata);
|
|
expect(result1.updateCells?.start?.sheetId).toStrictEqual(1234);
|
|
const result2 = cellRequestFromEvent(event, 10, 1234, metadata);
|
|
expect(result2.updateCells?.start?.rowIndex).toStrictEqual(21);
|
|
expect(result2.updateCells?.start?.columnIndex).toStrictEqual(5);
|
|
expect(result2.updateCells?.fields).toStrictEqual('userEnteredValue,userEnteredFormat');
|
|
});
|
|
});
|