import { expect } from 'chai'; import React from 'react'; import { booleanSome } from '..'; import callValidator from './_callValidator'; describe('booleanSome', () => { it('throws when given non-strings', () => { expect(() => booleanSome()).to.throw(TypeError); expect(() => booleanSome(null)).to.throw(TypeError); expect(() => booleanSome({})).to.throw(TypeError); expect(() => booleanSome([])).to.throw(TypeError); }); it('throws when given 0 props', () => { expect(() => booleanSome()).to.throw(TypeError); }); it('returns a function', () => { expect(typeof booleanSome('a', 'b')).to.equal('function'); }); function assertPasses(validator, element, propName) { expect(callValidator(validator, element, propName)).to.equal(null); } function assertFails(validator, element, propName) { expect(callValidator(validator, element, propName)).to.be.instanceOf(Error); } it('passes with all true', () => { const validator = booleanSome('a', 'b'); assertPasses(validator, (
), 'a'); assertPasses(validator, (), 'b'); assertPasses(validator.isRequired, (), 'a'); assertPasses(validator.isRequired, (), 'b'); }); it('behaves with one true', () => { const validator = booleanSome('a', 'b'); assertPasses(validator, (), 'a'); assertPasses(validator, (), 'b'); assertPasses(validator, (), 'a'); assertPasses(validator, (), 'b'); assertPasses(validator.isRequired, (), 'a'); assertFails(validator.isRequired, (), 'b'); assertPasses(validator.isRequired, (), 'b'); assertFails(validator.isRequired, (), 'a'); }); it('passes with one false', () => { const validator = booleanSome('a', 'b'); assertPasses(validator, (), 'a'); assertPasses(validator, (), 'b'); assertPasses(validator, (), 'a'); assertPasses(validator, (), 'b'); assertPasses(validator.isRequired, (), 'a'); assertPasses(validator.isRequired, (), 'b'); assertPasses(validator.isRequired, (), 'a'); assertPasses(validator.isRequired, (), 'b'); }); it('fails with all false', () => { const validator = booleanSome('a', 'b'); assertFails(validator, (), 'a'); assertFails(validator, (), 'b'); assertFails(validator.isRequired, (), 'a'); assertFails(validator.isRequired, (), 'a'); assertFails(validator.isRequired, (), 'b'); assertFails(validator.isRequired, (), 'b'); }); it('passes when one of the boolean props is null/undefined', () => { const prop1 = 'foo'; const prop2 = 'bar'; const validator = booleanSome(prop1, prop2); assertPasses(validator, (), prop1); assertPasses(validator, (), prop2); assertPasses(validator, (), prop1); assertPasses(validator, (), prop2); }); it('fails when required, and one of the exclusive props is null/undefined', () => { const prop1 = 'foo'; const prop2 = 'bar'; const validator = booleanSome(prop1, prop2).isRequired; assertFails(validator, (), prop2); assertFails(validator, (), prop1); assertFails(validator, (), prop2); assertFails(validator, (), prop1); }); });