UNPKG

n4s

Version:

typed schema validation version of enforce

126 lines (114 loc) 3.98 kB
import { describe, expect, it } from 'vitest'; import { enforce } from '../../../n4s'; describe('stringRules', () => { it('should return true when all rules pass', () => { expect(enforce.isString().endsWith('log').run('catalog').pass).toBe(true); expect(enforce.isString().startsWith('cat').run('catalog').pass).toBe(true); expect( enforce.isString().startsWith('cat').endsWith('log').run('catalog').pass, ).toBe(true); }); it('should return false when any rule fails', () => { expect(enforce.isString().endsWith('log').run('cat').pass).toBe(false); expect(enforce.isString().startsWith('dog').run('catalog').pass).toBe( false, ); expect( enforce.isString().startsWith('cat').endsWith('dog').run('catalog').pass, ).toBe(false); }); it('should handle multiple rules', () => { expect(enforce.isString().minLength(3).maxLength(5).run('four').pass).toBe( true, ); expect( enforce.isString().minLength(3).maxLength(5).run('more_than_five').pass, ).toBe(false); expect(enforce.isString().minLength(3).maxLength(5).run('a').pass).toBe( false, ); expect(enforce.isString().lengthEquals(4).run('four').pass).toBe(true); expect(enforce.isString().lengthNotEquals(4).run('four').pass).toBe(false); expect(enforce.isString().longerThan(3).run('four').pass).toBe(true); expect(enforce.isString().longerThanOrEquals(4).run('four').pass).toBe( true, ); expect(enforce.isString().shorterThan(5).run('four').pass).toBe(true); expect(enforce.isString().shorterThanOrEquals(4).run('four').pass).toBe( true, ); }); it('should handle regex matching', () => { expect( enforce .isString() .matches(/^[a-z]+$/) .run('abc').pass, ).toBe(true); expect( enforce .isString() .matches(/^[a-z]+$/) .run('ab1c').pass, ).toBe(false); expect(enforce.isString().matches('[a-z]+').run('abc').pass).toBe(true); expect(enforce.isString().notMatches('[0-9]+').run('abc').pass).toBe(true); }); it('should handle isBlank / isNotBlank for strings', () => { expect(enforce.isString().isBlank().run(' ').pass).toBe(true); expect(enforce.isString().isBlank().run('').pass).toBe(true); expect(enforce.isString().isBlank().run(' a ').pass).toBe(false); expect(enforce.isString().isNotBlank().run('a').pass).toBe(true); expect(enforce.isString().isNotBlank().run(' ').pass).toBe(false); }); it('should handle doesNotStartWith / doesNotEndWith', () => { expect(enforce.isString().doesNotStartWith('dog').run('catalog').pass).toBe( true, ); expect(enforce.isString().doesNotStartWith('cat').run('catalog').pass).toBe( false, ); expect(enforce.isString().doesNotEndWith('dog').run('catalog').pass).toBe( true, ); expect(enforce.isString().doesNotEndWith('log').run('catalog').pass).toBe( false, ); }); it('inside / notInside with string and array containers', () => { // string container expect(enforce.isString().inside('hello world').run('world').pass).toBe( true, ); expect(enforce.isString().notInside('hello world').run('mars').pass).toBe( true, ); // array-of-strings container expect(enforce.isString().inside(['red', 'green']).run('red').pass).toBe( true, ); expect( enforce.isString().notInside(['red', 'green']).run('blue').pass, ).toBe(true); }); it('should handle complex chaining', () => { expect( enforce .isString() .minLength(5) .maxLength(10) .startsWith('start') .endsWith('end') .run('start-middle-end').pass, ).toBe(false); expect( enforce .isString() .minLength(5) .maxLength(20) .startsWith('start') .endsWith('end') .run('start-middle-end').pass, ).toBe(true); }); });