From b17dc536fbb914c72c68f7f13f7178ad945fbd08 Mon Sep 17 00:00:00 2001 From: Dawid Jankowiak Date: Thu, 10 Oct 2024 23:04:26 +0200 Subject: [PATCH] feat(metadata-sidebar): Move AutofillContextProvider out of test-utils --- .../__tests__/MetadataInstanceEditor.test.tsx | 45 +++++++++++++------ src/test-utils/testing-library.tsx | 31 +++++-------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx index 428a17b5fc..f7aef558bc 100644 --- a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx +++ b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx @@ -1,13 +1,30 @@ import React from 'react'; -import { type MetadataTemplateInstance } from '@box/metadata-editor'; +import { AutofillContextProvider, type MetadataTemplateInstance } from '@box/metadata-editor'; import userEvent from '@testing-library/user-event'; +import { TooltipProvider } from '@box/blueprint-web'; +import { IntlProvider } from 'react-intl'; import { screen, render } from '../../../test-utils/testing-library'; import MetadataInstanceEditor, { MetadataInstanceEditorProps } from '../MetadataInstanceEditor'; +import { FeatureProvider } from '../../common/feature-checking'; const mockOnCancel = jest.fn(); const mockOnDiscardUnsavedChanges = jest.fn(); const mockSetIsUnsavedChangesModalOpen = jest.fn(); +jest.unmock('react-intl'); + +const wrapper = ({ children }) => ( + Promise.resolve([])} isAiSuggestionsFeatureEnabled> + + + {children} + + + +); + +const renderWithAutofill = element => render(element, { wrapper }); + describe('MetadataInstanceEditor', () => { const mockCustomMetadataTemplate: MetadataTemplateInstance = { id: 'template-id', @@ -62,7 +79,7 @@ describe('MetadataInstanceEditor', () => { }; test('should render MetadataInstanceForm with correct props', () => { - render(); + renderWithAutofill(); const templateHeader = screen.getByText(mockMetadataTemplateInstance.displayName); expect(templateHeader).toBeInTheDocument(); @@ -70,7 +87,7 @@ describe('MetadataInstanceEditor', () => { test('should render MetadataInstanceForm with Custom Template', () => { const props = { ...defaultProps, template: mockCustomMetadataTemplate }; - render(); + renderWithAutofill(); const templateHeader = screen.getByText('Custom Metadata'); expect(templateHeader).toBeInTheDocument(); @@ -78,7 +95,7 @@ describe('MetadataInstanceEditor', () => { test('should render UnsavedChangesModal if isUnsavedChangesModalOpen is true', async () => { const props = { ...defaultProps, isUnsavedChangesModalOpen: true }; - const { findByText } = render(); + const { findByText } = renderWithAutofill(); const unsavedChangesModal = await findByText('Unsaved Changes'); expect(unsavedChangesModal).toBeInTheDocument(); @@ -86,14 +103,14 @@ describe('MetadataInstanceEditor', () => { test('should render MetadataInstanceForm with Delete button disabled', () => { const props = { ...defaultProps, isDeleteButtonDisabled: true }; - render(); + renderWithAutofill(); const deleteButton = screen.getByRole('button', { name: 'Delete' }); expect(deleteButton).toBeDisabled(); }); test('should render MetadataInstanceForm with Delete button enabled', () => { - render(); + renderWithAutofill(); const deleteButton = screen.getByRole('button', { name: 'Delete' }); expect(deleteButton).toBeEnabled(); @@ -101,9 +118,9 @@ describe('MetadataInstanceEditor', () => { test('Should call onCancel when canceling editing', async () => { const props: MetadataInstanceEditorProps = { ...defaultProps, template: mockCustomMetadataTemplate }; - const { findByRole } = render(); - const cancelButton = await findByRole('button', { name: 'Cancel' }); + renderWithAutofill(); + const cancelButton = await screen.findByRole('button', { name: 'Cancel' }); await userEvent.click(cancelButton); expect(mockOnCancel).toHaveBeenCalled(); @@ -114,9 +131,10 @@ describe('MetadataInstanceEditor', () => { ...defaultProps, template: mockCustomMetadataTemplateWithField, }; - const { rerender, findByRole, findByText } = render(); - const input = await findByRole('textbox'); - const cancelButton = await findByRole('button', { name: 'Cancel' }); + const { rerender } = renderWithAutofill(); + + const input = await screen.findByRole('textbox'); + const cancelButton = await screen.findByRole('button', { name: 'Cancel' }); await userEvent.type(input, 'Lorem ipsum dolor.'); await userEvent.click(cancelButton); @@ -125,10 +143,11 @@ describe('MetadataInstanceEditor', () => { expect(mockSetIsUnsavedChangesModalOpen).toHaveBeenCalledWith(true); rerender(); - const unsavedChangesModal = await findByText('Unsaved Changes'); + + const unsavedChangesModal = await screen.findByText('Unsaved Changes'); expect(unsavedChangesModal).toBeInTheDocument(); - const unsavedChangesModalDiscardButton = await findByRole('button', { name: 'Discard Changes' }); + const unsavedChangesModalDiscardButton = await screen.findByRole('button', { name: 'Discard Changes' }); await userEvent.click(unsavedChangesModalDiscardButton); diff --git a/src/test-utils/testing-library.tsx b/src/test-utils/testing-library.tsx index 647adfa5d0..2e0c2e16de 100644 --- a/src/test-utils/testing-library.tsx +++ b/src/test-utils/testing-library.tsx @@ -4,36 +4,29 @@ import { render, type RenderOptions } from '@testing-library/react'; // Data Providers import { TooltipProvider } from '@box/blueprint-web'; import { IntlProvider } from 'react-intl'; -import { AutofillContextProvider } from '@box/metadata-editor'; import { FeatureProvider } from '../elements/common/feature-checking'; jest.unmock('react-intl'); -const Wrapper = ({ - children, - features = {}, - fetchSuggestions = () => Promise.resolve([]), - isAiSuggestionsFeatureEnabled = false, -}) => ( - - - - {children} - - - +const Wrapper = ({ children, features = {} }) => ( + + + {children} + + ); -type RenderConnectedOptions = Omit & { +type RenderConnectedOptions = RenderOptions & { + // Omit & { wrapperProps?: Record; }; const renderConnected = (element, options: RenderConnectedOptions = {}) => - render(element, { wrapper: props => , ...options }); + render(element, { + wrapper: options.wrapper ? options.wrapper : props => , + ...options, + }); export * from '@testing-library/react'; export { renderConnected as render };