import { expect } from 'chai'; import React from 'react'; import { stringStartsWith } from '..'; import callValidator from './_callValidator'; describe('stringStartsWith', () => { it('returns a function', () => { expect(typeof stringStartsWith(' ')).to.equal('function'); }); it('throws when given a non-string', () => { expect(() => stringStartsWith()).to.throw(TypeError); expect(() => stringStartsWith(null)).to.throw(TypeError); expect(() => stringStartsWith(true)).to.throw(TypeError); expect(() => stringStartsWith(false)).to.throw(TypeError); expect(() => stringStartsWith({})).to.throw(TypeError); expect(() => stringStartsWith([])).to.throw(TypeError); }); it('throws when given an empty string', () => { expect(() => stringStartsWith('')).to.throw(TypeError); }); function assertPasses(validator, element, propName) { expect(callValidator(validator, element, propName, '"stringStartsWith" test')).to.equal(null); } function assertFails(validator, element, propName) { expect(callValidator(validator, element, propName, '"stringStartsWith" test')).to.be.instanceOf(Error); } it('behaves when absent', () => { const validator = stringStartsWith('foo'); assertPasses(validator, (
), 'a'); assertFails(validator.isRequired, (
), 'a'); }); it('fails when not a string', () => { const validator = stringStartsWith('foo'); assertFails(validator, (
), 'a'); assertFails(validator, (
), 'a'); assertFails(validator, (
), 'a'); assertFails(validator, (
), 'a'); assertFails(validator, (
), 'a'); assertFails(validator, (
{}} />), 'a'); }); it('passes when the string starts with the requested substring', () => { const validator = stringStartsWith('foo'); assertPasses(validator, (
), 'a'); assertPasses(validator, (
), 'a'); assertPasses(validator, (
), 'a'); }); it('fails when the string does not start with the requested substring', () => { const validator = stringStartsWith('foo'); assertFails(validator, (
), 'a'); assertFails(validator, (
), 'a'); assertFails(validator, (
), 'a'); assertFails(validator, (
), 'a'); assertFails(validator.isRequired, (
), 'a'); assertFails(validator.isRequired, (
), 'a'); assertFails(validator.isRequired, (
), 'a'); assertFails(validator.isRequired, (
), 'a'); }); it('fails when the string matches the requested substring', () => { const validator = stringStartsWith('foo'); assertFails(validator, (
), 'a'); assertFails(validator.isRequired, (
), 'a'); }); });