From 1158523fdced669051eecab660f219f661470778 Mon Sep 17 00:00:00 2001 From: Eran Machiels Date: Mon, 28 Sep 2020 23:03:38 +0200 Subject: [PATCH 1/3] WIP validation all elements --- __tests__/Area.test.tsx | 46 ++++++++++++++ __tests__/rules/max.test.tsx | 77 ++++++++++++----------- __tests__/rules/min.test.tsx | 82 +++++++++++++------------ __tests__/rules/required.test.tsx | 53 ++++++---------- __tests__/utils/dom.test.ts | 37 +++++++++++ src/Rule.ts | 3 +- src/Validator.ts | 11 ++-- src/ValidatorContext.ts | 3 +- src/components/ValidatorArea.tsx | 26 +++++--- src/components/ValidatorProvider.tsx | 17 ++--- src/rules/IncorrectArgumentTypeError.ts | 1 + src/rules/max.ts | 34 ++++++---- src/rules/min.ts | 34 ++++++---- src/rules/required.ts | 22 +++---- src/utils/dom.ts | 50 +++++++++++++++ src/utils/utils.ts | 14 ++++- 16 files changed, 329 insertions(+), 181 deletions(-) create mode 100644 __tests__/utils/dom.test.ts create mode 100644 src/rules/IncorrectArgumentTypeError.ts create mode 100644 src/utils/dom.ts diff --git a/__tests__/Area.test.tsx b/__tests__/Area.test.tsx index 814840a..e37ee7b 100644 --- a/__tests__/Area.test.tsx +++ b/__tests__/Area.test.tsx @@ -91,6 +91,17 @@ describe('test ValidatorProvider', () => { expect(area.state().errors[0]).toBe('Not passed'); }); + it('should not apply rules on blur when non-blurrable element', () => { + const area = mount( + + + + ); + + area.find('canvas').at(0).simulate('blur'); + expect(area.state().errors.length).toBe(0); + }); + it('should render error when area dirty', async () => { const area = mount( @@ -239,4 +250,39 @@ describe('test ValidatorProvider', () => { area.find('input').simulate('blur'); expect(mockFn).toBeCalled(); }); + + it('should get refs by type', async () => { + Validator.extend('test_types', (validator: Validator) => ({ + passed(): boolean { + return validator.refs(undefined, HTMLInputElement).length === 1 + && validator.refs('test1', HTMLTextAreaElement).length === 1 + && validator.refs('test1').length === 1 + && validator.refs('test1', HTMLProgressElement).length === 0; + }, + message(): string { + return 'test'; + } + })) + const mockFn = jest.fn(); + + const provider = mount( + + {({ validate }: ProviderScope) => ( + <> + +