codetrix
Version:
A lightweight lodash-style utility library
91 lines (90 loc) • 4.76 kB
JavaScript
import { getAllErrorMessages, getBuiltInErrorMessage, getCustomErrorMessage, getFirstErrorMessage } from "../../formUtils";
describe('Error Message Utilities', () => {
describe('getBuiltInErrorMessage', () => {
it('should return null if no errors are provided', () => {
expect(getBuiltInErrorMessage(null)).toBeNull();
});
it('should return required message', () => {
expect(getBuiltInErrorMessage({ required: true }, 'Email')).toBe('Email is required.');
});
it('should return email format message', () => {
expect(getBuiltInErrorMessage({ email: true }, 'Email')).toBe('Invalid email format.');
});
it('should return minlength message', () => {
expect(getBuiltInErrorMessage({ minlength: { requiredLength: 5 } }, 'Password')).toBe('Password must be at least 5 characters.');
});
it('should return maxlength message', () => {
expect(getBuiltInErrorMessage({ maxlength: { requiredLength: 20 } }, 'Username')).toBe('Username must be at most 20 characters.');
});
it('should return pattern message', () => {
expect(getBuiltInErrorMessage({ pattern: true }, 'Username')).toBe('Username has an invalid format.');
});
it('should return min value message', () => {
expect(getBuiltInErrorMessage({ min: 18 }, 'Age')).toBe('Age must be at least 18.');
});
it('should return max value message', () => {
expect(getBuiltInErrorMessage({ max: 60 }, 'Age')).toBe('Age must be at most 60.');
});
});
describe('getCustomErrorMessage', () => {
it('should return null if no errors are provided', () => {
expect(getCustomErrorMessage(null)).toBeNull();
});
it('should return weakPassword message', () => {
expect(getCustomErrorMessage({ weakPassword: true }, 'Password')).toBe('Password must include uppercase, lowercase, numbers, and special characters.');
});
it('should return fieldsMismatch message', () => {
expect(getCustomErrorMessage({ fieldsMismatch: true }, 'Passwords')).toBe('The fields do not match.');
});
it('should return whitespace message', () => {
expect(getCustomErrorMessage({ whitespace: true }, 'Username')).toBe('Username cannot start or end with spaces.');
});
it('should return usernameTaken message', () => {
expect(getCustomErrorMessage({ usernameTaken: true }, 'Username')).toBe('This username is already taken.');
});
it('should return emailTaken message', () => {
expect(getCustomErrorMessage({ emailTaken: true }, 'Email')).toBe('This email is already registered.');
});
it('should return null if errors is undefined or null', () => {
expect(getCustomErrorMessage(undefined)).toBeNull();
expect(getCustomErrorMessage(null)).toBeNull();
});
it('should return null if errors object has unknown keys', () => {
const unknownErrors = { randomKey: true, anotherOne: false };
expect(getCustomErrorMessage(unknownErrors, 'CustomField')).toBeNull();
});
});
describe('getFirstErrorMessage', () => {
it('should return the first built-in error if exists', () => {
const errors = { required: true, weakPassword: true };
expect(getFirstErrorMessage(errors, 'Email')).toBe('Email is required.');
});
it('should return the first custom error if no built-in exists', () => {
const errors = { usernameTaken: true };
expect(getFirstErrorMessage(errors, 'Username')).toBe('This username is already taken.');
});
it('should return null if no errors', () => {
expect(getFirstErrorMessage(null)).toBeNull();
});
});
describe('getAllErrorMessages', () => {
it('should return all applicable messages for mixed errors', () => {
const errors = {
required: true,
minlength: { requiredLength: 6 },
weakPassword: true,
usernameTaken: true,
};
const messages = getAllErrorMessages(errors, 'Password');
expect(messages).toEqual([
'Password is required.',
'Password must be at least 6 characters.',
'Password must include uppercase, lowercase, numbers, and special characters.',
'This username is already taken.',
]);
});
it('should return an empty array if no errors', () => {
expect(getAllErrorMessages(null)).toEqual([]);
});
});
});