mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
AAE-28918 Fix for start process button is enabled when required widgets are read only without value (#11781)
* AAE-28918 Fix start process button is enabled when required widgets are read only without value * Apply Copilot review suggestions. * updates after code review comments * revert change made earlier
This commit is contained in:
@@ -1220,7 +1220,7 @@ describe('FormFieldModel', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should validate readOnly field if it is validatable', () => {
|
||||
it('should fail validation for readOnly required display-external-property field with null value', () => {
|
||||
const form = new FormModel();
|
||||
const field = new FormFieldModel(form, {
|
||||
id: 'mockDisplayExternalPropertyFieldId',
|
||||
@@ -1233,11 +1233,10 @@ describe('FormFieldModel', () => {
|
||||
const validator = new RequiredFieldValidator();
|
||||
form.fieldValidators = [validator];
|
||||
|
||||
expect(FormFieldTypes.isValidatableType(FormFieldTypes.DISPLAY_EXTERNAL_PROPERTY)).toBeTrue();
|
||||
expect(field.validate()).toBe(false);
|
||||
});
|
||||
|
||||
it('should validate NOT readOnly field if it is validatable', () => {
|
||||
it('should fail validation for required display-external-property field with null value', () => {
|
||||
const form = new FormModel();
|
||||
const field = new FormFieldModel(form, {
|
||||
id: 'mockDisplayExternalPropertyFieldId',
|
||||
@@ -1250,11 +1249,10 @@ describe('FormFieldModel', () => {
|
||||
const validator = new RequiredFieldValidator();
|
||||
form.fieldValidators = [validator];
|
||||
|
||||
expect(FormFieldTypes.isValidatableType(FormFieldTypes.DISPLAY_EXTERNAL_PROPERTY)).toBeTrue();
|
||||
expect(field.validate()).toBe(false);
|
||||
});
|
||||
|
||||
it('should NOT validate readOnly field if it is NOT validatable', () => {
|
||||
it('should fail validation for readOnly required text field with null value', () => {
|
||||
const form = new FormModel();
|
||||
const field = new FormFieldModel(form, {
|
||||
id: 'mockTextFieldId',
|
||||
@@ -1267,10 +1265,60 @@ describe('FormFieldModel', () => {
|
||||
const validator = new RequiredFieldValidator();
|
||||
form.fieldValidators = [validator];
|
||||
|
||||
expect(FormFieldTypes.isValidatableType(FormFieldTypes.TEXT)).toBeFalse();
|
||||
expect(field.validate()).toBe(false);
|
||||
});
|
||||
|
||||
it('should pass validation for readOnly required field that has a value', () => {
|
||||
const form = new FormModel();
|
||||
const field = new FormFieldModel(form, {
|
||||
id: 'mockTextFieldId',
|
||||
type: FormFieldTypes.TEXT,
|
||||
readOnly: true,
|
||||
required: true,
|
||||
value: 'some value'
|
||||
});
|
||||
|
||||
const validator = new RequiredFieldValidator();
|
||||
form.fieldValidators = [validator];
|
||||
|
||||
expect(field.validate()).toBe(true);
|
||||
});
|
||||
|
||||
it('should pass validation for readOnly non-required field with null value', () => {
|
||||
const form = new FormModel();
|
||||
const field = new FormFieldModel(form, {
|
||||
id: 'mockTextFieldId',
|
||||
type: FormFieldTypes.TEXT,
|
||||
readOnly: true,
|
||||
required: false,
|
||||
value: null
|
||||
});
|
||||
|
||||
const validator = new RequiredFieldValidator();
|
||||
form.fieldValidators = [validator];
|
||||
|
||||
expect(field.validate()).toBe(true);
|
||||
});
|
||||
|
||||
it('should pass validation for readOnly required field with empty value when field or parent is hidden', () => {
|
||||
const form = new FormModel();
|
||||
const field = new FormFieldModel(form, {
|
||||
id: 'mockTextFieldId',
|
||||
type: FormFieldTypes.TEXT,
|
||||
readOnly: true,
|
||||
required: true,
|
||||
value: null
|
||||
});
|
||||
|
||||
const validator = new RequiredFieldValidator();
|
||||
form.fieldValidators = [validator];
|
||||
|
||||
spyOn(form, 'isFieldOrParentHidden').and.returnValue(true);
|
||||
|
||||
expect(field.validate()).toBe(true);
|
||||
expect(form.isFieldOrParentHidden).toHaveBeenCalledWith(field);
|
||||
});
|
||||
|
||||
it('should set the tooltip correctly', () => {
|
||||
const form = new FormModel();
|
||||
const tooltipText = 'This is a tooltip';
|
||||
|
||||
@@ -170,23 +170,18 @@ export class FormFieldModel extends FormWidgetModel {
|
||||
validate(): boolean {
|
||||
this.validationSummary = new ErrorMessageModel();
|
||||
|
||||
if (this.isFieldValidatable()) {
|
||||
const validators = this.form.fieldValidators || [];
|
||||
for (const validator of validators) {
|
||||
if (!validator.validate(this)) {
|
||||
this._isValid = false;
|
||||
return this._isValid;
|
||||
}
|
||||
const validators = this.form?.fieldValidators || [];
|
||||
for (const validator of validators) {
|
||||
if (!validator.validate(this)) {
|
||||
this._isValid = false;
|
||||
return this._isValid;
|
||||
}
|
||||
}
|
||||
|
||||
this._isValid = true;
|
||||
return this._isValid;
|
||||
}
|
||||
|
||||
private isFieldValidatable(): boolean {
|
||||
return !this.readOnly || FormFieldTypes.isValidatableType(this.type);
|
||||
}
|
||||
|
||||
constructor(form: any, json?: any, parent?: RepeatableSectionModel) {
|
||||
super(form, json);
|
||||
if (json) {
|
||||
|
||||
Reference in New Issue
Block a user