mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-13 11:23:50 +00:00
Feat/navigate (#81)
* feat/navigate upgrade react router * feat/navigate migrate to react router 6 * feat/navigate style modal * feat/navigate create endpoints for app settings * feat/navigate protect editor with pin * feat/navigate apply dynamic routing draft * feat/navigate upgrade relevant packages * feat/navigate restructure directory and add tests * feat/navigate test aliases validation * feat/navigate validate aliases before sending * feat/navigate create data endpoint * feat/navigate config: prettier * feat/navigate invalidate empty strings * feat/navigate create endpoints * feat/navigate parse on import * feat/navigate navigate to alias * feat/navigate user help and sample data * feat/navigate refact aliases modal * feat/navigate refact settings style * feat/navigate update sample db * feat/navigate link is relative to hostname * feat/navigate navigate to first match * feat/navigate update readme and version bump * feat/navigate config: create shared module * feat/navigate config: cheat module install * feat/navigate fix tests * feat/navigate run tests in pull request * Update ontime_cy.yml
This commit is contained in:
@@ -1,20 +0,0 @@
|
||||
import { generateId } from '../generate_id.js';
|
||||
|
||||
describe('generate a valid id', () => {
|
||||
it('generates a 5 digit id', () => {
|
||||
const id = generateId();
|
||||
expect(id.length).toBe(5);
|
||||
});
|
||||
});
|
||||
|
||||
describe('generate 100', () => {
|
||||
it('all ids are unique', () => {
|
||||
let ids = [];
|
||||
for (let i = 0; i < 100; i++) {
|
||||
ids.push(generateId());
|
||||
}
|
||||
|
||||
const unique = [...new Set(ids)];
|
||||
expect(ids.length).toBe(unique.length);
|
||||
});
|
||||
});
|
||||
@@ -1,11 +1,11 @@
|
||||
import getRandomName from '../getRandomName.js';
|
||||
|
||||
test('generates 500 unique names', () => {
|
||||
let names = [];
|
||||
for (let i = 0; i < 500; i++) {
|
||||
names.push(getRandomName());
|
||||
test('generates 100 unique names', () => {
|
||||
const names = new Set();
|
||||
let attempts = 1;
|
||||
while (names.size < 100) {
|
||||
names.add(getRandomName());
|
||||
attempts++;
|
||||
}
|
||||
|
||||
const unique = [...new Set(names)];
|
||||
expect(names.length).toBe(unique.length);
|
||||
});
|
||||
expect(attempts).toBeLessThan(105);
|
||||
});
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import jest from 'jest-mock';
|
||||
import {
|
||||
makeString,
|
||||
parseExcelv1,
|
||||
parseJsonv1,
|
||||
validateEventv1,
|
||||
parseAliases_v1,
|
||||
parseExcel_v1,
|
||||
parseJson_v1,
|
||||
validateEvent_v1,
|
||||
} from '../parser.js';
|
||||
import { dbModelv1 as dbModel } from '../../models/dataModel.js';
|
||||
|
||||
@@ -110,7 +111,7 @@ describe('test json parser with valid def', () => {
|
||||
let parseResponse;
|
||||
|
||||
beforeEach(async () => {
|
||||
parseResponse = await parseJsonv1(testData);
|
||||
parseResponse = await parseJson_v1(testData);
|
||||
});
|
||||
|
||||
it('has 7 events', () => {
|
||||
@@ -169,7 +170,7 @@ describe('test parser edge cases', () => {
|
||||
],
|
||||
};
|
||||
|
||||
const parseResponse = await parseJsonv1(testData);
|
||||
const parseResponse = await parseJson_v1(testData);
|
||||
expect(parseResponse.events[0].id).toBeDefined();
|
||||
});
|
||||
|
||||
@@ -190,7 +191,7 @@ describe('test parser edge cases', () => {
|
||||
],
|
||||
};
|
||||
|
||||
const parseResponse = await parseJsonv1(testData);
|
||||
const parseResponse = await parseJson_v1(testData);
|
||||
expect(console.log).toHaveBeenCalledWith(
|
||||
'ERROR: ID collision on import, skipping'
|
||||
);
|
||||
@@ -212,7 +213,7 @@ describe('test parser edge cases', () => {
|
||||
],
|
||||
};
|
||||
|
||||
const parseResponse = await parseJsonv1(testData);
|
||||
const parseResponse = await parseJson_v1(testData);
|
||||
expect(console.log).toHaveBeenCalledWith(
|
||||
'ERROR: undefined event type, skipping'
|
||||
);
|
||||
@@ -228,7 +229,7 @@ describe('test parser edge cases', () => {
|
||||
},
|
||||
};
|
||||
|
||||
await parseJsonv1(testData);
|
||||
await parseJson_v1(testData);
|
||||
expect(console.log).toHaveBeenCalledWith(
|
||||
'ERROR: unknown app version, skipping'
|
||||
);
|
||||
@@ -271,7 +272,7 @@ describe('test corrupt data', () => {
|
||||
},
|
||||
};
|
||||
|
||||
const parsedDef = await parseJsonv1(emptyEvents);
|
||||
const parsedDef = await parseJson_v1(emptyEvents);
|
||||
expect(parsedDef.events.length).toBe(2);
|
||||
});
|
||||
|
||||
@@ -293,7 +294,7 @@ describe('test corrupt data', () => {
|
||||
},
|
||||
};
|
||||
|
||||
const parsedDef = await parseJsonv1(emptyEvents);
|
||||
const parsedDef = await parseJson_v1(emptyEvents);
|
||||
expect(parsedDef.events.length).toBe(0);
|
||||
});
|
||||
|
||||
@@ -309,7 +310,7 @@ describe('test corrupt data', () => {
|
||||
},
|
||||
};
|
||||
|
||||
const parsedDef = await parseJsonv1(emptyEventData);
|
||||
const parsedDef = await parseJson_v1(emptyEventData);
|
||||
expect(parsedDef.event).toStrictEqual(dbModel.event);
|
||||
});
|
||||
|
||||
@@ -323,14 +324,14 @@ describe('test corrupt data', () => {
|
||||
},
|
||||
};
|
||||
|
||||
const parsedDef = await parseJsonv1(missingSettings);
|
||||
const parsedDef = await parseJson_v1(missingSettings);
|
||||
expect(parsedDef.settings).toStrictEqual(dbModel.settings);
|
||||
});
|
||||
|
||||
it('fails with invalid JSON', async () => {
|
||||
console.log = jest.fn();
|
||||
const invalidJSON = 'some random dataset';
|
||||
const parsedDef = await parseJsonv1(invalidJSON);
|
||||
const parsedDef = await parseJson_v1(invalidJSON);
|
||||
expect(console.log).toHaveBeenCalledWith('ERROR: Invalid JSON format');
|
||||
expect(parsedDef).toBe(-1);
|
||||
});
|
||||
@@ -341,7 +342,7 @@ describe('test event validator', () => {
|
||||
const event = {
|
||||
title: 'test',
|
||||
};
|
||||
const validated = validateEventv1(event);
|
||||
const validated = validateEvent_v1(event);
|
||||
|
||||
expect(validated).toEqual(
|
||||
expect.objectContaining({
|
||||
@@ -361,7 +362,7 @@ describe('test event validator', () => {
|
||||
|
||||
it('fails an empty object', () => {
|
||||
const event = {};
|
||||
const validated = validateEventv1(event);
|
||||
const validated = validateEvent_v1(event);
|
||||
expect(validated).toEqual(null);
|
||||
});
|
||||
|
||||
@@ -372,7 +373,7 @@ describe('test event validator', () => {
|
||||
presenter: 3.2,
|
||||
note: '1899-12-30T08:00:10.000Z',
|
||||
};
|
||||
const validated = validateEventv1(event);
|
||||
const validated = validateEvent_v1(event);
|
||||
expect(typeof validated.title).toEqual('string');
|
||||
expect(typeof validated.subtitle).toEqual('string');
|
||||
expect(typeof validated.presenter).toEqual('string');
|
||||
@@ -384,7 +385,7 @@ describe('test event validator', () => {
|
||||
timeStart: false,
|
||||
timeEnd: '2',
|
||||
};
|
||||
const validated = validateEventv1(event);
|
||||
const validated = validateEvent_v1(event);
|
||||
expect(typeof validated.timeStart).toEqual('number');
|
||||
expect(validated.timeStart).toEqual(0);
|
||||
expect(typeof validated.timeEnd).toEqual('number');
|
||||
@@ -395,7 +396,7 @@ describe('test event validator', () => {
|
||||
const event = {
|
||||
title: {},
|
||||
};
|
||||
const validated = validateEventv1(event);
|
||||
const validated = validateEvent_v1(event);
|
||||
expect(typeof validated.title).toEqual('string');
|
||||
});
|
||||
});
|
||||
@@ -485,10 +486,34 @@ describe('test parseExcel function', () => {
|
||||
},
|
||||
];
|
||||
|
||||
const parsedData = await parseExcelv1(testdata);
|
||||
const parsedData = await parseExcel_v1(testdata);
|
||||
|
||||
expect(parsedData.events).toBeDefined();
|
||||
expect(parsedData.events).toStrictEqual(expectedParsedEvents);
|
||||
expect(parsedData.events).toStrictEqual(expectedParsedEvents);
|
||||
});
|
||||
});
|
||||
|
||||
describe('test aliases import', () => {
|
||||
it('imports a well defined alias', () => {});
|
||||
const testData = {
|
||||
events: [],
|
||||
settings: {
|
||||
app: 'ontime',
|
||||
version: 1,
|
||||
},
|
||||
aliases: [
|
||||
{
|
||||
enabled: false,
|
||||
alias: 'testalias',
|
||||
pathAndParams: 'testpathAndParams',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const parsed = parseAliases_v1(testData, true);
|
||||
expect(parsed.length).toBe(1);
|
||||
|
||||
// generates missing id
|
||||
expect(parsed[0].id).toBeDefined();
|
||||
});
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
import { excelDateStringToMillis, stringFromMillis } from '../time.js';
|
||||
|
||||
describe('test string to milis function', () => {
|
||||
it('test with null values', () => {
|
||||
const t = { val: null, result: '...' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with valid millis', () => {
|
||||
const t = { val: 3600000, result: '01:00:00' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with negative millis', () => {
|
||||
const t = { val: -3600000, result: '-01:00:00' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with -1', () => {
|
||||
const t = { val: -1, result: '-00:00:00' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with 0', () => {
|
||||
const t = { val: 0, result: '00:00:00' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with -0', () => {
|
||||
const t = { val: -0, result: '00:00:00' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with 999', () => {
|
||||
const t = { val: 999, result: '00:00:00' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with 1000', () => {
|
||||
const t = { val: 1000, result: '00:00:01' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with 86400000 (24 hours)', () => {
|
||||
const t = { val: 86400000, result: '00:00:00' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with 86401000 (24 hours and 1 second)', () => {
|
||||
const t = { val: 86401000, result: '00:00:01' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
|
||||
it('test with -86401000 (-24 hours and 1 second)', () => {
|
||||
const t = { val: -86401000, result: '-00:00:01' };
|
||||
expect(stringFromMillis(t.val)).toBe(t.result);
|
||||
});
|
||||
});
|
||||
|
||||
describe('test excel date parser', () => {
|
||||
it('parses the given dates correctly', () => {
|
||||
const d0 = '1899-12-30T00:00:00.000Z';
|
||||
const d1 = '1899-12-30T08:00:00.000Z';
|
||||
const d2 = '1899-12-30T08:30:00.000Z';
|
||||
|
||||
const d0Millis = 0;
|
||||
const d1Millis = 28800000;
|
||||
const d2Millis = 30600000;
|
||||
|
||||
expect(excelDateStringToMillis(d0)).toBe(d0Millis);
|
||||
expect(excelDateStringToMillis(d1)).toBe(d1Millis);
|
||||
expect(excelDateStringToMillis(d2)).toBe(d2Millis);
|
||||
});
|
||||
|
||||
it('handles an invalid date string', () => {
|
||||
const s = 'hello';
|
||||
expect(excelDateStringToMillis(s)).toBe(null);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user