From 8a058cd116610d202e541fb3ed89337e5020c2d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 15 Feb 2024 08:56:01 +0100 Subject: [PATCH 1/8] moved QuickForm tests to RTL suites --- packages/uniforms/__suites__/QuickForm.tsx | 78 ++++++++++++++++++++-- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/packages/uniforms/__suites__/QuickForm.tsx b/packages/uniforms/__suites__/QuickForm.tsx index a13b0a6ef..dcc4994c8 100644 --- a/packages/uniforms/__suites__/QuickForm.tsx +++ b/packages/uniforms/__suites__/QuickForm.tsx @@ -1,13 +1,79 @@ -import { render } from '@testing-library/react'; -import React, { ComponentType } from 'react'; +import { render, screen } from '@testing-library/react'; +import React from 'react'; +import type { QuickForm as QuickFormType } from 'uniforms'; import { ZodBridge } from 'uniforms-bridge-zod'; import z from 'zod'; -export function testQuickForm(QuickForm: ComponentType) { +export function testQuickForm(QuickForm: QuickFormType) { + // @ts-expect-error QuickForm is not a valid Component. + class TestForm extends QuickForm { + // eslint-disable-next-line react/display-name + getAutoField = () => () => ; + // eslint-disable-next-line react/display-name + getErrorsField = () => () => ; + // eslint-disable-next-line react/display-name + getSubmitField = () => () => ; + } + + const schema = z.object({ + a: z.string(), + b: z.string(), + c: z.string(), + }); + const bridge = new ZodBridge({ schema }); + test(' - renders', () => { - const schema = z.object({}); - const bridge = new ZodBridge({ schema }); - const screen = render(); + render(); expect(screen.getByTestId('form')).toBeInTheDocument(); }); + + test(' - when rendered with custom fields, renders `AutoField` for each field', () => { + const { container } = render(); + + expect(container.getElementsByClassName('auto').length).toBe(3); + }); + + test(' - when rendered with custom fields, renders `ErrorField`', () => { + const { container } = render(); + + expect(container.getElementsByClassName('errors').length).toBe(1); + }); + + test(' - when rendered with custom fields, renders `SubmitField`', () => { + const { container } = render(); + + expect(container.getElementsByClassName('submit').length).toBe(1); + }); + + test(' - when rendered with custom fields in `props`, renders `ErrorsField`', () => { + const { container } = render( + } + />, + ); + + expect(container.getElementsByClassName('errorsOverride').length).toBe(1); + }); + + test(' - when rendered with custom fields in `props`, renders `SubmitField`', () => { + const { container } = render( + } + />, + ); + + expect(container.getElementsByClassName('submitOverride').length).toBe(1); + }); + + test(' - when rendered with children, renders children', () => { + const { container } = render( + +
+ , + ); + + expect(container.getElementsByTagName('div').length).toBe(1); + }); } From 96b87a29eda67aa888260bbccf6a43181b1b522c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 15 Feb 2024 08:57:29 +0100 Subject: [PATCH 2/8] removed enzyme QuickForm tests --- packages/uniforms/__tests__/QuickForm.tsx | 82 ----------------------- 1 file changed, 82 deletions(-) delete mode 100644 packages/uniforms/__tests__/QuickForm.tsx diff --git a/packages/uniforms/__tests__/QuickForm.tsx b/packages/uniforms/__tests__/QuickForm.tsx deleted file mode 100644 index b1a0cb6cd..000000000 --- a/packages/uniforms/__tests__/QuickForm.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import SimpleSchema from 'simpl-schema'; -import { QuickForm } from 'uniforms'; -import { SimpleSchema2Bridge } from 'uniforms-bridge-simple-schema-2'; - -import mount from './_mount'; - -describe('QuickForm', () => { - // @ts-expect-error QuickForm is not a valid Component. - class TestForm extends QuickForm { - // eslint-disable-next-line react/display-name - getAutoField = () => () => ; - // eslint-disable-next-line react/display-name - getErrorsField = () => () => ; - // eslint-disable-next-line react/display-name - getSubmitField = () => () => ; - } - - const schema = new SimpleSchema2Bridge({ - schema: new SimpleSchema({ - a: String, - b: String, - c: String, - }), - }); - - describe('when rendered with custom fields', () => { - it('renders `AutoField` for each field', () => { - const wrapper = mount(); - - expect(wrapper.find('.auto').length).toBeGreaterThan(0); - }); - - it('renders `ErrorsField`', () => { - const wrapper = mount(); - - expect(wrapper.find('.errors').length).toBeGreaterThan(0); - }); - - it('renders `SubmitField`', () => { - const wrapper = mount(); - - expect(wrapper.find('.submit').length).toBeGreaterThan(0); - }); - }); - - describe('when rendered with custom fields in `props`', () => { - it('renders `ErrorsField`', () => { - const wrapper = mount( - } - />, - ); - - expect(wrapper.find('.errorsOverride').length).toBeGreaterThan(0); - }); - - it('renders `SubmitField`', () => { - const wrapper = mount( - } - />, - ); - - expect(wrapper.find('.submitOverride').length).toBeGreaterThan(0); - }); - }); - - describe('when rendered with children', () => { - const wrapper = mount( - -
- , - ); - - it('renders children', () => { - expect(wrapper.find('div')).toHaveLength(1); - }); - }); -}); From 322955737e3e38f54f2f21cfd7144a110f56d3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 15 Feb 2024 08:58:28 +0100 Subject: [PATCH 3/8] refactor --- packages/uniforms/__suites__/QuickForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/uniforms/__suites__/QuickForm.tsx b/packages/uniforms/__suites__/QuickForm.tsx index dcc4994c8..3307c34b1 100644 --- a/packages/uniforms/__suites__/QuickForm.tsx +++ b/packages/uniforms/__suites__/QuickForm.tsx @@ -67,7 +67,7 @@ export function testQuickForm(QuickForm: QuickFormType) { expect(container.getElementsByClassName('submitOverride').length).toBe(1); }); - test(' - when rendered with children, renders children', () => { + test(' - renders children', () => { const { container } = render(
From 81bf5162d50c3508ac954be9795451310b3cc91c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 15 Feb 2024 09:03:59 +0100 Subject: [PATCH 4/8] refactor --- packages/uniforms/__suites__/QuickForm.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/uniforms/__suites__/QuickForm.tsx b/packages/uniforms/__suites__/QuickForm.tsx index 3307c34b1..335813bfc 100644 --- a/packages/uniforms/__suites__/QuickForm.tsx +++ b/packages/uniforms/__suites__/QuickForm.tsx @@ -1,4 +1,4 @@ -import { render, screen } from '@testing-library/react'; +import { render } from '@testing-library/react'; import React from 'react'; import type { QuickForm as QuickFormType } from 'uniforms'; import { ZodBridge } from 'uniforms-bridge-zod'; @@ -23,8 +23,8 @@ export function testQuickForm(QuickForm: QuickFormType) { const bridge = new ZodBridge({ schema }); test(' - renders', () => { - render(); - expect(screen.getByTestId('form')).toBeInTheDocument(); + const { container } = render(); + expect(container.getElementsByTagName('form').length).toBe(1); }); test(' - when rendered with custom fields, renders `AutoField` for each field', () => { From 15efc84acc4cef148d596dbefdc20ac4587501b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Thu, 15 Feb 2024 10:18:29 +0100 Subject: [PATCH 5/8] refactor --- packages/uniforms/__suites__/QuickForm.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/uniforms/__suites__/QuickForm.tsx b/packages/uniforms/__suites__/QuickForm.tsx index 335813bfc..b48dcba3a 100644 --- a/packages/uniforms/__suites__/QuickForm.tsx +++ b/packages/uniforms/__suites__/QuickForm.tsx @@ -24,25 +24,25 @@ export function testQuickForm(QuickForm: QuickFormType) { test(' - renders', () => { const { container } = render(); - expect(container.getElementsByTagName('form').length).toBe(1); + expect(container.getElementsByTagName('form')).toHaveLength(1); }); test(' - when rendered with custom fields, renders `AutoField` for each field', () => { const { container } = render(); - expect(container.getElementsByClassName('auto').length).toBe(3); + expect(container.getElementsByClassName('auto')).toHaveLength(3); }); test(' - when rendered with custom fields, renders `ErrorField`', () => { const { container } = render(); - expect(container.getElementsByClassName('errors').length).toBe(1); + expect(container.getElementsByClassName('errors')).toHaveLength(1); }); test(' - when rendered with custom fields, renders `SubmitField`', () => { const { container } = render(); - expect(container.getElementsByClassName('submit').length).toBe(1); + expect(container.getElementsByClassName('submit')).toHaveLength(1); }); test(' - when rendered with custom fields in `props`, renders `ErrorsField`', () => { @@ -53,7 +53,7 @@ export function testQuickForm(QuickForm: QuickFormType) { />, ); - expect(container.getElementsByClassName('errorsOverride').length).toBe(1); + expect(container.getElementsByClassName('errorsOverride')).toHaveLength(1); }); test(' - when rendered with custom fields in `props`, renders `SubmitField`', () => { @@ -64,7 +64,7 @@ export function testQuickForm(QuickForm: QuickFormType) { />, ); - expect(container.getElementsByClassName('submitOverride').length).toBe(1); + expect(container.getElementsByClassName('submitOverride')).toHaveLength(1); }); test(' - renders children', () => { @@ -74,6 +74,6 @@ export function testQuickForm(QuickForm: QuickFormType) { , ); - expect(container.getElementsByTagName('div').length).toBe(1); + expect(container.getElementsByTagName('div')).toHaveLength(1); }); } From 5031c5b2411621b675803a0ed62706a840f14957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Fri, 16 Feb 2024 09:37:49 +0100 Subject: [PATCH 6/8] refactor to use mocked functions --- packages/uniforms/__suites__/QuickForm.tsx | 58 +++++++++++++--------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/packages/uniforms/__suites__/QuickForm.tsx b/packages/uniforms/__suites__/QuickForm.tsx index b48dcba3a..9bb2e5f47 100644 --- a/packages/uniforms/__suites__/QuickForm.tsx +++ b/packages/uniforms/__suites__/QuickForm.tsx @@ -5,14 +5,18 @@ import { ZodBridge } from 'uniforms-bridge-zod'; import z from 'zod'; export function testQuickForm(QuickForm: QuickFormType) { + const AutoField = jest.fn(() =>
) as any; + const ErrorsField = jest.fn(() =>
) as any; + const SubmitField = jest.fn(() =>
) as any; + // @ts-expect-error QuickForm is not a valid Component. class TestForm extends QuickForm { // eslint-disable-next-line react/display-name - getAutoField = () => () => ; + getAutoField = () => () => ; // eslint-disable-next-line react/display-name - getErrorsField = () => () => ; + getErrorsField = () => () => ; // eslint-disable-next-line react/display-name - getSubmitField = () => () => ; + getSubmitField = () => () => ; } const schema = z.object({ @@ -22,58 +26,64 @@ export function testQuickForm(QuickForm: QuickFormType) { }); const bridge = new ZodBridge({ schema }); + afterEach(() => { + AutoField.mockClear(); + ErrorsField.mockClear(); + SubmitField.mockClear(); + }); + test(' - renders', () => { const { container } = render(); expect(container.getElementsByTagName('form')).toHaveLength(1); }); test(' - when rendered with custom fields, renders `AutoField` for each field', () => { - const { container } = render(); + render(); - expect(container.getElementsByClassName('auto')).toHaveLength(3); + expect(AutoField).toHaveBeenCalledTimes(3); }); test(' - when rendered with custom fields, renders `ErrorField`', () => { - const { container } = render(); + render(); - expect(container.getElementsByClassName('errors')).toHaveLength(1); + expect(ErrorsField).toHaveBeenCalledTimes(1); }); test(' - when rendered with custom fields, renders `SubmitField`', () => { - const { container } = render(); + render(); - expect(container.getElementsByClassName('submit')).toHaveLength(1); + expect(SubmitField).toHaveBeenCalledTimes(1); }); test(' - when rendered with custom fields in `props`, renders `ErrorsField`', () => { - const { container } = render( - } - />, + const ErrorsOverrideField = jest.fn(() =>
) as React.FC; + + render( + } />, ); - expect(container.getElementsByClassName('errorsOverride')).toHaveLength(1); + expect(ErrorsOverrideField).toHaveBeenCalledTimes(1); }); test(' - when rendered with custom fields in `props`, renders `SubmitField`', () => { - const { container } = render( - } - />, + const SubmitOverrideField = jest.fn(() =>
) as React.FC; + + render( + } />, ); - expect(container.getElementsByClassName('submitOverride')).toHaveLength(1); + expect(SubmitOverrideField).toHaveBeenCalledTimes(1); }); test(' - renders children', () => { - const { container } = render( + const Child = jest.fn(() =>
) as React.FC; + + render( -
+ , ); - expect(container.getElementsByTagName('div')).toHaveLength(1); + expect(Child).toHaveBeenCalledTimes(1); }); } From 9408463c380181a7dc8014fbc9eac2c1296984a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Fri, 16 Feb 2024 13:22:56 +0100 Subject: [PATCH 7/8] moved test from suites to tests --- packages/uniforms/__suites__/QuickForm.tsx | 77 +---------------- packages/uniforms/__tests__/QuickForm.tsx | 96 ++++++++++++++++++++++ 2 files changed, 97 insertions(+), 76 deletions(-) create mode 100644 packages/uniforms/__tests__/QuickForm.tsx diff --git a/packages/uniforms/__suites__/QuickForm.tsx b/packages/uniforms/__suites__/QuickForm.tsx index 9bb2e5f47..34d799360 100644 --- a/packages/uniforms/__suites__/QuickForm.tsx +++ b/packages/uniforms/__suites__/QuickForm.tsx @@ -5,85 +5,10 @@ import { ZodBridge } from 'uniforms-bridge-zod'; import z from 'zod'; export function testQuickForm(QuickForm: QuickFormType) { - const AutoField = jest.fn(() =>
) as any; - const ErrorsField = jest.fn(() =>
) as any; - const SubmitField = jest.fn(() =>
) as any; - - // @ts-expect-error QuickForm is not a valid Component. - class TestForm extends QuickForm { - // eslint-disable-next-line react/display-name - getAutoField = () => () => ; - // eslint-disable-next-line react/display-name - getErrorsField = () => () => ; - // eslint-disable-next-line react/display-name - getSubmitField = () => () => ; - } - - const schema = z.object({ - a: z.string(), - b: z.string(), - c: z.string(), - }); - const bridge = new ZodBridge({ schema }); - - afterEach(() => { - AutoField.mockClear(); - ErrorsField.mockClear(); - SubmitField.mockClear(); - }); + const bridge = new ZodBridge({ schema: z.object({}) }); test(' - renders', () => { const { container } = render(); expect(container.getElementsByTagName('form')).toHaveLength(1); }); - - test(' - when rendered with custom fields, renders `AutoField` for each field', () => { - render(); - - expect(AutoField).toHaveBeenCalledTimes(3); - }); - - test(' - when rendered with custom fields, renders `ErrorField`', () => { - render(); - - expect(ErrorsField).toHaveBeenCalledTimes(1); - }); - - test(' - when rendered with custom fields, renders `SubmitField`', () => { - render(); - - expect(SubmitField).toHaveBeenCalledTimes(1); - }); - - test(' - when rendered with custom fields in `props`, renders `ErrorsField`', () => { - const ErrorsOverrideField = jest.fn(() =>
) as React.FC; - - render( - } />, - ); - - expect(ErrorsOverrideField).toHaveBeenCalledTimes(1); - }); - - test(' - when rendered with custom fields in `props`, renders `SubmitField`', () => { - const SubmitOverrideField = jest.fn(() =>
) as React.FC; - - render( - } />, - ); - - expect(SubmitOverrideField).toHaveBeenCalledTimes(1); - }); - - test(' - renders children', () => { - const Child = jest.fn(() =>
) as React.FC; - - render( - - - , - ); - - expect(Child).toHaveBeenCalledTimes(1); - }); } diff --git a/packages/uniforms/__tests__/QuickForm.tsx b/packages/uniforms/__tests__/QuickForm.tsx new file mode 100644 index 000000000..f0b9ff76d --- /dev/null +++ b/packages/uniforms/__tests__/QuickForm.tsx @@ -0,0 +1,96 @@ +import { render } from '@testing-library/react'; +import React from 'react'; +import { QuickForm } from 'uniforms'; +import { ZodBridge } from 'uniforms-bridge-zod'; +import { z } from 'zod'; + +describe('QuickForm', () => { + const AutoField = jest.fn(() => null) as any; + const ErrorsField = jest.fn(() => null) as any; + const SubmitField = jest.fn(() => null) as any; + + // @ts-expect-error QuickForm is not a valid Component. + class TestForm extends QuickForm { + // eslint-disable-next-line react/display-name + getAutoField = () => () => ; + // eslint-disable-next-line react/display-name + getErrorsField = () => () => ; + // eslint-disable-next-line react/display-name + getSubmitField = () => () => ; + } + + const schema = z.object({ + a: z.string(), + b: z.string(), + c: z.string(), + }); + const bridge = new ZodBridge({ schema }); + + afterEach(() => { + AutoField.mockClear(); + ErrorsField.mockClear(); + SubmitField.mockClear(); + }); + + describe('when rendered with custom fields', () => { + it('renders `AutoField` for each field', () => { + render(); + + expect(AutoField).toHaveBeenCalledTimes(3); + }); + + it('renders `ErrorsField`', () => { + render(); + + expect(ErrorsField).toHaveBeenCalledTimes(1); + }); + + it('renders `SubmitField`', () => { + render(); + + expect(SubmitField).toHaveBeenCalledTimes(1); + }); + }); + + describe('when rendered with custom fields in `props`', () => { + it('renders `ErrorsField`', () => { + const ErrorsOverrideField = jest.fn(() =>
) as React.FC; + + render( + } + />, + ); + + expect(ErrorsOverrideField).toHaveBeenCalledTimes(1); + }); + + it('renders `SubmitField`', () => { + const SubmitOverrideField = jest.fn(() =>
) as React.FC; + + render( + } + />, + ); + + expect(SubmitOverrideField).toHaveBeenCalledTimes(1); + }); + }); + + describe('when rendered with children', () => { + it('renders children', () => { + const Child = jest.fn(() =>
) as React.FC; + + render( + + + , + ); + + expect(Child).toHaveBeenCalledTimes(1); + }); + }); +}); From 44833e78990057fdae86f13f01d104b883f3560f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Po=C5=9Bpiech?= Date: Fri, 16 Feb 2024 13:51:41 +0100 Subject: [PATCH 8/8] refactor --- packages/uniforms/__suites__/QuickForm.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/uniforms/__suites__/QuickForm.tsx b/packages/uniforms/__suites__/QuickForm.tsx index 34d799360..c0f17e639 100644 --- a/packages/uniforms/__suites__/QuickForm.tsx +++ b/packages/uniforms/__suites__/QuickForm.tsx @@ -1,10 +1,9 @@ import { render } from '@testing-library/react'; -import React from 'react'; -import type { QuickForm as QuickFormType } from 'uniforms'; +import React, { ComponentType } from 'react'; import { ZodBridge } from 'uniforms-bridge-zod'; import z from 'zod'; -export function testQuickForm(QuickForm: QuickFormType) { +export function testQuickForm(QuickForm: ComponentType) { const bridge = new ZodBridge({ schema: z.object({}) }); test(' - renders', () => {