| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import {expect} from 'chai';
- import {format} from '@e22m4u/js-format';
- import {regexpValidator} from './builtin/index.js';
- import {maxLengthValidator} from './builtin/index.js';
- import {minLengthValidator} from './builtin/index.js';
- import {PropertyValidatorRegistry} from './property-validator-registry.js';
- describe('PropertyValidatorRegistry', function () {
- it('has builtin validators', function () {
- const pvr = new PropertyValidatorRegistry();
- expect(pvr['_validators']).to.be.eql({
- maxLength: maxLengthValidator,
- minLength: minLengthValidator,
- regexp: regexpValidator,
- });
- });
- describe('addValidator', function () {
- it('adds a given validator with the name', function () {
- const pvr = new PropertyValidatorRegistry();
- const myValidator = () => undefined;
- const res = pvr.addValidator('myValidator', myValidator);
- expect(res).to.be.eq(pvr);
- expect(pvr['_validators']['myValidator']).to.be.eq(myValidator);
- });
- it('requires the given name to be a non-empty string', function () {
- const pvr = new PropertyValidatorRegistry();
- const throwable = v => () => pvr.addValidator(v, () => undefined);
- const error = v =>
- format(
- 'A name of the property validator must ' +
- 'be a non-empty String, but %s was given.',
- v,
- );
- expect(throwable('')).to.throw(error('""'));
- expect(throwable(10)).to.throw(error('10'));
- expect(throwable(0)).to.throw(error('0'));
- expect(throwable(false)).to.throw(error('false'));
- expect(throwable(undefined)).to.throw(error('undefined'));
- expect(throwable(null)).to.throw(error('null'));
- expect(throwable({})).to.throw(error('Object'));
- expect(throwable([])).to.throw(error('Array'));
- expect(throwable(() => undefined)).to.throw(error('Function'));
- throwable('str')();
- });
- it('throws an error if the given name already exists', function () {
- const pvr = new PropertyValidatorRegistry();
- pvr.addValidator('test', () => undefined);
- const throwable = () => pvr.addValidator('test', () => undefined);
- expect(throwable).to.throw(
- 'The property validator "test" is already defined.',
- );
- });
- it('requires the given validator to be a function', function () {
- const pvr = new PropertyValidatorRegistry();
- const throwable = v => () => pvr.addValidator('test', v);
- const error = v =>
- format(
- 'The property validator "test" must be a Function, but %s was given.',
- v,
- );
- expect(throwable('str')).to.throw(error('"str"'));
- expect(throwable('')).to.throw(error('""'));
- expect(throwable(10)).to.throw(error('10'));
- expect(throwable(0)).to.throw(error('0'));
- expect(throwable(false)).to.throw(error('false'));
- expect(throwable(undefined)).to.throw(error('undefined'));
- expect(throwable(null)).to.throw(error('null'));
- expect(throwable({})).to.throw(error('Object'));
- expect(throwable([])).to.throw(error('Array'));
- throwable(() => undefined)();
- });
- });
- describe('hasValidator', function () {
- it('returns false for a not existing name', function () {
- const pvr = new PropertyValidatorRegistry();
- expect(pvr.hasValidator('str')).to.be.false;
- expect(pvr.hasValidator('')).to.be.false;
- expect(pvr.hasValidator(10)).to.be.false;
- expect(pvr.hasValidator(0)).to.be.false;
- expect(pvr.hasValidator(true)).to.be.false;
- expect(pvr.hasValidator(false)).to.be.false;
- expect(pvr.hasValidator(null)).to.be.false;
- expect(pvr.hasValidator(undefined)).to.be.false;
- expect(pvr.hasValidator({})).to.be.false;
- expect(pvr.hasValidator([])).to.be.false;
- expect(pvr.hasValidator(() => undefined)).to.be.false;
- });
- it('returns true for an existing name', function () {
- const pvr = new PropertyValidatorRegistry();
- expect(pvr.hasValidator('test')).to.be.false;
- pvr.addValidator('test', () => undefined);
- expect(pvr.hasValidator('test')).to.be.true;
- });
- });
- describe('getValidator', function () {
- it('returns validator by its name', function () {
- const pvr = new PropertyValidatorRegistry();
- const myValidator1 = () => undefined;
- const myValidator2 = () => undefined;
- pvr.addValidator('foo', myValidator1);
- pvr.addValidator('bar', myValidator2);
- const res1 = pvr.getValidator('foo');
- const res2 = pvr.getValidator('bar');
- expect(res1).to.be.eq(myValidator1);
- expect(res2).to.be.eq(myValidator2);
- });
- it('throws an error for a not existed name', function () {
- const pvr = new PropertyValidatorRegistry();
- const throwable = v => () => pvr.getValidator(v);
- const error = v => format('The property validator %s is not defined.', v);
- expect(throwable('str')).to.throw(error('"str"'));
- expect(throwable('')).to.throw(error('""'));
- expect(throwable(10)).to.throw(error('10'));
- expect(throwable(0)).to.throw(error('0'));
- expect(throwable(true)).to.throw(error('true'));
- expect(throwable(false)).to.throw(error('false'));
- expect(throwable(null)).to.throw(error('null'));
- expect(throwable(undefined)).to.throw(error('undefined'));
- expect(throwable({})).to.throw(error('Object'));
- expect(throwable([])).to.throw(error('Array'));
- expect(throwable(() => undefined)).to.throw(error('Function'));
- });
- });
- });
|