Skip to content

Commit

Permalink
fix: change timestamp check in date validation function (#911)
Browse files Browse the repository at this point in the history
Co-authored-by: Justin Shih <jushih@amazon.com>
  • Loading branch information
Jshhhh and Justin Shih committed Feb 9, 2023
1 parent b3d9f29 commit cf96a1c
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 186 deletions.
164 changes: 96 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,105 @@ 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 invalidTimestamp = parseDateValidator('1232131asdfasf123');
const ddMMYYYY = parseDateValidator('01 Jan 2022');
const mmDDYYYY = parseDateValidator('1/01/2022');
const yyyyMMDD = parseDateValidator('2022-1-1');

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(new Date(invalidTimestamp).toString()).toEqual('Invalid Date');
expect(ddMMYYYY).toEqual('01 Jan 2022');
expect(mmDDYYYY).toEqual('1/01/2022');
expect(yyyyMMDD).toEqual('2022-1-1');
});
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: '123123asdfdf123123',
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: '123123asdfdf123123',
},
{
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

0 comments on commit cf96a1c

Please sign in to comment.