From d65c6e618b8399bc0275d9b43a4d2267f369cf9e Mon Sep 17 00:00:00 2001 From: Konstantinos Familonidis Date: Sun, 28 Jun 2026 13:36:44 +0300 Subject: [PATCH] Fixes #39491: Replace enzyme test in FormField with RTL --- .../common/forms/__tests__/FormField.test.js | 58 +++- .../__snapshots__/FormField.test.js.snap | 285 ------------------ 2 files changed, 46 insertions(+), 297 deletions(-) delete mode 100644 webpack/assets/javascripts/react_app/components/common/forms/__tests__/__snapshots__/FormField.test.js.snap diff --git a/webpack/assets/javascripts/react_app/components/common/forms/__tests__/FormField.test.js b/webpack/assets/javascripts/react_app/components/common/forms/__tests__/FormField.test.js index 15dcbe4d79..7c9855f949 100644 --- a/webpack/assets/javascripts/react_app/components/common/forms/__tests__/FormField.test.js +++ b/webpack/assets/javascripts/react_app/components/common/forms/__tests__/FormField.test.js @@ -1,4 +1,6 @@ -import { testComponentSnapshotsWithFixtures } from '../../../../common/testHelpers'; +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; import { dateTimeWithErrorProps, textFieldWithHelpProps, @@ -6,18 +8,50 @@ import { } from '../FormField.fixtures'; import FormField from '../FormField'; -const fixtures = { - 'renders text input': { type: 'text', name: 'a' }, - 'renders Date input': { type: 'date', name: 'a' }, - 'renders Time input': { type: 'time', name: 'a' }, - 'renders DateTime input': { type: 'dateTime', name: 'a' }, - 'renders text complex options and help': textFieldWithHelpProps, - 'renders DateTime complex options and error': dateTimeWithErrorProps, - 'renders AutoComplete': { type: 'autocomplete', formAutocompleteDataProps }, -}; +// Stub InputFactory so FormField's own wiring (label, type, validation) can be +// asserted without rendering each concrete input (date pickers, autocomplete…). +jest.mock('../InputFactory', () => props => ( +
+)); + +const inputFactory = () => screen.getByTestId('input-factory'); describe('FormField', () => { - describe('rendering', () => { - testComponentSnapshotsWithFixtures(FormField, fixtures); + it.each([ + ['text', 'a'], + ['date', 'a'], + ['time', 'a'], + ['dateTime', 'a'], + ])('renders an InputFactory for type %s', (type, name) => { + render(); + + expect(inputFactory()).toHaveAttribute('data-type', type); + expect(inputFactory()).toHaveAttribute('data-name', name); + }); + + it('renders the label and label help', () => { + const { container } = render(); + + expect(screen.getByText('textField')).toBeInTheDocument(); + expect(container.querySelector('.field-help')).toBeInTheDocument(); + expect(inputFactory()).toHaveAttribute('data-type', 'text'); + }); + + it('renders the error message and sets the error validation state', () => { + const { container } = render(); + + expect(screen.getByText('DateTime with error')).toBeInTheDocument(); + expect(screen.getByText('can not be in the past')).toBeInTheDocument(); + expect(container.querySelector('.form-group')).toHaveClass('has-error'); + }); + + it('renders an autocomplete InputFactory', () => { + render(); + + expect(inputFactory()).toHaveAttribute('data-type', 'autocomplete'); }); }); diff --git a/webpack/assets/javascripts/react_app/components/common/forms/__tests__/__snapshots__/FormField.test.js.snap b/webpack/assets/javascripts/react_app/components/common/forms/__tests__/__snapshots__/FormField.test.js.snap deleted file mode 100644 index 21ebc24cf6..0000000000 --- a/webpack/assets/javascripts/react_app/components/common/forms/__tests__/__snapshots__/FormField.test.js.snap +++ /dev/null @@ -1,285 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`FormField rendering renders AutoComplete 1`] = ` - - - - - - - -`; - -exports[`FormField rendering renders Date input 1`] = ` - - - - - - - -`; - -exports[`FormField rendering renders DateTime complex options and error 1`] = ` - - - DateTime with error - - - - - - -`; - -exports[`FormField rendering renders DateTime input 1`] = ` - - - - - - - -`; - -exports[`FormField rendering renders Time input 1`] = ` - - - - - - - -`; - -exports[`FormField rendering renders text complex options and help 1`] = ` - - - textField - - This is more helpful text - - } - placement="right" - rootClose={true} - /> - - - - - - -`; - -exports[`FormField rendering renders text input 1`] = ` - - - - - - - -`;