Skip to content

Commit

Permalink
fix: change timestamp check in date validation function
Browse files Browse the repository at this point in the history
  • Loading branch information
Justin Shih committed Feb 8, 2023
1 parent 1bfcb65 commit 61ce151
Show file tree
Hide file tree
Showing 3 changed files with 197 additions and 186 deletions.
163 changes: 95 additions & 68 deletions packages/codegen-ui-react/lib/__tests__/forms/validation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
limitations under the License.
*/
import { FieldValidationConfiguration, ValidationTypes } from '@aws-amplify/codegen-ui/lib/types/form/form-validation';
import { validateField } from '../../utils/forms/validation';
import { parseDateValidator, validateField } from '../../utils/forms/validation';

describe('validateField tests', () => {
it('should validate REQUIRED type', () => {
Expand Down Expand Up @@ -157,77 +157,104 @@ describe('validateField tests', () => {
validateField(3, [{ type: ValidationTypes.EQUAL_TO_NUM, numValues: [4, 5, 6], validationMessage: 'test' }]),
).toEqual({ hasError: true, errorMessage: 'test' });
});
it('should validate BE_AFTER type', () => {
const startDate = new Date().toDateString();
const endDate1 = new Date('2021-01-09').toDateString();
const endDate2 = new Date('3000-01-09').toDateString();
expect(
validateField(startDate, [{ type: ValidationTypes.BE_AFTER, strValues: [endDate1], validationMessage: '' }]),
).toEqual({ hasError: false });
expect(
validateField(startDate, [{ type: ValidationTypes.BE_AFTER, strValues: [endDate2], validationMessage: '' }]),
).toEqual({ hasError: true, errorMessage: `The value must be after ${endDate2}` });
expect(
validateField(startDate, [{ type: ValidationTypes.BE_AFTER, strValues: [''], validationMessage: 'test' }]),
).toEqual({ hasError: true, errorMessage: 'test' });
describe('DateTime tests', () => {
it('should parse Date and timestamp', () => {
const time = Date.now().toString();
const timestamp = parseDateValidator(time);
const ddMMYYYY = parseDateValidator('01 Jan 2022');
const mmDDYYYY = parseDateValidator('1/01/2022');
const yyyyMMDD = parseDateValidator('2022-1-1');
const januaryFirst = 'Sat Jan 01 2022 00:00:00 GMT-0800 (Pacific Standard Time)';

const startTime = Date.now();
const endTime1 = startTime - 10;
expect(
validateField(startTime, [
{ type: ValidationTypes.BE_AFTER, strValues: [endTime1.toString()], validationMessage: '' },
]),
).toEqual({ hasError: false });
expect(
validateField(endTime1, [
{ type: ValidationTypes.BE_AFTER, strValues: [startTime.toString()], validationMessage: '' },
]),
).toEqual({ hasError: true, errorMessage: `The value must be after ${startTime}` });
expect(
validateField(endTime1, [
{ type: ValidationTypes.BE_AFTER, strValues: [startTime.toString()], validationMessage: 'test' },
]),
).toEqual({ hasError: true, errorMessage: 'test' });
});
it('should validate BE_BEFORE type', () => {
const startDate = new Date('2022-01-09').toString();
const endDate1 = new Date('2023-01-09').toString();
const endDate2 = new Date('2021-01-09').toString();
expect(timestamp.toString()).toEqual(time);
expect(ddMMYYYY.toString()).toEqual(januaryFirst);
expect(mmDDYYYY.toString()).toEqual(januaryFirst);
expect(yyyyMMDD.toString()).toEqual(januaryFirst);
});
it('should validate BE_AFTER type', () => {
// timestamp tests
const startTime = Date.now();
const endTime1 = startTime + 10;
const endTime2 = startTime - 10;

expect(
validateField(startDate, [
{ type: ValidationTypes.BE_BEFORE, strValues: [endDate1.toString()], validationMessage: '' },
]),
).toEqual({ hasError: false });
expect(
validateField(startDate, [
{ type: ValidationTypes.BE_BEFORE, strValues: [endDate2.toString()], validationMessage: '' },
]),
).toEqual({ hasError: true, errorMessage: `The value must be before ${endDate2}` });
expect(
validateField(startDate, [
{ type: ValidationTypes.BE_BEFORE, strValues: [endDate2.toString()], validationMessage: 'test' },
]),
).toEqual({ hasError: true, errorMessage: 'test' });
const dateFormatTestCases = [
{
startDate: '01 Jan 2022',
endDate1: 'Jan 08 2023',
endDate2: '01 Jan 2021',
},
{
startDate: '01/09/2022',
endDate1: '01/09/2023',
endDate2: '01/09/2021',
},
{
startDate: '2022-1-9',
endDate1: '2023-1-9',
endDate2: '2021-1-9',
},
{
startDate: startTime,
endDate1: endTime1.toString(),
endDate2: endTime2.toString(),
},
];

const startTime = Date.now();
const endTime1 = startTime + 10;
expect(
validateField(startTime, [
{ type: ValidationTypes.BE_BEFORE, strValues: [endTime1.toString()], validationMessage: '' },
]),
).toEqual({ hasError: false });
expect(
validateField(endTime1, [
{ type: ValidationTypes.BE_BEFORE, strValues: [startTime.toString()], validationMessage: '' },
]),
).toEqual({ hasError: true, errorMessage: `The value must be before ${startTime}` });
expect(
validateField(endTime1, [
{ type: ValidationTypes.BE_BEFORE, strValues: [startTime.toString()], validationMessage: 'test' },
]),
).toEqual({ hasError: true, errorMessage: 'test' });
dateFormatTestCases.forEach(({ startDate, endDate1, endDate2 }) => {
expect(
validateField(startDate, [{ type: ValidationTypes.BE_AFTER, strValues: [endDate2], validationMessage: '' }]),
).toEqual({ hasError: false });
expect(
validateField(startDate, [{ type: ValidationTypes.BE_AFTER, strValues: [endDate1], validationMessage: '' }]),
).toEqual({ hasError: true, errorMessage: `The value must be after ${endDate1}` });
expect(
validateField(startDate, [{ type: ValidationTypes.BE_AFTER, strValues: [''], validationMessage: 'test' }]),
).toEqual({ hasError: true, errorMessage: 'test' });
});
});

it('should validate BE_BEFORE type', () => {
// timestamp tests
const startTime = Date.now();
const endTime1 = startTime + 10;
const endTime2 = startTime - 10;

const dateFormatTestCases = [
{
startDate: '01 Jan 2022',
endDate1: 'Jan 08 2023',
endDate2: '01 Jan 2021',
},
{
startDate: '01/09/2022',
endDate1: '01/09/2023',
endDate2: '01/09/2021',
},
{
startDate: '2022-01-09',
endDate1: '2023-01-09',
endDate2: '2021-01-09',
},
{
startDate: startTime,
endDate1: endTime1.toString(),
endDate2: endTime2.toString(),
},
];
dateFormatTestCases.forEach(({ startDate, endDate1, endDate2 }) => {
expect(
validateField(startDate, [{ type: ValidationTypes.BE_BEFORE, strValues: [endDate1], validationMessage: '' }]),
).toEqual({ hasError: false });
expect(
validateField(startDate, [{ type: ValidationTypes.BE_BEFORE, strValues: [endDate2], validationMessage: '' }]),
).toEqual({ hasError: true, errorMessage: `The value must be before ${endDate2}` });
expect(
validateField(startDate, [{ type: ValidationTypes.BE_BEFORE, strValues: [''], validationMessage: 'test' }]),
).toEqual({ hasError: true, errorMessage: 'test' });
});
});
});

it('should validate EMAIL type', () => {
expect(validateField('ab-cd@amazon.com', [{ type: ValidationTypes.EMAIL, validationMessage: '' }])).toEqual({
hasError: false,
Expand Down
Loading

0 comments on commit 61ce151

Please sign in to comment.