190 lines
4.9 KiB
JavaScript
190 lines
4.9 KiB
JavaScript
import timezoneMock from 'timezone-mock';
|
|
|
|
import {
|
|
isValidInputString,
|
|
inputStringToIsoDate,
|
|
isoDateToInputString,
|
|
} from '~/vue_shared/components/date_time_picker/date_time_picker_lib';
|
|
|
|
describe('date time picker lib', () => {
|
|
describe('isValidInputString', () => {
|
|
[
|
|
{
|
|
input: '2019-09-09T00:00:00.000Z',
|
|
output: true,
|
|
},
|
|
{
|
|
input: '2019-09-09T000:00.000Z',
|
|
output: false,
|
|
},
|
|
{
|
|
input: 'a2019-09-09T000:00.000Z',
|
|
output: false,
|
|
},
|
|
{
|
|
input: '2019-09-09T',
|
|
output: false,
|
|
},
|
|
{
|
|
input: '2019-09-09',
|
|
output: true,
|
|
},
|
|
{
|
|
input: '2019-9-9',
|
|
output: true,
|
|
},
|
|
{
|
|
input: '2019-9-',
|
|
output: true,
|
|
},
|
|
{
|
|
input: '2019--',
|
|
output: false,
|
|
},
|
|
{
|
|
input: '2019',
|
|
output: true,
|
|
},
|
|
{
|
|
input: '',
|
|
output: false,
|
|
},
|
|
{
|
|
input: null,
|
|
output: false,
|
|
},
|
|
].forEach(({ input, output }) => {
|
|
it(`isValidInputString return ${output} for ${input}`, () => {
|
|
expect(isValidInputString(input)).toBe(output);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('inputStringToIsoDate', () => {
|
|
[
|
|
'',
|
|
'null',
|
|
undefined,
|
|
'abc',
|
|
'xxxx-xx-xx',
|
|
'9999-99-19',
|
|
'2019-19-23',
|
|
'2019-09-23 x',
|
|
'2019-09-29 24:24:24',
|
|
].forEach((input) => {
|
|
it(`throws error for invalid input like ${input}`, () => {
|
|
expect(() => inputStringToIsoDate(input)).toThrow();
|
|
});
|
|
});
|
|
|
|
[
|
|
{
|
|
input: '2019-09-08 01:01:01',
|
|
output: '2019-09-08T01:01:01Z',
|
|
},
|
|
{
|
|
input: '2019-09-08 00:00:00',
|
|
output: '2019-09-08T00:00:00Z',
|
|
},
|
|
{
|
|
input: '2019-09-08 23:59:59',
|
|
output: '2019-09-08T23:59:59Z',
|
|
},
|
|
{
|
|
input: '2019-09-08',
|
|
output: '2019-09-08T00:00:00Z',
|
|
},
|
|
{
|
|
input: '2019-09-08',
|
|
output: '2019-09-08T00:00:00Z',
|
|
},
|
|
{
|
|
input: '2019-09-08 00:00:00',
|
|
output: '2019-09-08T00:00:00Z',
|
|
},
|
|
{
|
|
input: '2019-09-08 23:24:24',
|
|
output: '2019-09-08T23:24:24Z',
|
|
},
|
|
{
|
|
input: '2019-09-08 0:0:0',
|
|
output: '2019-09-08T00:00:00Z',
|
|
},
|
|
].forEach(({ input, output }) => {
|
|
it(`returns ${output} from ${input}`, () => {
|
|
expect(inputStringToIsoDate(input)).toBe(output);
|
|
});
|
|
});
|
|
|
|
describe('timezone formatting', () => {
|
|
const value = '2019-09-08 01:01:01';
|
|
const utcResult = '2019-09-08T01:01:01Z';
|
|
const localResult = '2019-09-08T08:01:01Z';
|
|
|
|
test.each`
|
|
val | locatTimezone | utc | result
|
|
${value} | ${'UTC'} | ${undefined} | ${utcResult}
|
|
${value} | ${'UTC'} | ${false} | ${utcResult}
|
|
${value} | ${'UTC'} | ${true} | ${utcResult}
|
|
${value} | ${'US/Pacific'} | ${undefined} | ${localResult}
|
|
${value} | ${'US/Pacific'} | ${false} | ${localResult}
|
|
${value} | ${'US/Pacific'} | ${true} | ${utcResult}
|
|
`(
|
|
'when timezone is $locatTimezone, formats $result for utc = $utc',
|
|
({ val, locatTimezone, utc, result }) => {
|
|
timezoneMock.register(locatTimezone);
|
|
|
|
expect(inputStringToIsoDate(val, utc)).toBe(result);
|
|
|
|
timezoneMock.unregister();
|
|
},
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('isoDateToInputString', () => {
|
|
[
|
|
{
|
|
input: '2019-09-08T01:01:01Z',
|
|
output: '2019-09-08 01:01:01',
|
|
},
|
|
{
|
|
input: '2019-09-08T01:01:01.999Z',
|
|
output: '2019-09-08 01:01:01',
|
|
},
|
|
{
|
|
input: '2019-09-08T00:00:00Z',
|
|
output: '2019-09-08 00:00:00',
|
|
},
|
|
].forEach(({ input, output }) => {
|
|
it(`returns ${output} for ${input}`, () => {
|
|
expect(isoDateToInputString(input)).toBe(output);
|
|
});
|
|
});
|
|
|
|
describe('timezone formatting', () => {
|
|
const value = '2019-09-08T08:01:01Z';
|
|
const utcResult = '2019-09-08 08:01:01';
|
|
const localResult = '2019-09-08 01:01:01';
|
|
|
|
test.each`
|
|
val | locatTimezone | utc | result
|
|
${value} | ${'UTC'} | ${undefined} | ${utcResult}
|
|
${value} | ${'UTC'} | ${false} | ${utcResult}
|
|
${value} | ${'UTC'} | ${true} | ${utcResult}
|
|
${value} | ${'US/Pacific'} | ${undefined} | ${localResult}
|
|
${value} | ${'US/Pacific'} | ${false} | ${localResult}
|
|
${value} | ${'US/Pacific'} | ${true} | ${utcResult}
|
|
`(
|
|
'when timezone is $locatTimezone, formats $result for utc = $utc',
|
|
({ val, locatTimezone, utc, result }) => {
|
|
timezoneMock.register(locatTimezone);
|
|
|
|
expect(isoDateToInputString(val, utc)).toBe(result);
|
|
|
|
timezoneMock.unregister();
|
|
},
|
|
);
|
|
});
|
|
});
|
|
});
|