import { expect } from 'chai'; import React from 'react'; import { nonNegativeNumber } from '..'; import callValidator from './_callValidator'; describe('nonNegativeNumber', () => { it('returns a function', () => { expect(typeof nonNegativeNumber()).to.equal('function'); }); function assertPasses(validator, element, propName) { expect(callValidator(validator, element, propName, 'nonNegativeNumber test')).to.equal(null); } function assertFails(validator, element, propName) { expect(callValidator(validator, element, propName, 'nonNegativeNumber test')).to.be.instanceOf(Error); } it('passes on nil values', () => { assertPasses(nonNegativeNumber(),
, 'a'); assertPasses(nonNegativeNumber(),
, 'a'); }); it('passes on zero', () => assertPasses( nonNegativeNumber(), (
), 'a', )); it('passes on positive numbers', () => { const validator = nonNegativeNumber(); assertPasses(validator,
, 'a'); assertPasses(validator.isRequired,
, 'a'); assertPasses(validator,
, 'a'); assertPasses(validator.isRequired,
, 'a'); }); it('fails on negative numbers', () => { const validator = nonNegativeNumber(); assertFails(validator,
, 'a'); assertFails(validator.isRequired,
, 'a'); assertFails(validator,
, 'a'); assertFails(validator.isRequired,
, 'a'); }); it('passes on positive non-integers', () => { assertPasses(nonNegativeNumber(),
, 'a'); assertPasses(nonNegativeNumber(),
, 'a'); assertPasses(nonNegativeNumber(),
, 'a'); }); it('fails on negative non-integers', () => { assertFails(nonNegativeNumber(),
, 'a'); assertFails(nonNegativeNumber(),
, 'a'); assertFails(nonNegativeNumber(),
, 'a'); }); it('fails on number edge cases', () => { assertFails(nonNegativeNumber(),
, 'a'); assertFails(nonNegativeNumber(),
, 'a'); assertFails(nonNegativeNumber(),
, 'a'); }); it('fails on negative zero', () => { assertFails(nonNegativeNumber(),
, 'a'); }); describe('isRequired', () => { it('passes when not required', () => assertPasses( nonNegativeNumber(), (
), 'a', )); it('fails when required', () => assertFails( nonNegativeNumber().isRequired, (
), 'a', )); }); });