diff --git a/lib/core/form/components/widgets/core/form-field-validator.spec.ts b/lib/core/form/components/widgets/core/form-field-validator.spec.ts index 786aac49ec..856a9453ea 100644 --- a/lib/core/form/components/widgets/core/form-field-validator.spec.ts +++ b/lib/core/form/components/widgets/core/form-field-validator.spec.ts @@ -32,6 +32,7 @@ import { } from './form-field-validator'; import { FormFieldModel } from './form-field.model'; import { FormModel } from './form.model'; +declare let moment: any; describe('FormFieldValidator', () => { @@ -662,6 +663,39 @@ describe('FormFieldValidator', () => { expect(validator.validate(field)).toBeTruthy(); }); + it('should take into account that max value is in UTC and NOT fail validating value checking the time', () => { + const maxValueFromActivitiInput = '31-3-2018 12:00 AM'; + const maxValueSavedInForm = moment(maxValueFromActivitiInput, 'DD-M-YYYY hh:mm A').utc().format(); + + const localValidValue = '2018-3-30 11:59 PM'; + + let field = new FormFieldModel(new FormModel(), { + type: FormFieldTypes.DATETIME, + value: localValidValue, + maxValue: maxValueSavedInForm + }); + + expect(validator.validate(field)).toBeTruthy(); + }); + + it('should take into account that max value is in UTC and fail validating value checking the time', () => { + const maxValueFromActivitiInput = '31-3-2018 12:00 AM'; + const maxValueSavedInForm = moment(maxValueFromActivitiInput, 'DD-M-YYYY hh:mm A').utc().format(); + + let localInvalidValue = '2018-3-31 12:01 AM'; + + let field = new FormFieldModel(new FormModel(), { + type: FormFieldTypes.DATETIME, + value: localInvalidValue, + maxValue: maxValueSavedInForm + }); + + field.validationSummary = new ErrorMessageModel(); + expect(validator.validate(field)).toBeFalsy(); + expect(field.validationSummary).not.toBeNull(); + expect(field.validationSummary.message).toBe('FORM.FIELD.VALIDATOR.NOT_GREATER_THAN'); + }); + it('should succeed validating value checking the time', () => { let field = new FormFieldModel(new FormModel(), { type: FormFieldTypes.DATETIME, @@ -756,6 +790,39 @@ describe('FormFieldValidator', () => { expect(validator.validate(field)).toBeTruthy(); }); + it('should take into account that min value is in UTC and NOT fail validating value checking the time', () => { + const minValueFromActivitiInput = '02-3-2018 06:00 AM'; + const minValueSavedInForm = moment(minValueFromActivitiInput, 'DD-M-YYYY hh:mm A').utc().format(); + + const localValidValue = '2018-3-02 06:01 AM'; + + let field = new FormFieldModel(new FormModel(), { + type: FormFieldTypes.DATETIME, + value: localValidValue, + minValue: minValueSavedInForm + }); + + expect(validator.validate(field)).toBeTruthy(); + }); + + it('should take into account that min value is in UTC and fail validating value checking the time', () => { + const minValueFromActivitiInput = '02-3-2018 06:00 AM'; + const minValueSavedInForm = moment(minValueFromActivitiInput, 'DD-M-YYYY hh:mm A').utc().format(); + + let localInvalidValue = '2018-3-02 05:59 AM'; + + let field = new FormFieldModel(new FormModel(), { + type: FormFieldTypes.DATETIME, + value: localInvalidValue, + minValue: minValueSavedInForm + }); + + field.validationSummary = new ErrorMessageModel(); + expect(validator.validate(field)).toBeFalsy(); + expect(field.validationSummary).not.toBeNull(); + expect(field.validationSummary.message).toBe('FORM.FIELD.VALIDATOR.NOT_LESS_THAN'); + }); + it('should succeed validating value by time', () => { let field = new FormFieldModel(new FormModel(), { type: FormFieldTypes.DATETIME, diff --git a/lib/core/form/components/widgets/core/form-field-validator.ts b/lib/core/form/components/widgets/core/form-field-validator.ts index 071e0d00c6..ce74cde9b2 100644 --- a/lib/core/form/components/widgets/core/form-field-validator.ts +++ b/lib/core/form/components/widgets/core/form-field-validator.ts @@ -256,6 +256,7 @@ export class MinDateTimeFieldValidator implements FormFieldValidator { private supportedTypes = [ FormFieldTypes.DATETIME ]; + MIN_DATETIME_FORMAT = 'YYYY-MM-DD hh:mm AZ'; isSupported(field: FormFieldModel): boolean { return field && @@ -278,8 +279,6 @@ export class MinDateTimeFieldValidator implements FormFieldValidator { } private checkDateTime(field: FormFieldModel, dateFormat: string): boolean { - const MIN_DATE_FORMAT = 'YYYY-MM-DD hh:mm A'; - let isValid = true; let fieldValueDate; if (typeof field.value === 'string') { @@ -287,7 +286,7 @@ export class MinDateTimeFieldValidator implements FormFieldValidator { } else { fieldValueDate = field.value; } - let min = moment(field.minValue, MIN_DATE_FORMAT); + let min = moment(field.minValue, this.MIN_DATETIME_FORMAT); if (fieldValueDate.isBefore(min)) { field.validationSummary.message = `FORM.FIELD.VALIDATOR.NOT_LESS_THAN`; @@ -303,6 +302,7 @@ export class MaxDateTimeFieldValidator implements FormFieldValidator { private supportedTypes = [ FormFieldTypes.DATETIME ]; + MAX_DATETIME_FORMAT = 'YYYY-MM-DD hh:mm AZ'; isSupported(field: FormFieldModel): boolean { return field && @@ -325,7 +325,6 @@ export class MaxDateTimeFieldValidator implements FormFieldValidator { } private checkDateTime(field: FormFieldModel, dateFormat: string): boolean { - const MAX_DATE_FORMAT = 'YYYY-MM-DD hh:mm A'; let isValid = true; let fieldValueDate; @@ -334,7 +333,7 @@ export class MaxDateTimeFieldValidator implements FormFieldValidator { } else { fieldValueDate = field.value; } - let max = moment(field.maxValue, MAX_DATE_FORMAT); + let max = moment(field.maxValue, this.MAX_DATETIME_FORMAT); if (fieldValueDate.isAfter(max)) { field.validationSummary.message = `FORM.FIELD.VALIDATOR.NOT_GREATER_THAN`;