Feat/table (#105)

* feat/table add react-table
* feat/table add protected table route
* feat/table upgrade dependencies
* feat/table support parsing of new properties

Co-authored-by: DeepSource Bot <bot@deepsource.io>
This commit is contained in:
Carlos Valente
2022-04-09 22:05:56 +02:00
committed by GitHub
parent 8841a02754
commit 67ddcd8c68
146 changed files with 7423 additions and 5780 deletions
+305 -36
View File
@@ -1,12 +1,8 @@
import jest from 'jest-mock';
import {
makeString,
parseAliases_v1,
parseExcel_v1,
parseJson_v1,
validateEvent_v1,
} from '../parser.js';
import { dbModelv1 as dbModel } from '../../models/dataModel.js';
import { dbModelv1, dbModelv1 as dbModel } from '../../models/dataModel.js';
import { parseExcel_v1, parseJson_v1, validateEvent_v1 } from '../parser.js';
import { makeString, validateDuration } from '../parserUtils.js';
import { parseAliases_v1, parseUserFields_v1 } from '../parserUtils_v1.js';
describe('test json parser with valid def', () => {
const testData = {
@@ -18,10 +14,23 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 31500000,
timeEnd: 32400000,
timeType: 'start-end',
duration: 32400000 - 31500000,
isPublic: false,
colour: '',
type: 'event',
revision: 0,
id: '4b31',
user0: '',
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
user6: '',
user7: '',
user8: '',
user9: '',
},
{
title: 'Good Morning',
@@ -30,10 +39,23 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 32400000,
timeEnd: 36000000,
timeType: 'start-end',
duration: 36000000 - 32400000,
isPublic: true,
colour: '',
type: 'event',
revision: 0,
id: 'f24d',
user0: '',
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
user6: '',
user7: '',
user8: '',
user9: '',
},
{
title: 'Stage 2 setup',
@@ -42,10 +64,23 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 32400000,
timeEnd: 37200000,
timeType: 'start-end',
duration: 37200000 - 32400000,
isPublic: false,
colour: '',
type: 'event',
revision: 0,
id: 'bbc5',
user0: '',
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
user6: '',
user7: '',
user8: '',
user9: '',
},
{
title: 'Working Procedures',
@@ -54,7 +89,10 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 37200000,
timeEnd: 39000000,
timeType: 'start-end',
duration: 39000000 - 37200000,
isPublic: true,
colour: '',
type: 'event',
revision: 0,
id: '5b3e',
@@ -66,10 +104,23 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 39600000,
timeEnd: 45000000,
timeType: 'start-end',
duration: 37200000 - 32400000,
isPublic: false,
colour: '',
type: 'event',
revision: 0,
id: '8e2c',
user0: '',
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
user6: '',
user7: '',
user8: '',
user9: '',
},
{
title: 'A day being carlos',
@@ -78,10 +129,23 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 46800000,
timeEnd: 50400000,
timeType: 'start-end',
duration: 37200000 - 32400000,
isPublic: true,
colour: '',
type: 'event',
revision: 0,
id: '08e9',
user0: '',
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
user6: '',
user7: '',
user8: '',
user9: '',
},
{
title: 'Hamburgers and Cheese',
@@ -90,10 +154,23 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 54000000,
timeEnd: 57600000,
timeType: 'start-end',
duration: 37200000 - 32400000,
isPublic: true,
colour: '',
type: 'event',
revision: 0,
id: 'e25a',
user0: '',
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
user6: '',
user7: '',
user8: '',
user9: '',
},
],
event: {
@@ -128,10 +205,23 @@ describe('test json parser with valid def', () => {
note: '',
timeStart: 31500000,
timeEnd: 32400000,
timeType: 'start-end',
duration: 32400000 - 31500000,
isPublic: false,
colour: '',
type: 'event',
revision: 0,
id: '4b31',
user0: '',
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
user6: '',
user7: '',
user8: '',
user9: '',
};
expect(first).toStrictEqual(expected);
});
@@ -192,9 +282,7 @@ describe('test parser edge cases', () => {
};
const parseResponse = await parseJson_v1(testData);
expect(console.log).toHaveBeenCalledWith(
'ERROR: ID collision on import, skipping'
);
expect(console.log).toHaveBeenCalledWith('ERROR: ID collision on import, skipping');
expect(parseResponse?.events.length).toBe(1);
});
@@ -214,10 +302,7 @@ describe('test parser edge cases', () => {
};
const parseResponse = await parseJson_v1(testData);
expect(console.log).toHaveBeenCalledWith(
'ERROR: undefined event type, skipping'
);
expect(console.log).toHaveBeenCalledWith('ERROR: undefined event type, skipping');
expect(parseResponse?.events.length).toBe(0);
});
@@ -230,9 +315,7 @@ describe('test parser edge cases', () => {
};
await parseJson_v1(testData);
expect(console.log).toHaveBeenCalledWith(
'ERROR: unknown app version, skipping'
);
expect(console.log).toHaveBeenCalledWith('ERROR: unknown app version, skipping');
});
});
@@ -356,6 +439,17 @@ describe('test event validator', () => {
revision: expect.any(Number),
type: expect.any(String),
id: expect.any(String),
colour: expect.any(String),
user0: expect.any(String),
user1: expect.any(String),
user2: expect.any(String),
user3: expect.any(String),
user4: expect.any(String),
user5: expect.any(String),
user6: expect.any(String),
user7: expect.any(String),
user8: expect.any(String),
user9: expect.any(String),
})
);
});
@@ -441,6 +535,17 @@ describe('test parseExcel function', () => {
'Event Subtitle',
'Is Public? (x)',
'Notes',
'User0:test0',
'User1:test1',
'User2:test2',
'User3:test3',
'User4:test4',
'User5:test5',
'User6:test6',
'user7:test7',
'user8:test8',
'user9:test9',
'Colour',
],
[
'1899-12-30T07:00:00.000Z',
@@ -450,6 +555,21 @@ describe('test parseExcel function', () => {
'Getting things started',
'x',
'Ballyhoo',
'',
'',
'',
'',
'a0',
'a1',
'a2',
'a3',
'a4',
'a5',
'a6',
'a7',
'a8',
'a9',
'red',
],
[
'1899-12-30T08:00:00.000Z',
@@ -459,6 +579,21 @@ describe('test parseExcel function', () => {
'Derailing early',
'',
'Rainbow chase',
'',
'',
'',
'',
'b0',
'',
'',
'',
'',
'b5',
'',
'',
'',
'',
'#F00',
],
[],
];
@@ -472,6 +607,17 @@ describe('test parseExcel function', () => {
subtitle: 'Getting things started',
isPublic: true,
note: 'Ballyhoo',
user0: 'a0',
user1: 'a1',
user2: 'a2',
user3: 'a3',
user4: 'a4',
user5: 'a5',
user6: 'a6',
user7: 'a7',
user8: 'a8',
user9: 'a9',
colour: 'red',
type: 'event',
},
{
@@ -482,6 +628,9 @@ describe('test parseExcel function', () => {
subtitle: 'Derailing early',
isPublic: false,
note: 'Rainbow chase',
user0: 'b0',
user5: 'b5',
colour: '#F00',
type: 'event',
},
];
@@ -499,25 +648,145 @@ describe('test parseExcel function', () => {
});
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',
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);
const parsed = parseAliases_v1(testData);
expect(parsed.length).toBe(1);
// generates missing id
expect(parsed[0].id).toBeDefined();
// generates missing id
expect(parsed[0].id).toBeDefined();
});
});
describe('test userFields import', () => {
const model = dbModelv1.userFields;
it('imports a fully defined user fields', () => {
const testUserFields = {
user0: 'test0',
user1: 'test1',
user2: 'test2',
user3: 'test3',
user4: 'test4',
user5: 'test5',
user6: 'test6',
user7: 'test7',
user8: 'test8',
user9: 'test9',
};
const testData = {
events: [],
settings: {
app: 'ontime',
version: 1,
},
userFields: testUserFields,
};
const parsed = parseUserFields_v1(testData);
expect(parsed).toStrictEqual(testUserFields);
});
it('imports a partially defined user fields', () => {
const testUserFields = {
user0: 'test0',
user1: 'test1',
user7: 'test7',
user8: 'test8',
user9: 'test9',
};
const expected = {
...model,
...testUserFields,
};
const testData = {
events: [],
settings: {
app: 'ontime',
version: 1,
},
userFields: testUserFields,
};
const parsed = parseUserFields_v1(testData);
expect(parsed).toStrictEqual(expected);
});
it('handles missing user fields', () => {
const testData = {
events: [],
settings: {
app: 'ontime',
version: 1,
},
};
const parsed = parseUserFields_v1(testData);
expect(parsed).toStrictEqual(model);
expect(parsed).toStrictEqual(model);
});
it('ignores badly defined fields', () => {
const testData = {
events: [],
settings: {
app: 'ontime',
version: 1,
},
userFields: {
notThis: 'this shouldng be accepted',
orThis: 'this neither',
},
};
const parsed = parseUserFields_v1(testData);
expect(parsed).toStrictEqual(model);
});
});
describe('test validateDuration()', () => {
describe('handles valid inputs', () => {
const valid = [
{ test: 'zero values', timeStart: 0, timeEnd: 0 },
{ test: 'end after start', timeStart: 0, timeEnd: 1 },
];
valid.forEach((t) => {
it(t.test, () => {
const d = validateDuration(t.timeStart, t.timeEnd);
expect(d).toBe(t.timeEnd - t.timeStart);
});
});
});
describe('handles edge cases', () => {
// edge cases
const testData = [
{ test: 'negative 0', timeStart: -0, timeEnd: -0, expected: 0 },
{ test: 'end before start', timeStart: 2, timeEnd: 1, expected: 0 },
];
testData.forEach((t) => {
it(t.test, () => {
const d = validateDuration(t.timeStart, t.timeEnd);
expect(d).toBe(t.expected);
});
});
});
});