[ACS-6586] "Folder" property complains about letters provided into "Name" input field (#9365)

This commit is contained in:
jacekpluta
2024-03-05 11:42:47 +01:00
committed by GitHub
parent a1144597cb
commit 77a87f01df
4 changed files with 85 additions and 7 deletions

View File

@@ -119,5 +119,63 @@ describe('CardViewBaseItemModel', () => {
expect(isValid).toBe(false);
expect(itemModel.getValidationErrors('test-against-this')).toEqual([validator1, validator3 ]);
});
it('should validate field with special character and return false when there is REGEX constraint and requiresMatch is false', () => {
const constrainedProperties: CardViewItemProperties = {
...properties,
value: 'test.',
constraints: [{
id: 'constraint-id',
type: 'REGEX',
parameters: { expression: '(.*[\\"\\*\\\\\\>\\<\\?\\/\\:\\|]+.*)|(.*[\\.]?.*[\\.]+$)|(.*[ ]+$)', requiresMatch: false }
}]
};
const itemModel = new CarViewCustomItemModel(constrainedProperties);
expect(itemModel.isValid(itemModel.value)).toBe(false);
});
it('should validate field without special character and return true when there is REGEX constraint and requiresMatch is false', () => {
const constrainedProperties: CardViewItemProperties = {
...properties,
constraints: [{
id: 'constraint-id',
type: 'REGEX',
parameters: { expression: '(.*[\\"\\*\\\\\\>\\<\\?\\/\\:\\|]+.*)|(.*[\\.]?.*[\\.]+$)|(.*[ ]+$)', requiresMatch: false }
}]
};
const itemModel = new CarViewCustomItemModel(constrainedProperties);
expect(itemModel.isValid(itemModel.value)).toBe(true);
});
it('should validate field without special character and return false when there is REGEX constraint and requiresMatch is true', () => {
const constrainedProperties: CardViewItemProperties = {
...properties,
constraints: [{
id: 'constraint-id',
type: 'REGEX',
parameters: { expression: '(.*[\\"\\*\\\\\\>\\<\\?\\/\\:\\|]+.*)|(.*[\\.]?.*[\\.]+$)|(.*[ ]+$)', requiresMatch: true }
}]
};
const itemModel = new CarViewCustomItemModel(constrainedProperties);
expect(itemModel.isValid(itemModel.value)).toBe(false);
});
it('should validate field without special character and return true when there is REGEX constraint and requiresMatch is true', () => {
const constrainedProperties: CardViewItemProperties = {
...properties,
value: 'test.',
constraints: [{
id: 'constraint-id',
type: 'REGEX',
parameters: { expression: '(.*[\\"\\*\\\\\\>\\<\\?\\/\\:\\|]+.*)|(.*[\\.]?.*[\\.]+$)|(.*[ ]+$)', requiresMatch: true }
}]
};
const itemModel = new CarViewCustomItemModel(constrainedProperties);
expect(itemModel.isValid(itemModel.value)).toBe(true);
});
});
});

View File

@@ -86,16 +86,15 @@ describe('CardViewTextItemModel', () => {
});
});
it('should validate based on defined constraints', () => {
const constrainedProperties = {
it('should validate based on defined constraints and require a match to be valid', () => {
const constrainedProperties: CardViewTextItemProperties = {
label: 'Tribe',
value: 'test',
key: 'tribe',
dataType: 'd:text',
constraints: [{
id: 'constraint-id',
type: 'REGEX',
parameters: { expression: '^(?=.*test).*' }
parameters: { expression: '^(?=.*test).*', requiresMatch: true }
}]
};
@@ -105,4 +104,23 @@ describe('CardViewTextItemModel', () => {
itemModel.value = 'dummy';
expect(itemModel.isValid(itemModel.value)).toBe(false, '`dummy` is not a constraint expression pattern');
});
it('should validate based on defined constraints and not require a match to be valid', () => {
const constrainedProperties: CardViewTextItemProperties = {
label: 'Tribe',
value: 'test',
key: 'tribe',
constraints: [{
id: 'constraint-id',
type: 'REGEX',
parameters: { expression: '^(?=.*test).*', requiresMatch: false }
}]
};
const itemModel = new CardViewTextItemModel(constrainedProperties);
expect(itemModel.isValid(itemModel.value)).toBe(false);
itemModel.value = 'dummy';
expect(itemModel.isValid(itemModel.value)).toBe(true);
});
});

View File

@@ -20,15 +20,17 @@ import { CardViewItemValidator } from '../interfaces/card-view.interfaces';
export interface MatchValidatorParams {
expression: string;
flags?: string;
requiresMatch?: boolean;
}
export class CardViewItemMatchValidator implements CardViewItemValidator {
message = 'CORE.CARDVIEW.VALIDATORS.MATCH_VALIDATION_ERROR';
constructor(private expression: string, private flags?: string) {}
constructor(private expression: string, private flags?: string, private requiresMatch?: boolean) {
}
isValid(value: string): boolean {
const regex = new RegExp(this.expression, this.flags);
return value === '' || regex.test(value);
return value === '' || this.requiresMatch ? regex.test(value) : !regex.test(value);
}
}

View File

@@ -21,7 +21,7 @@ import { CardViewItemLengthValidator, LengthValidatorParams } from './card-view-
const validators = {
minmax: (parameters: MinMaxValidatorParams) => new CardViewItemMinMaxValidator(parameters.minValue, parameters.maxValue),
regex: (parameters: MatchValidatorParams) => new CardViewItemMatchValidator(parameters.expression),
regex: (parameters: MatchValidatorParams) => new CardViewItemMatchValidator(parameters.expression, parameters.flags, parameters.requiresMatch),
length: (parameters: LengthValidatorParams) => new CardViewItemLengthValidator(parameters.minLength, parameters.maxLength)
};
export default validators;