@cainiaofe/cn-ui-m
Version:
309 lines (308 loc) • 12.6 kB
JavaScript
import { convertDateToStringArray, convertQuarterArrayToDate, convertQuarterDateToStringArray, convertStringArrayToDate, generateDatePickerColumns, } from '../date-picker-date-utils';
describe('generateDatePickerColumns', function () {
var renderLabel = jest.fn(function (type, data) { return "".concat(type, "-").concat(data); });
test('returns an array of columns for year precision', function () {
var selected = ['2022'];
var min = new Date('2020-01-01');
var max = new Date('2024-12-31');
var precision = 'year';
var filter = undefined;
var columns = generateDatePickerColumns(selected, min, max, precision, renderLabel, filter);
expect(columns).toEqual([
[
{ label: 'year-2020', value: '2020' },
{ label: 'year-2021', value: '2021' },
{ label: 'year-2022', value: '2022' },
{ label: 'year-2023', value: '2023' },
{ label: 'year-2024', value: '2024' },
],
]);
});
test('returns an array of columns for month precision', function () {
var selected = ['2022', '06'];
var min = new Date('2022-01-01');
var max = new Date('2022-12-31');
var precision = 'month';
var filter = undefined;
var columns = generateDatePickerColumns(selected, min, max, precision, renderLabel, filter);
expect(columns).toEqual([
[{ label: 'year-2022', value: '2022' }],
[
{ label: 'month-1', value: '1' },
{ label: 'month-2', value: '2' },
{ label: 'month-3', value: '3' },
{ label: 'month-4', value: '4' },
{ label: 'month-5', value: '5' },
{ label: 'month-6', value: '6' },
{ label: 'month-7', value: '7' },
{ label: 'month-8', value: '8' },
{ label: 'month-9', value: '9' },
{ label: 'month-10', value: '10' },
{ label: 'month-11', value: '11' },
{ label: 'month-12', value: '12' },
],
]);
});
test('returns an array of columns for day precision', function () {
var selected = ['2022', '06', '15'];
var min = new Date('2022-06-01');
var max = new Date('2022-06-30');
var precision = 'day';
var filter = undefined;
var columns = generateDatePickerColumns(selected, min, max, precision, renderLabel, filter);
expect(columns).toEqual([
[{ label: 'year-2022', value: '2022' }],
[{ label: 'month-6', value: '6' }],
[
{ label: 'day-1', value: '1' },
{ label: 'day-2', value: '2' },
{ label: 'day-3', value: '3' },
{ label: 'day-4', value: '4' },
{ label: 'day-5', value: '5' },
{ label: 'day-6', value: '6' },
{ label: 'day-7', value: '7' },
{ label: 'day-8', value: '8' },
{ label: 'day-9', value: '9' },
{ label: 'day-10', value: '10' },
{ label: 'day-11', value: '11' },
{ label: 'day-12', value: '12' },
{ label: 'day-13', value: '13' },
{ label: 'day-14', value: '14' },
{ label: 'day-15', value: '15' },
{ label: 'day-16', value: '16' },
{ label: 'day-17', value: '17' },
{ label: 'day-18', value: '18' },
{ label: 'day-19', value: '19' },
{ label: 'day-20', value: '20' },
{ label: 'day-21', value: '21' },
{ label: 'day-22', value: '22' },
{ label: 'day-23', value: '23' },
{ label: 'day-24', value: '24' },
{ label: 'day-25', value: '25' },
{ label: 'day-26', value: '26' },
{ label: 'day-27', value: '27' },
{ label: 'day-28', value: '28' },
{ label: 'day-29', value: '29' },
{ label: 'day-30', value: '30' },
],
]);
});
test('returns an array of columns for hour precision', function () {
var selected = ['2022', '06', '15', '12'];
var min = new Date('2022-06-15 09:00:00');
var max = new Date('2022-06-15 18:00:00');
var precision = 'hour';
var filter = undefined;
var columns = generateDatePickerColumns(selected, min, max, precision, renderLabel, filter);
expect(columns).toEqual([
[{ label: 'year-2022', value: '2022' }],
[{ label: 'month-6', value: '6' }],
[{ label: 'day-15', value: '15' }],
[
{ label: 'hour-9', value: '9' },
{ label: 'hour-10', value: '10' },
{ label: 'hour-11', value: '11' },
{ label: 'hour-12', value: '12' },
{ label: 'hour-13', value: '13' },
{ label: 'hour-14', value: '14' },
{ label: 'hour-15', value: '15' },
{ label: 'hour-16', value: '16' },
{ label: 'hour-17', value: '17' },
{ label: 'hour-18', value: '18' },
],
]);
});
test('returns an array of columns for minute precision', function () {
var selected = ['2022', '06', '15', '12', '30'];
var min = new Date('2022-06-15 12:00:00');
var max = new Date('2022-06-15 12:59:00');
var precision = 'minute';
var filter = undefined;
var columns = generateDatePickerColumns(selected, min, max, precision, renderLabel, filter);
var minuteColumns = new Array(60).fill(0).map(function (_, index) { return ({
label: "minute-".concat(index),
value: "".concat(index),
}); });
expect(columns).toEqual([
[{ label: 'year-2022', value: '2022' }],
[{ label: 'month-6', value: '6' }],
[{ label: 'day-15', value: '15' }],
[{ label: 'hour-12', value: '12' }],
minuteColumns,
]);
});
test('returns an array of columns for second precision', function () {
var selected = ['2022', '06', '15', '12', '30', '45'];
var min = new Date('2022-06-15 12:30:40');
var max = new Date('2022-06-15 12:30:50');
var precision = 'second';
var filter = undefined;
var columns = generateDatePickerColumns(selected, min, max, precision, renderLabel, filter);
var secondColumns = new Array(11).fill(40).map(function (val, index) { return ({
label: "second-".concat(val + index),
value: "".concat(val + index),
}); });
expect(columns).toEqual([
[{ label: 'year-2022', value: '2022' }],
[{ label: 'month-6', value: '6' }],
[{ label: 'day-15', value: '15' }],
[{ label: 'hour-12', value: '12' }],
[{ label: 'minute-30', value: '30' }],
secondColumns,
]);
});
test('filters out values using the filter function', function () {
var selected = ['2022', '06', '15'];
var min = new Date('2022-06-01');
var max = new Date('2022-06-30');
var precision = 'day';
var filter = {
day: function (value, context) { return context.date.getDay() % 2 === 0; },
};
var columns = generateDatePickerColumns(selected, min, max, precision, renderLabel, filter);
expect(columns).toEqual([
[{ label: 'year-2022', value: '2022' }],
[{ label: 'month-6', value: '6' }],
[
{
label: 'day-2',
value: '2',
},
{
label: 'day-4',
value: '4',
},
{
label: 'day-5',
value: '5',
},
{
label: 'day-7',
value: '7',
},
{
label: 'day-9',
value: '9',
},
{
label: 'day-11',
value: '11',
},
{
label: 'day-12',
value: '12',
},
{
label: 'day-14',
value: '14',
},
{
label: 'day-16',
value: '16',
},
{
label: 'day-18',
value: '18',
},
{
label: 'day-19',
value: '19',
},
{
label: 'day-21',
value: '21',
},
{
label: 'day-23',
value: '23',
},
{
label: 'day-25',
value: '25',
},
{
label: 'day-26',
value: '26',
},
{
label: 'day-28',
value: '28',
},
{
label: 'day-30',
value: '30',
},
],
]);
});
});
describe('convertDateToStringArray', function () {
test('should return an empty array when date is undefined', function () {
expect(convertDateToStringArray(undefined)).toEqual([]);
});
test('should return an empty array when date is null', function () {
expect(convertDateToStringArray(null)).toEqual([]);
});
test('should return an array of stringified date values', function () {
var date = new Date('2021-01-01T00:00:00');
expect(convertDateToStringArray(date)).toEqual([
'2021',
'1',
'1',
'0',
'0',
'0',
]);
});
});
describe('convertQuarterDateToStringArray', function () {
test('should return an empty array when date is undefined', function () {
expect(convertQuarterDateToStringArray(undefined)).toEqual([]);
});
test('should return an empty array when date is null', function () {
expect(convertQuarterDateToStringArray(null)).toEqual([]);
});
test('should return the correct string array for a valid date', function () {
var date = new Date('2022-01-01');
expect(convertQuarterDateToStringArray(date)).toEqual(['2022', '1']);
});
test('should return the correct string array for a different valid date', function () {
var date = new Date('2023-10-15');
expect(convertQuarterDateToStringArray(date)).toEqual(['2023', '4']);
});
});
describe('convertStringArrayToDate', function () {
test('should convert string array to date', function () {
var value = ['2022', '12', '31', '23', '59', '59'];
var result = convertStringArrayToDate(value);
expect(result).toEqual(new Date(2022, 11, 31, 23, 59, 59));
});
test('should handle null and undefined values', function () {
var value = [null, undefined, '1', '0', null, undefined];
var result = convertStringArrayToDate(value);
expect(result).toEqual(new Date(1900, 0, 1, 0, 0, 0));
});
test('should handle missing values', function () {
var value = ['2022', '12'];
var result = convertStringArrayToDate(value);
expect(result).toEqual(new Date(2022, 11, 1, 0, 0, 0));
});
});
describe('convertQuarterArrayToDate', function () {
test('should return a valid date for valid input', function () {
var input = ['2022', '2'];
var result = convertQuarterArrayToDate(input);
expect(result).toBeInstanceOf(Date);
expect(result.getFullYear()).toBe(2022);
expect(result.getMonth()).toBe(3); // May (0-based index)
expect(result.getDate()).toBe(1);
});
test('should return a default date for missing values', function () {
var input = [null, undefined];
var result = convertQuarterArrayToDate(input);
expect(result).toBeInstanceOf(Date);
expect(result.getFullYear()).toBe(1900);
expect(result.getMonth()).toBe(0); // January (0-based index)
expect(result.getDate()).toBe(1);
});
});