diff --git a/src/process/validation/rules/__tests__/validateRequired.test.ts b/src/process/validation/rules/__tests__/validateRequired.test.ts index 96c81366..1b3a2cd7 100644 --- a/src/process/validation/rules/__tests__/validateRequired.test.ts +++ b/src/process/validation/rules/__tests__/validateRequired.test.ts @@ -1,4 +1,5 @@ import { expect } from 'chai'; +import moment from 'moment'; import { FieldError } from 'error'; import { validateRequired } from '../validateRequired'; @@ -11,6 +12,7 @@ import { simpleRadioField, simpleCheckBoxField, requiredAddressManualMode, + simpleDateTimeField, } from './fixtures/components'; import { processOne } from 'processes/processOne'; import { generateProcessorContext } from './fixtures/util'; @@ -253,4 +255,20 @@ describe('validateRequired', function () { const result = await validateRequired(context); expect(result).to.equal(null); }); + + it('Validating a required component with moment.js object', async function () { + const component = { ...simpleDateTimeField, validate: { required: true } }; + const data = { component: moment() }; + const context = generateProcessorContext(component, data); + const result = await validateRequired(context); + expect(result).to.equal(null); + }); + + it('Validating a required component with Date object', async function () { + const component = { ...simpleDateTimeField, validate: { required: true } }; + const data = { component: new Date() }; + const context = generateProcessorContext(component, data); + const result = await validateRequired(context); + expect(result).to.equal(null); + }); }); diff --git a/src/process/validation/rules/validateRequired.ts b/src/process/validation/rules/validateRequired.ts index 77d0a331..f16f23b9 100644 --- a/src/process/validation/rules/validateRequired.ts +++ b/src/process/validation/rules/validateRequired.ts @@ -58,6 +58,13 @@ const valueIsPresent = ( else if (Array.isArray(value) && value.length === 0) { return false; } + // Check for moment.js object or Date object + else if ( + typeof value === 'object' && + (value._isAMomentObject === true || value instanceof Date) + ) { + return true; + } // Recursively evaluate else if (typeof value === 'object' && !isNestedDatatype) { return Object.values(value).some((val) =>