UNPKG

@cainiaofe/cn-ui-m

Version:
309 lines (308 loc) • 12.6 kB
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); }); });