From 4c9a6487445fbf4b6a0f3ac3167de7dc7f0c7500 Mon Sep 17 00:00:00 2001 From: Amedeo Lepore Date: Mon, 25 Jul 2022 11:42:44 +0200 Subject: [PATCH] =?UTF-8?q?[AAE-9463]=20Check=20if=20minDateRangeValue=20a?= =?UTF-8?q?nd=20maxDateRangeValue=20are=20inte=E2=80=A6=20(#7720)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [AAE-10045] Check if minDateRangeValue and maxDateRangeValue are integer to avoid null or undefined values * [AAE-9400] Fix date validations if dynamic date range is enabled --- .../widgets/date/date-cloud.widget.spec.ts | 125 ++++++++++++++++++ .../widgets/date/date-cloud.widget.ts | 12 +- 2 files changed, 134 insertions(+), 3 deletions(-) diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.spec.ts b/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.spec.ts index 6679aa8a86..9e5924cc91 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.spec.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.spec.ts @@ -367,6 +367,131 @@ describe('DateWidgetComponent', () => { expect(widget.maxDate).toEqual(expected); }); + it('should maxDate and minDate be undefined if minDateRangeValue and maxDateRangeValue are null', async () => { + widget.field = new FormFieldModel(null, { + dynamicDateRangeSelection: true, + maxDateRangeValue: null, + minDateRangeValue: null + }); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect(widget.maxDate).toBeUndefined(); + expect(widget.minDate).toBeUndefined(); + }); + + it('should minDate be undefined if minDateRangeValue is null and maxDateRangeValue is greater than 0', async () => { + widget.field = new FormFieldModel(null, { + dynamicDateRangeSelection: true, + maxDateRangeValue: 15, + minDateRangeValue: null + }); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect(widget.maxDate).not.toBeUndefined(); + expect(widget.minDate).toBeUndefined(); + }); + + it('should maxDate be undefined if maxDateRangeValue is null and minDateRangeValue is greater than 0', async () => { + widget.field = new FormFieldModel(null, { + dynamicDateRangeSelection: true, + maxDateRangeValue: null, + minDateRangeValue: 10 + }); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect(widget.minDate).not.toBeUndefined(); + expect(widget.maxDate).toBeUndefined(); + }); + + describe('check date validation by dynamic date ranges', () => { + it('should minValue be equal to today date minus minDateRangeValue', async () => { + spyOn(widget, 'getTodaysFormattedDate').and.returnValue('2022-07-22'); + widget.field = new FormFieldModel(null, { + dynamicDateRangeSelection: true, + maxDateRangeValue: null, + minDateRangeValue: 1, + maxValue: null, + minValue: null + }); + + fixture.detectChanges(); + await fixture.whenStable(); + + const expectedMinValueString = '2022-07-21'; + + expect(widget.field.minValue).toEqual(expectedMinValueString); + expect(widget.maxDate).toBeUndefined(); + expect(widget.field.maxValue).toBeNull(); + }); + + it('should maxValue be equal to today date plus maxDateRangeValue', async () => { + spyOn(widget, 'getTodaysFormattedDate').and.returnValue('2022-07-22'); + widget.field = new FormFieldModel(null, { + dynamicDateRangeSelection: true, + maxDateRangeValue: 8, + minDateRangeValue: null, + maxValue: null, + minValue: null + }); + + fixture.detectChanges(); + await fixture.whenStable(); + + const expectedMaxValueString = '2022-07-30'; + + expect(widget.field.maxValue).toEqual(expectedMaxValueString); + expect(widget.minDate).toBeUndefined(); + expect(widget.field.minValue).toBeNull(); + }); + + it('should maxValue and minValue be null if maxDateRangeValue and minDateRangeValue are null', async () => { + spyOn(widget, 'getTodaysFormattedDate').and.returnValue('2022-07-22'); + widget.field = new FormFieldModel(null, { + dynamicDateRangeSelection: true, + maxDateRangeValue: null, + minDateRangeValue: null, + maxValue: null, + minValue: null + }); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect(widget.minDate).toBeUndefined(); + expect(widget.maxDate).toBeUndefined(); + expect(widget.field.minValue).toBeNull(); + expect(widget.field.maxValue).toBeNull(); + }); + + it('should maxValue and minValue not be null if maxDateRangeVale and minDateRangeValue are not null', async () => { + spyOn(widget, 'getTodaysFormattedDate').and.returnValue('2022-07-22'); + widget.field = new FormFieldModel(null, { + dynamicDateRangeSelection: true, + maxDateRangeValue: 8, + minDateRangeValue: 10, + maxValue: null, + minValue: null + }); + + fixture.detectChanges(); + await fixture.whenStable(); + + const expectedMaxValueString = '2022-07-30'; + const expectedMinValueString = '2022-07-12'; + + expect(widget.field.maxValue).toEqual(expectedMaxValueString); + expect(widget.field.minValue).toEqual(expectedMinValueString); + }); + + }); + + }); diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.ts b/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.ts index 465678b246..e3f625f7c0 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/date/date-cloud.widget.ts @@ -75,12 +75,14 @@ export class DateCloudWidgetComponent extends WidgetComponent implements OnInit, if (this.field) { if (this.field.dynamicDateRangeSelection) { - const today = moment().format(DATE_FORMAT_CLOUD); - if (!isNaN(this.field.minDateRangeValue)) { + const today = this.getTodaysFormattedDate(); + if (Number.isInteger(this.field.minDateRangeValue)) { this.minDate = moment(today).subtract(this.field.minDateRangeValue, 'days'); + this.field.minValue = this.minDate.format(DATE_FORMAT_CLOUD); } - if (!isNaN(this.field.maxDateRangeValue)) { + if (Number.isInteger(this.field.maxDateRangeValue)) { this.maxDate = moment(today).add(this.field.maxDateRangeValue, 'days'); + this.field.maxValue = this.maxDate.format(DATE_FORMAT_CLOUD); } } else { if (this.field.minValue) { @@ -94,6 +96,10 @@ export class DateCloudWidgetComponent extends WidgetComponent implements OnInit, } } + getTodaysFormattedDate() { + return moment().format(DATE_FORMAT_CLOUD); + } + ngOnDestroy() { this.onDestroy$.next(true); this.onDestroy$.complete();