mirror of
https://github.com/strapi/strapi.git
synced 2025-11-17 02:28:30 +00:00
Merge pull request #11808 from jakobsjoqvist/fix/skip-regex-validation-empty-string
Fix regex validation for empty string in non-required fields
This commit is contained in:
commit
b372f8c185
@ -338,7 +338,10 @@ const createYupSchemaAttribute = (type, validations, options) => {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'regex':
|
case 'regex':
|
||||||
schema = schema.matches(new RegExp(validationValue), errorsTrads.regex);
|
schema = schema.matches(new RegExp(validationValue), {
|
||||||
|
message: errorsTrads.regex,
|
||||||
|
excludeEmptyString: !validations.required,
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
case 'lowercase':
|
case 'lowercase':
|
||||||
if (['text', 'textarea', 'email', 'string'].includes(type)) {
|
if (['text', 'textarea', 'email', 'string'].includes(type)) {
|
||||||
|
|||||||
@ -20,6 +20,102 @@ describe('Entity validator', () => {
|
|||||||
fakeFindOne.mockReset();
|
fakeFindOne.mockReset();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('String RegExp validator', () => {
|
||||||
|
const fakeModel = {
|
||||||
|
kind: 'contentType',
|
||||||
|
modelName: 'test-model',
|
||||||
|
uid: 'test-uid',
|
||||||
|
privateAttributes: [],
|
||||||
|
options: {},
|
||||||
|
attributes: {
|
||||||
|
attrStringRequiredRegex: { type: 'string', required: true },
|
||||||
|
attrStringNotRequiredRegex: { type: 'string', required: false },
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
test('It fails the validation of an empty string for a required field', () => {
|
||||||
|
const validator = strapiUtils.validateYupSchema(
|
||||||
|
entityValidator.string(
|
||||||
|
{
|
||||||
|
attr: { type: 'string', required: true, regex: '^\\d+$' },
|
||||||
|
model: fakeModel,
|
||||||
|
updatedAttribute: {
|
||||||
|
name: 'attrStringRequiredRegex',
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
entity: null,
|
||||||
|
},
|
||||||
|
{ isDraft: false }
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return expect(validator('')).rejects.toBeInstanceOf(YupValidationError);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('It validates successfully for a string that follows regex for a required field', () => {
|
||||||
|
const value = '1234';
|
||||||
|
|
||||||
|
const validator = strapiUtils.validateYupSchema(
|
||||||
|
entityValidator.string(
|
||||||
|
{
|
||||||
|
attr: { type: 'string', required: true, regex: '^\\d+$' },
|
||||||
|
model: fakeModel,
|
||||||
|
updatedAttribute: {
|
||||||
|
name: 'attrStringRequiredRegex',
|
||||||
|
value,
|
||||||
|
},
|
||||||
|
entity: null,
|
||||||
|
},
|
||||||
|
{ isDraft: false }
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return expect(validator(value)).resolves.toEqual(value);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('It validates empty string successfully for non-required field with regex constraint', () => {
|
||||||
|
const value = '';
|
||||||
|
|
||||||
|
const validator = strapiUtils.validateYupSchema(
|
||||||
|
entityValidator.string(
|
||||||
|
{
|
||||||
|
attr: { type: 'string', required: false, regex: '^\\d+$' },
|
||||||
|
model: fakeModel,
|
||||||
|
updatedAttribute: {
|
||||||
|
name: 'attrStringNotRequiredRegex',
|
||||||
|
value,
|
||||||
|
},
|
||||||
|
entity: null,
|
||||||
|
},
|
||||||
|
{ isDraft: false }
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return expect(validator(value)).resolves.toEqual(value);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('It validates successfully for string that follows regex for a non-required field', () => {
|
||||||
|
const value = '1234';
|
||||||
|
|
||||||
|
const validator = strapiUtils.validateYupSchema(
|
||||||
|
entityValidator.string(
|
||||||
|
{
|
||||||
|
attr: { type: 'string', required: false, regex: '^\\d+$' },
|
||||||
|
model: fakeModel,
|
||||||
|
updatedAttribute: {
|
||||||
|
name: 'attrStringNotRequiredRegex',
|
||||||
|
value,
|
||||||
|
},
|
||||||
|
entity: null,
|
||||||
|
},
|
||||||
|
{ isDraft: false }
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return expect(validator(value)).resolves.toEqual(value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('String unique validator', () => {
|
describe('String unique validator', () => {
|
||||||
const fakeModel = {
|
const fakeModel = {
|
||||||
kind: 'contentType',
|
kind: 'contentType',
|
||||||
|
|||||||
@ -104,7 +104,9 @@ const addMaxFloatValidator = (validator, { attr }) =>
|
|||||||
* @returns {StringSchema}
|
* @returns {StringSchema}
|
||||||
*/
|
*/
|
||||||
const addStringRegexValidator = (validator, { attr }) =>
|
const addStringRegexValidator = (validator, { attr }) =>
|
||||||
_.isUndefined(attr.regex) ? validator : validator.matches(new RegExp(attr.regex));
|
_.isUndefined(attr.regex)
|
||||||
|
? validator
|
||||||
|
: validator.matches(new RegExp(attr.regex), { excludeEmptyString: !attr.required });
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user