chore: passing tests

This commit is contained in:
James
2022-03-29 18:37:02 -04:00
parent 2b1a33efba
commit 60f295ba9f
5 changed files with 50 additions and 61 deletions

View File

@@ -43,7 +43,7 @@ const sanitizeFields = (fields, validRelationships: string[]) => {
if (typeof field.validate === 'undefined') {
const defaultValidate = validations[field.type];
if (defaultValidate) {
field.validate = (val) => (defaultValidate(val, { field }));
field.validate = defaultValidate;
} else {
field.validate = () => true;
}

View File

@@ -59,7 +59,7 @@ export type ValidateOptions<T, S, F> = {
operation?: Operation
} & F;
export type Validate<T = any, S = any, F = any> = (value?: T, options?: ValidateOptions<F, S, F>) => string | true | Promise<string | true>;
export type Validate<T = any, S = any, F = any> = (value?: T, options?: ValidateOptions<F, S, Partial<F>>) => string | true | Promise<string | true>;
export type OptionObject = {
label: string

View File

@@ -6,10 +6,6 @@ const maxLengthMessage = (length: number) => `This value must be shorter than th
const requiredMessage = 'This field is required.';
let options: ValidateOptions<any, any, any> = {
operation: 'create',
field: {
type: 'text',
name: 'text',
},
data: undefined,
siblingData: undefined,
};
@@ -23,7 +19,7 @@ describe('Field Validations', () => {
});
it('should show required message', () => {
const val = undefined;
const result = text(val, { ...options, field: { ...options.field, required: true } });
const result = text(val, { ...options, required: true });
expect(result).toBe(requiredMessage);
});
it('should handle undefined', () => {
@@ -33,22 +29,22 @@ describe('Field Validations', () => {
});
it('should validate maxLength', () => {
const val = 'toolong';
const result = text(val, { ...options, field: { ...options.field, maxLength: 5 } });
const result = text(val, { ...options, maxLength: 5 });
expect(result).toBe(maxLengthMessage(5));
});
it('should validate minLength', () => {
const val = 'short';
const result = text(val, { ...options, field: { ...options.field, minLength: 10 } });
const result = text(val, { ...options, minLength: 10 });
expect(result).toBe(minLengthMessage(10));
});
it('should validate maxLength with no value', () => {
const val = undefined;
const result = text(val, { ...options, field: { ...options.field, maxLength: 5 } });
const result = text(val, { ...options, maxLength: 5 });
expect(result).toBe(true);
});
it('should validate minLength with no value', () => {
const val = undefined;
const result = text(val, { ...options, field: { ...options.field, minLength: 10 } });
const result = text(val, { ...options, minLength: 10 });
expect(result).toBe(true);
});
});
@@ -62,7 +58,7 @@ describe('Field Validations', () => {
});
it('should show required message', () => {
const val = undefined;
const result = textarea(val, { ...options, field: { ...options.field, required: true } });
const result = textarea(val, { ...options, required: true });
expect(result).toBe(requiredMessage);
});
@@ -73,29 +69,30 @@ describe('Field Validations', () => {
});
it('should validate maxLength', () => {
const val = 'toolong';
const result = textarea(val, { ...options, field: { ...options.field, maxLength: 5 } });
const result = textarea(val, { ...options, maxLength: 5 });
expect(result).toBe(maxLengthMessage(5));
});
it('should validate minLength', () => {
const val = 'short';
const result = textarea(val, { ...options, field: { ...options.field, minLength: 10 } });
const result = textarea(val, { ...options, minLength: 10 });
expect(result).toBe(minLengthMessage(10));
});
it('should validate maxLength with no value', () => {
const val = undefined;
const result = textarea(val, { ...options, field: { ...options.field, maxLength: 5 } });
const result = textarea(val, { ...options, maxLength: 5 });
expect(result).toBe(true);
});
it('should validate minLength with no value', () => {
const val = undefined;
const result = textarea(val, { ...options, field: { ...options.field, minLength: 10 } });
const result = textarea(val, { ...options, minLength: 10 });
expect(result).toBe(true);
});
});
describe('password', () => {
options.field = { type: 'password', name: 'test' };
options.type = 'password';
options.name = 'test';
it('should validate', () => {
const val = 'test';
const result = password(val, options);
@@ -103,7 +100,7 @@ describe('Field Validations', () => {
});
it('should show required message', () => {
const val = undefined;
const result = password(val, { ...options, field: { ...options.field, required: true } });
const result = password(val, { ...options, required: true });
expect(result).toBe(requiredMessage);
});
it('should handle undefined', () => {
@@ -113,60 +110,52 @@ describe('Field Validations', () => {
});
it('should validate maxLength', () => {
const val = 'toolong';
const result = password(val, { ...options, field: { ...options.field, maxLength: 5 } });
const result = password(val, { ...options, maxLength: 5 });
expect(result).toBe(maxLengthMessage(5));
});
it('should validate minLength', () => {
const val = 'short';
const result = password(val, { ...options, field: { ...options.field, minLength: 10 } });
const result = password(val, { ...options, minLength: 10 });
expect(result).toBe(minLengthMessage(10));
});
it('should validate maxLength with no value', () => {
const val = undefined;
const result = password(val, { ...options, field: { ...options.field, maxLength: 5 } });
const result = password(val, { ...options, maxLength: 5 });
expect(result).toBe(true);
});
it('should validate minLength with no value', () => {
const val = undefined;
const result = password(val, { ...options, field: { ...options.field, minLength: 10 } });
const result = password(val, { ...options, minLength: 10 });
expect(result).toBe(true);
});
});
describe('select', () => {
options.field = {
type: 'select',
options: ['one', 'two', 'three'],
};
options.type = 'select';
options.options = ['one', 'two', 'three'];
const optionsRequired = {
...options,
field: {
...options.field,
required: true,
options: [{
value: 'one',
label: 'One',
}, {
value: 'two',
label: 'two',
}, {
value: 'three',
label: 'three',
}],
},
required: true,
options: [{
value: 'one',
label: 'One',
}, {
value: 'two',
label: 'two',
}, {
value: 'three',
label: 'three',
}],
};
const optionsWithEmptyString = {
...options,
field: {
...options.field,
options: [{
value: '',
label: 'None',
}, {
value: 'option',
label: 'Option',
}],
},
options: [{
value: '',
label: 'None',
}, {
value: 'option',
label: 'Option',
}],
};
it('should allow valid input', () => {
const val = 'one';
@@ -204,35 +193,35 @@ describe('Field Validations', () => {
});
it('should prevent undefined input with required and hasMany', () => {
let val;
options.field.hasMany = true;
options.hasMany = true;
const result = select(val, optionsRequired);
expect(result).not.toStrictEqual(true);
});
it('should prevent empty array input with required and hasMany', () => {
optionsRequired.field.hasMany = true;
optionsRequired.hasMany = true;
const result = select([], optionsRequired);
expect(result).not.toStrictEqual(true);
});
it('should prevent empty string array input with required and hasMany', () => {
options.field.hasMany = true;
options.hasMany = true;
const result = select([''], optionsRequired);
expect(result).not.toStrictEqual(true);
});
it('should prevent null input with required and hasMany', () => {
const val = null;
options.field.hasMany = true;
options.hasMany = true;
const result = select(val, optionsRequired);
expect(result).not.toStrictEqual(true);
});
it('should allow valid input with option objects', () => {
const val = 'one';
options.field.hasMany = false;
options.hasMany = false;
const result = select(val, optionsRequired);
expect(result).toStrictEqual(true);
});
it('should prevent invalid input with option objects', () => {
const val = 'bad';
options.field.hasMany = false;
options.hasMany = false;
const result = select(val, optionsRequired);
expect(result).not.toStrictEqual(true);
});
@@ -243,7 +232,7 @@ describe('Field Validations', () => {
});
it('should allow empty string input with option object and required', () => {
const val = '';
optionsWithEmptyString.field.required = true;
optionsWithEmptyString.required = true;
const result = select(val, optionsWithEmptyString);
expect(result).toStrictEqual(true);
});
@@ -259,13 +248,13 @@ describe('Field Validations', () => {
});
it('should allow valid input with hasMany option objects', () => {
const val = ['one', 'three'];
optionsRequired.field.hasMany = true;
optionsRequired.hasMany = true;
const result = select(val, optionsRequired);
expect(result).toStrictEqual(true);
});
it('should prevent invalid input with hasMany option objects', () => {
const val = ['three', 'bad'];
optionsRequired.field.hasMany = true;
optionsRequired.hasMany = true;
const result = select(val, optionsRequired);
expect(result).not.toStrictEqual(true);
});