mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
AAE-40741 Form rule Validate form doesn't do anything (#11788)
This commit is contained in:
@@ -79,6 +79,11 @@ describe('FormModel', () => {
|
||||
expect(form.readOnly).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should have showAllValidationErrors default to false', () => {
|
||||
const form = new FormModel({});
|
||||
expect(form.showAllValidationErrors).toBe(false);
|
||||
});
|
||||
|
||||
it('should set form values when variable value is 0', () => {
|
||||
const variables = {
|
||||
pfx_property_one: 0
|
||||
|
||||
@@ -94,6 +94,7 @@ export class FormModel implements ProcessFormModel {
|
||||
className: string;
|
||||
readOnly = false;
|
||||
isValid = true;
|
||||
showAllValidationErrors = false;
|
||||
processVariables: ProcessVariableModel[] = [];
|
||||
variables: FormVariableModel[] = [];
|
||||
enableParentVisibilityCheck: boolean = false;
|
||||
|
||||
@@ -526,4 +526,38 @@ describe('DateTimeWidgetComponent', () => {
|
||||
expect(asterisk?.textContent).toEqual('*');
|
||||
});
|
||||
});
|
||||
|
||||
describe('showAllValidationErrors', () => {
|
||||
it('should mark datetimeInputControl as touched when showAllValidationErrors is true', () => {
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'datetime-id',
|
||||
name: 'datetime-name',
|
||||
type: FormFieldTypes.DATETIME,
|
||||
required: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(widget.datetimeInputControl.touched).toBe(false);
|
||||
|
||||
form.showAllValidationErrors = true;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.datetimeInputControl.touched).toBe(true);
|
||||
});
|
||||
|
||||
it('should not mark datetimeInputControl as touched when showAllValidationErrors is false', () => {
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'datetime-id',
|
||||
name: 'datetime-name',
|
||||
type: FormFieldTypes.DATETIME,
|
||||
required: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
form.showAllValidationErrors = false;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.datetimeInputControl.touched).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -71,6 +71,9 @@ export class DateTimeWidgetComponent extends WidgetComponent implements OnInit,
|
||||
updateReactiveFormControl(): void {
|
||||
this.setFormControlValue();
|
||||
this.updateFormControlState();
|
||||
if (this.field?.form?.showAllValidationErrors) {
|
||||
this.datetimeInputControl.markAsTouched();
|
||||
}
|
||||
this.validateField();
|
||||
}
|
||||
|
||||
|
||||
@@ -340,4 +340,38 @@ describe('DateWidgetComponent', () => {
|
||||
|
||||
expect(dateElement.value).toContain('03-02-2020');
|
||||
});
|
||||
|
||||
describe('showAllValidationErrors', () => {
|
||||
it('should mark dateInputControl as touched when showAllValidationErrors is true', () => {
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'date-field-id',
|
||||
name: 'date-name',
|
||||
type: FormFieldTypes.DATE,
|
||||
required: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(widget.dateInputControl.touched).toBe(false);
|
||||
|
||||
form.showAllValidationErrors = true;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dateInputControl.touched).toBe(true);
|
||||
});
|
||||
|
||||
it('should not mark dateInputControl as touched when showAllValidationErrors is false', () => {
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'date-field-id',
|
||||
name: 'date-name',
|
||||
type: FormFieldTypes.DATE,
|
||||
required: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
form.showAllValidationErrors = false;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dateInputControl.touched).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -80,6 +80,9 @@ export class DateWidgetComponent extends WidgetComponent implements OnInit, Reac
|
||||
|
||||
updateReactiveFormControl(): void {
|
||||
this.updateFormControlState();
|
||||
if (this.field?.form?.showAllValidationErrors) {
|
||||
this.dateInputControl.markAsTouched();
|
||||
}
|
||||
this.validateField();
|
||||
}
|
||||
|
||||
|
||||
@@ -152,4 +152,31 @@ describe('WidgetComponent', () => {
|
||||
expect(widget.isInvalidFieldRequired()).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isTouched', () => {
|
||||
it('should return false by default', () => {
|
||||
widget.field = new FormFieldModel(new FormModel(), { type: 'text' });
|
||||
expect(widget.isTouched()).toBe(false);
|
||||
});
|
||||
|
||||
it('should return true when touched is set', () => {
|
||||
widget.field = new FormFieldModel(new FormModel(), { type: 'text' });
|
||||
widget.markAsTouched();
|
||||
expect(widget.isTouched()).toBe(true);
|
||||
});
|
||||
|
||||
it('should return true when showAllValidationErrors is set on the form', () => {
|
||||
const form = new FormModel();
|
||||
form.showAllValidationErrors = true;
|
||||
widget.field = new FormFieldModel(form, { type: 'text' });
|
||||
expect(widget.isTouched()).toBe(true);
|
||||
});
|
||||
|
||||
it('should return false when showAllValidationErrors is false and not touched', () => {
|
||||
const form = new FormModel();
|
||||
form.showAllValidationErrors = false;
|
||||
widget.field = new FormFieldModel(form, { type: 'text' });
|
||||
expect(widget.isTouched()).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -80,7 +80,7 @@ export class WidgetComponent implements AfterViewInit {
|
||||
}
|
||||
|
||||
isTouched(): boolean {
|
||||
return this.touched;
|
||||
return this.touched || !!this.field?.form?.showAllValidationErrors;
|
||||
}
|
||||
|
||||
hasValue(): boolean {
|
||||
|
||||
+34
@@ -510,4 +510,38 @@ describe('DateCloudWidgetComponent', () => {
|
||||
expect(widget.field.validationSummary.message).toBe('FORM.FIELD.REQUIRED');
|
||||
});
|
||||
});
|
||||
|
||||
describe('showAllValidationErrors', () => {
|
||||
it('should mark dateInputControl as touched when showAllValidationErrors is true', () => {
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'date-field-id',
|
||||
name: 'date-name',
|
||||
type: 'date',
|
||||
required: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(widget.dateInputControl.touched).toBe(false);
|
||||
|
||||
form.showAllValidationErrors = true;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dateInputControl.touched).toBe(true);
|
||||
});
|
||||
|
||||
it('should not mark dateInputControl as touched when showAllValidationErrors is false', () => {
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'date-field-id',
|
||||
name: 'date-name',
|
||||
type: 'date',
|
||||
required: true
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
form.showAllValidationErrors = false;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dateInputControl.touched).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -88,6 +88,9 @@ export class DateCloudWidgetComponent extends WidgetComponent implements OnInit,
|
||||
updateReactiveFormControl(): void {
|
||||
this.setFormControlValue();
|
||||
this.updateFormControlState();
|
||||
if (this.field?.form?.showAllValidationErrors) {
|
||||
this.dateInputControl.markAsTouched();
|
||||
}
|
||||
this.validateField();
|
||||
}
|
||||
|
||||
|
||||
+38
@@ -1410,6 +1410,44 @@ describe('DropdownCloudWidgetComponent', () => {
|
||||
expect(allOptions.length).toEqual(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('showAllValidationErrors', () => {
|
||||
it('should mark dropdownControl as touched when showAllValidationErrors is true', () => {
|
||||
const form = new FormModel();
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'dropdown-id',
|
||||
name: 'dropdown-name',
|
||||
type: FormFieldTypes.DROPDOWN,
|
||||
required: true,
|
||||
options: fakeOptionList
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(widget.dropdownControl.touched).toBe(false);
|
||||
|
||||
form.showAllValidationErrors = true;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dropdownControl.touched).toBe(true);
|
||||
});
|
||||
|
||||
it('should not mark dropdownControl as touched when showAllValidationErrors is false', () => {
|
||||
const form = new FormModel();
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'dropdown-id',
|
||||
name: 'dropdown-name',
|
||||
type: FormFieldTypes.DROPDOWN,
|
||||
required: true,
|
||||
options: fakeOptionList
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
form.showAllValidationErrors = false;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dropdownControl.touched).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('DropdownCloudWidgetComponent instantiated by FormFieldComponent wrapper', () => {
|
||||
|
||||
+3
@@ -165,6 +165,9 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
|
||||
this.setFormControlValue();
|
||||
|
||||
this.updateFormControlState();
|
||||
if (this.field?.form?.showAllValidationErrors) {
|
||||
this.dropdownControl.markAsTouched();
|
||||
}
|
||||
this.handleErrors();
|
||||
}
|
||||
|
||||
|
||||
@@ -349,4 +349,42 @@ describe('DropdownWidgetComponent', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('showAllValidationErrors', () => {
|
||||
it('should mark dropdownControl as touched when showAllValidationErrors is true', () => {
|
||||
const form = new FormModel();
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'dropdown-id',
|
||||
name: 'dropdown-name',
|
||||
type: FormFieldTypes.DROPDOWN,
|
||||
required: true,
|
||||
options: fakeOptionList
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(widget.dropdownControl.touched).toBe(false);
|
||||
|
||||
form.showAllValidationErrors = true;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dropdownControl.touched).toBe(true);
|
||||
});
|
||||
|
||||
it('should not mark dropdownControl as touched when showAllValidationErrors is false', () => {
|
||||
const form = new FormModel();
|
||||
widget.field = new FormFieldModel(form, {
|
||||
id: 'dropdown-id',
|
||||
name: 'dropdown-name',
|
||||
type: FormFieldTypes.DROPDOWN,
|
||||
required: true,
|
||||
options: fakeOptionList
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
form.showAllValidationErrors = false;
|
||||
widget.updateReactiveFormControl();
|
||||
|
||||
expect(widget.dropdownControl.touched).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -100,6 +100,9 @@ export class DropdownWidgetComponent extends WidgetComponent implements OnInit,
|
||||
|
||||
updateReactiveFormControl(): void {
|
||||
this.updateFormControlState();
|
||||
if (this.field?.form?.showAllValidationErrors) {
|
||||
this.dropdownControl.markAsTouched();
|
||||
}
|
||||
this.handleErrors();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user