From 69402b7b156c68bccec947797b17ce2e078eed35 Mon Sep 17 00:00:00 2001 From: Tyler Gauntlett Date: Wed, 9 Oct 2024 16:53:33 -0400 Subject: [PATCH 1/8] feat(taxonomy): added metadata taxonomy field support --- src/common/types/metadata.js | 4 +- .../MetadataInstanceEditor.tsx | 12 ++ .../MetadataSidebarRedesign.tsx | 11 ++ .../__tests__/MetadataInstanceEditor.test.tsx | 1 + .../__tests__/metadataTaxonomyFetcher.test.ts | 122 ++++++++++++++++++ .../fetchers/metadataTaxonomyFetcher.ts | 26 ++++ 6 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts create mode 100644 src/elements/content-sidebar/fetchers/metadataTaxonomyFetcher.ts diff --git a/src/common/types/metadata.js b/src/common/types/metadata.js index 6e21331ff4..4eb6314559 100644 --- a/src/common/types/metadata.js +++ b/src/common/types/metadata.js @@ -5,6 +5,7 @@ import { FIELD_TYPE_FLOAT, FIELD_TYPE_MULTISELECT, FIELD_TYPE_STRING, + FIELD_TYPE_TAXONOMY, } from '../../features/metadata-instance-fields/constants'; import type { SkillCards } from './skills'; @@ -13,7 +14,8 @@ type MetadataFieldType = | typeof FIELD_TYPE_ENUM | typeof FIELD_TYPE_FLOAT | typeof FIELD_TYPE_MULTISELECT - | typeof FIELD_TYPE_STRING; + | typeof FIELD_TYPE_STRING + | typeof FIELD_TYPE_TAXONOMY; type MetadataTemplateFieldOption = { id?: string, diff --git a/src/elements/content-sidebar/MetadataInstanceEditor.tsx b/src/elements/content-sidebar/MetadataInstanceEditor.tsx index f801d1e1ad..3bd26d603c 100644 --- a/src/elements/content-sidebar/MetadataInstanceEditor.tsx +++ b/src/elements/content-sidebar/MetadataInstanceEditor.tsx @@ -4,6 +4,9 @@ import { type FormValues, type JSONPatchOperations, type MetadataTemplateInstance, + type BaseOptionType, + type FetcherResponse, + type PaginationQueryInput, } from '@box/metadata-editor'; import React from 'react'; @@ -17,6 +20,13 @@ export interface MetadataInstanceEditorProps { onSubmit: (values: FormValues, operations: JSONPatchOperations) => Promise; setIsUnsavedChangesModalOpen: (isUnsavedChangesModalOpen: boolean) => void; onDiscardUnsavedChanges: () => void; + taxonomyOptionsFetcher: ( + scope: string, + templateKey: string, + fieldKey: string, + level: number, + options: PaginationQueryInput, + ) => Promise>; } const MetadataInstanceEditor: React.FC = ({ @@ -26,6 +36,7 @@ const MetadataInstanceEditor: React.FC = ({ onDelete, onSubmit, setIsUnsavedChangesModalOpen, + taxonomyOptionsFetcher, template, onCancel, onDiscardUnsavedChanges, @@ -50,6 +61,7 @@ const MetadataInstanceEditor: React.FC = ({ setIsUnsavedChangesModalOpen={setIsUnsavedChangesModalOpen} onDelete={onDelete} onDiscardUnsavedChanges={onDiscardUnsavedChanges} + taxonomyOptionsFetcher={taxonomyOptionsFetcher} /> ); diff --git a/src/elements/content-sidebar/MetadataSidebarRedesign.tsx b/src/elements/content-sidebar/MetadataSidebarRedesign.tsx index 445a9beabd..18e8e2b83d 100644 --- a/src/elements/content-sidebar/MetadataSidebarRedesign.tsx +++ b/src/elements/content-sidebar/MetadataSidebarRedesign.tsx @@ -14,6 +14,7 @@ import { type JSONPatchOperations, type MetadataTemplateInstance, type MetadataTemplate, + type PaginationQueryInput, } from '@box/metadata-editor'; import noop from 'lodash/noop'; @@ -36,6 +37,7 @@ import messages from '../common/messages'; import './MetadataSidebarRedesign.scss'; import MetadataInstanceEditor from './MetadataInstanceEditor'; import { convertTemplateToTemplateInstance } from './utils/convertTemplateToTemplateInstance'; +import { metadataTaxonomyFetcher } from './fetchers/metadataTaxonomyFetcher'; const MARK_NAME_JS_READY = `${ORIGIN_METADATA_SIDEBAR_REDESIGN}_${EVENT_JS_READY}`; @@ -173,6 +175,14 @@ function MetadataSidebarRedesign({ api, elementId, fileId, onError, isFeatureEna const showEditor = !showEmptyState && editingTemplate; const showList = !showEditor && templateInstances.length > 0 && !editingTemplate; + const taxonomyOptionsFetcher = async ( + scope: string, + templateKey: string, + fieldKey: string, + level: number, + options: PaginationQueryInput, + ) => metadataTaxonomyFetcher(api, fileId, scope, templateKey, fieldKey, level, options); + return ( )} {showList && ( diff --git a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx index 45e6be2ad7..efdb1a9d34 100644 --- a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx +++ b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx @@ -58,6 +58,7 @@ describe('MetadataInstanceEditor', () => { onSubmit: jest.fn(), setIsUnsavedChangesModalOpen: mockSetIsUnsavedChangesModalOpen, onDiscardUnsavedChanges: mockOnDiscardUnsavedChanges, + taxonomyOptionsFetcher: jest.fn(), }; test('should render MetadataInstanceForm with correct props', () => { diff --git a/src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts b/src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts new file mode 100644 index 0000000000..8b66a2842b --- /dev/null +++ b/src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts @@ -0,0 +1,122 @@ +import type { PaginationQueryInput } from '@box/metadata-editor'; +import { metadataTaxonomyFetcher } from '../fetchers/metadataTaxonomyFetcher'; +import type API from '../../../api'; + +describe('metadataTaxonomyFetcher', () => { + let apiMock: jest.Mocked; + const fileId = '12345'; + const scope = 'global'; + const templateKey = 'template_123'; + const fieldKey = 'field_abc'; + const level = 1; + const options: PaginationQueryInput = { marker: 'marker_1' }; + + beforeEach(() => { + // Create a mocked API instance + apiMock = { + getMetadataAPI: jest.fn().mockReturnValue({ + getMetadataOptions: jest.fn(), + }), + }; + }); + + test('should fetch metadata options and return formatted data', async () => { + // Mock data returned by getMetadataOptions + const mockMetadataOptions = { + entries: [ + { id: 'opt1', display_name: 'Option 1' }, + { id: 'opt2', display_name: 'Option 2' }, + ], + }; + + // Mock the getMetadataOptions method to return mock data + apiMock.getMetadataAPI(false).getMetadataOptions.mockResolvedValue(mockMetadataOptions); + + // Call the function under test + const result = await metadataTaxonomyFetcher(apiMock, fileId, scope, templateKey, fieldKey, level, options); + + // Expected output + const expectedResult = { + options: [ + { value: 'opt1', displayValue: 'Option 1' }, + { value: 'opt2', displayValue: 'Option 2' }, + ], + marker: 'marker_1', + }; + + // Assertions + expect(apiMock.getMetadataAPI).toHaveBeenCalledWith(false); + expect(apiMock.getMetadataAPI(false).getMetadataOptions).toHaveBeenCalledWith( + fileId, + scope, + templateKey, + fieldKey, + level, + options, + ); + expect(result).toEqual(expectedResult); + }); + + test('should handle empty entries array', async () => { + // Mock data with empty entries + const mockMetadataOptions = { + entries: [], + }; + + // Mock the getMetadataOptions method to return mock data + apiMock.getMetadataAPI(false).getMetadataOptions.mockResolvedValue(mockMetadataOptions); + + // Call the function under test + const result = await metadataTaxonomyFetcher(apiMock, fileId, scope, templateKey, fieldKey, level, options); + + // Expected output + const expectedResult = { + options: [], + marker: 'marker_1', + }; + + // Assertions + expect(result).toEqual(expectedResult); + }); + + test('should set marker to null if not provided in options', async () => { + // Mock data returned by getMetadataOptions + const mockMetadataOptions = { + entries: [{ id: 'opt1', display_name: 'Option 1' }], + }; + + // Mock the getMetadataOptions method to return mock data + apiMock.getMetadataAPI(false).getMetadataOptions.mockResolvedValue(mockMetadataOptions); + + // Call the function under test with options without marker + const result = await metadataTaxonomyFetcher( + apiMock, + fileId, + scope, + templateKey, + fieldKey, + level, + {}, // options without marker + ); + + // Expected output + const expectedResult = { + options: [{ value: 'opt1', displayValue: 'Option 1' }], + marker: null, + }; + + // Assertions + expect(result).toEqual(expectedResult); + }); + + test('should throw an error if getMetadataOptions fails', async () => { + // Mock the getMetadataOptions method to throw an error + const error = new Error('API Error'); + apiMock.getMetadataAPI(false).getMetadataOptions.mockRejectedValue(error); + + // Assertions + await expect( + metadataTaxonomyFetcher(apiMock, fileId, scope, templateKey, fieldKey, level, options), + ).rejects.toThrow('API Error'); + }); +}); diff --git a/src/elements/content-sidebar/fetchers/metadataTaxonomyFetcher.ts b/src/elements/content-sidebar/fetchers/metadataTaxonomyFetcher.ts new file mode 100644 index 0000000000..e61ae6083a --- /dev/null +++ b/src/elements/content-sidebar/fetchers/metadataTaxonomyFetcher.ts @@ -0,0 +1,26 @@ +import type { PaginationQueryInput } from '@box/metadata-editor'; +import type API from '../../../api'; +import type { MetadataOptionEntry } from '../../../common/types/metadata'; + +export const metadataTaxonomyFetcher = async ( + api: API, + fileId: string, + scope: string, + templateKey: string, + fieldKey: string, + level: number, + options: PaginationQueryInput, +) => { + const metadataOptions = await api + .getMetadataAPI(false) + .getMetadataOptions(fileId, scope, templateKey, fieldKey, level, options); + const { marker = null } = options; + + return { + options: metadataOptions.entries.map((metadataOption: MetadataOptionEntry) => ({ + value: metadataOption.id, + displayValue: metadataOption.display_name, + })), + marker, + }; +}; From 0f3038e40fbc0540c5363923f4a21823fd05b313 Mon Sep 17 00:00:00 2001 From: Tyler Gauntlett Date: Wed, 9 Oct 2024 17:36:22 -0400 Subject: [PATCH 2/8] feat(taxonomy): fixed missing const --- src/features/metadata-instance-fields/constants.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/metadata-instance-fields/constants.js b/src/features/metadata-instance-fields/constants.js index e98e8c1ca1..4bebfec685 100644 --- a/src/features/metadata-instance-fields/constants.js +++ b/src/features/metadata-instance-fields/constants.js @@ -6,3 +6,4 @@ export const FIELD_TYPE_INTEGER: 'integer' = 'integer'; export const FIELD_TYPE_FLOAT: 'float' = 'float'; export const FIELD_TYPE_MULTISELECT: 'multiSelect' = 'multiSelect'; export const FIELD_TYPE_STRING: 'string' = 'string'; +export const FIELD_TYPE_TAXONOMY: 'taxonomy' = 'taxonomy'; From 6bf4326c8fdf3ef6654c6006624af12198abe7e5 Mon Sep 17 00:00:00 2001 From: Tyler Gauntlett Date: Wed, 9 Oct 2024 18:46:05 -0400 Subject: [PATCH 3/8] feat(taxonomy): removed comments --- .../__tests__/metadataTaxonomyFetcher.test.ts | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts b/src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts index 8b66a2842b..c07932cc20 100644 --- a/src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts +++ b/src/elements/content-sidebar/__tests__/metadataTaxonomyFetcher.test.ts @@ -12,7 +12,6 @@ describe('metadataTaxonomyFetcher', () => { const options: PaginationQueryInput = { marker: 'marker_1' }; beforeEach(() => { - // Create a mocked API instance apiMock = { getMetadataAPI: jest.fn().mockReturnValue({ getMetadataOptions: jest.fn(), @@ -21,7 +20,6 @@ describe('metadataTaxonomyFetcher', () => { }); test('should fetch metadata options and return formatted data', async () => { - // Mock data returned by getMetadataOptions const mockMetadataOptions = { entries: [ { id: 'opt1', display_name: 'Option 1' }, @@ -29,13 +27,10 @@ describe('metadataTaxonomyFetcher', () => { ], }; - // Mock the getMetadataOptions method to return mock data apiMock.getMetadataAPI(false).getMetadataOptions.mockResolvedValue(mockMetadataOptions); - // Call the function under test const result = await metadataTaxonomyFetcher(apiMock, fileId, scope, templateKey, fieldKey, level, options); - // Expected output const expectedResult = { options: [ { value: 'opt1', displayValue: 'Option 1' }, @@ -44,7 +39,6 @@ describe('metadataTaxonomyFetcher', () => { marker: 'marker_1', }; - // Assertions expect(apiMock.getMetadataAPI).toHaveBeenCalledWith(false); expect(apiMock.getMetadataAPI(false).getMetadataOptions).toHaveBeenCalledWith( fileId, @@ -58,63 +52,43 @@ describe('metadataTaxonomyFetcher', () => { }); test('should handle empty entries array', async () => { - // Mock data with empty entries const mockMetadataOptions = { entries: [], }; - // Mock the getMetadataOptions method to return mock data apiMock.getMetadataAPI(false).getMetadataOptions.mockResolvedValue(mockMetadataOptions); - // Call the function under test const result = await metadataTaxonomyFetcher(apiMock, fileId, scope, templateKey, fieldKey, level, options); - // Expected output const expectedResult = { options: [], marker: 'marker_1', }; - // Assertions expect(result).toEqual(expectedResult); }); test('should set marker to null if not provided in options', async () => { - // Mock data returned by getMetadataOptions const mockMetadataOptions = { entries: [{ id: 'opt1', display_name: 'Option 1' }], }; - // Mock the getMetadataOptions method to return mock data apiMock.getMetadataAPI(false).getMetadataOptions.mockResolvedValue(mockMetadataOptions); - // Call the function under test with options without marker - const result = await metadataTaxonomyFetcher( - apiMock, - fileId, - scope, - templateKey, - fieldKey, - level, - {}, // options without marker - ); + const result = await metadataTaxonomyFetcher(apiMock, fileId, scope, templateKey, fieldKey, level, {}); - // Expected output const expectedResult = { options: [{ value: 'opt1', displayValue: 'Option 1' }], marker: null, }; - // Assertions expect(result).toEqual(expectedResult); }); test('should throw an error if getMetadataOptions fails', async () => { - // Mock the getMetadataOptions method to throw an error const error = new Error('API Error'); apiMock.getMetadataAPI(false).getMetadataOptions.mockRejectedValue(error); - // Assertions await expect( metadataTaxonomyFetcher(apiMock, fileId, scope, templateKey, fieldKey, level, options), ).rejects.toThrow('API Error'); From 1d70fd642d5ad0bd042ececa5c34315696ff8e5f Mon Sep 17 00:00:00 2001 From: jnaskreski Date: Thu, 10 Oct 2024 17:51:44 +0200 Subject: [PATCH 4/8] test: add test for metadata taxonomy fetcher --- .../__tests__/MetadataInstanceEditor.test.tsx | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx index efdb1a9d34..a6ebbdc1ef 100644 --- a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx +++ b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { type MetadataTemplateInstance } from '@box/metadata-editor'; +import { MetadataTemplateField, type MetadataTemplateInstance } from '@box/metadata-editor'; import userEvent from '@testing-library/user-event'; import { screen, render } from '../../../test-utils/testing-library'; import MetadataInstanceEditor, { MetadataInstanceEditorProps } from '../MetadataInstanceEditor'; @@ -134,4 +134,44 @@ describe('MetadataInstanceEditor', () => { expect(mockOnDiscardUnsavedChanges).toHaveBeenCalled(); }); + + test('should call taxonomyOptionsFetcher on metadata taxonomy field search', async () => { + const taxonomyField: MetadataTemplateField = { + type: 'taxonomy', + key: 'States', + displayName: 'States', + description: 'State locations', + hidden: false, + id: '2', + taxonomyKey: 'geography', + taxonomyId: '1', + optionsRules: { + multiSelect: true, + selectableLevels: [1], + }, + }; + + const template: MetadataTemplateInstance = { + ...mockCustomMetadataTemplateWithField, + fields: [...mockCustomMetadataTemplateWithField.fields, taxonomyField], + }; + + const props: MetadataInstanceEditorProps = { + ...defaultProps, + template, + }; + + const { getByRole } = render(); + const combobox = getByRole('combobox', { name: 'States' }); + + await userEvent.type(combobox, 'A'); + + expect(props.taxonomyOptionsFetcher).toHaveBeenCalledWith( + template.scope, + template.templateKey, + taxonomyField.key, + taxonomyField.optionsRules.selectableLevels[0], + { marker: null, searchInput: 'A', signal: expect.anything() }, + ); + }); }); From c58d5159b8db2bd4025717fbb819a4a6cfac9a7f Mon Sep 17 00:00:00 2001 From: Tyler Gauntlett Date: Fri, 11 Oct 2024 11:11:48 -0400 Subject: [PATCH 5/8] feat(taxonomy): upgraded package --- package.json | 12 +++--------- yarn.lock | 8 ++++---- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index dcd719f34c..94fce5f0e5 100644 --- a/package.json +++ b/package.json @@ -92,11 +92,7 @@ "last 2 Edge versions", "last 2 iOS versions" ], - "development": [ - "last 1 Chrome versions", - "last 1 Firefox versions", - "last 1 Safari versions" - ] + "development": ["last 1 Chrome versions", "last 1 Firefox versions", "last 1 Safari versions"] }, "husky": { "hooks": { @@ -132,7 +128,7 @@ "@box/cldr-data": "^34.2.0", "@box/frontend": "^10.0.0", "@box/languages": "^1.0.0", - "@box/metadata-editor": "^0.61.1", + "@box/metadata-editor": "0.64.0", "@box/react-virtualized": "9.22.3-rc-box.9", "@cfaester/enzyme-adapter-react-18": "^0.8.0", "@chromatic-com/storybook": "^1.6.1", @@ -370,8 +366,6 @@ } }, "msw": { - "workerDirectory": [ - ".storybook/public" - ] + "workerDirectory": [".storybook/public"] } } diff --git a/yarn.lock b/yarn.lock index ac7f49aae7..7cc5f0f7cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1569,10 +1569,10 @@ resolved "https://registry.yarnpkg.com/@box/languages/-/languages-1.1.2.tgz#cd4266b3da62da18560d881e10b429653186be29" integrity sha512-d64TGosx+KRmrLZj4CIyLp42LUiEbgBJ8n8cviMQwTJmfU0g+UwZqLjmQZR1j+Q9D64yV4xHzY9K1t5nInWWeQ== -"@box/metadata-editor@^0.61.1": - version "0.61.2" - resolved "https://registry.yarnpkg.com/@box/metadata-editor/-/metadata-editor-0.61.2.tgz#b8e66f3e822531ae57463cfdd8be89dd9cabdb21" - integrity sha512-Ot+cGU+benO0ChRrKWahvJmHMgxKTp4nuNr+VypnQtTt63hGCn1F8TbZ2aQNRtPikhoGCAiOwYspG8fRKJ/Fmw== +"@box/metadata-editor@0.64.0": + version "0.64.0" + resolved "https://registry.yarnpkg.com/@box/metadata-editor/-/metadata-editor-0.64.0.tgz#4cc583b82271cb8b7d60efcc8204b13c52c017cd" + integrity sha512-vJQ1QDzQ5zVyftXwMSWzsGG0AKvILkqGjymSdXl+WJNYRkCx5VXf29eUoRktOaC7lA7VFHyFn8Je0ty3E+fv4A== "@box/react-virtualized@9.22.3-rc-box.9": version "9.22.3-rc-box.9" From 5a4998a8987b1c95afe185e83f0473727c53dcb2 Mon Sep 17 00:00:00 2001 From: Tyler Gauntlett Date: Fri, 11 Oct 2024 12:20:49 -0400 Subject: [PATCH 6/8] feat(taxonomy): fixed query string name --- src/api/Metadata.js | 4 ++-- src/api/__tests__/Metadata.test.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/api/Metadata.js b/src/api/Metadata.js index 70a5605900..76192a82cc 100644 --- a/src/api/Metadata.js +++ b/src/api/Metadata.js @@ -1111,10 +1111,10 @@ class Metadata extends File { } const url = this.getMetadataOptionsUrl(scope, templateKey, fieldKey); - const { marker, searchInput, signal } = options; + const { marker, searchInput: query_text, signal } = options; const params = { ...(marker ? { marker } : {}), - ...(searchInput ? { searchInput } : {}), + ...(query_text ? { query_text } : {}), ...(level || level === 0 ? { level } : {}), }; diff --git a/src/api/__tests__/Metadata.test.js b/src/api/__tests__/Metadata.test.js index 681e32c3a8..278895665a 100644 --- a/src/api/__tests__/Metadata.test.js +++ b/src/api/__tests__/Metadata.test.js @@ -2886,7 +2886,7 @@ describe('api/Metadata', () => { }); describe('getMetadataOptions()', () => { - test('should return metadata options when called with valid parameters', async () => { + test.only('should return metadata options when called with valid parameters', async () => { const response = { entries: [ { @@ -2929,7 +2929,7 @@ describe('api/Metadata', () => { id: 'file_id', params: { marker: 'current_marker', - searchInput: 'search_term', + query_text: 'search_term', level: 0, }, }); From 5193584f4a00ebcfb3016a1181373184e66a0aca Mon Sep 17 00:00:00 2001 From: Tyler Gauntlett Date: Fri, 11 Oct 2024 16:00:49 -0400 Subject: [PATCH 7/8] feat(taxonomy): removed only --- src/api/__tests__/Metadata.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/__tests__/Metadata.test.js b/src/api/__tests__/Metadata.test.js index 278895665a..e9e72186a0 100644 --- a/src/api/__tests__/Metadata.test.js +++ b/src/api/__tests__/Metadata.test.js @@ -2886,7 +2886,7 @@ describe('api/Metadata', () => { }); describe('getMetadataOptions()', () => { - test.only('should return metadata options when called with valid parameters', async () => { + test('should return metadata options when called with valid parameters', async () => { const response = { entries: [ { From 48806bfdadaaecc67e56a097da657c2133cd0214 Mon Sep 17 00:00:00 2001 From: Tyler Gauntlett Date: Fri, 11 Oct 2024 16:36:34 -0400 Subject: [PATCH 8/8] feat(taxonomy): added test wrapper --- .../content-sidebar/__tests__/MetadataInstanceEditor.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx index cd7a710b7b..5b4a35da12 100644 --- a/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx +++ b/src/elements/content-sidebar/__tests__/MetadataInstanceEditor.test.tsx @@ -185,7 +185,7 @@ describe('MetadataInstanceEditor', () => { template, }; - const { getByRole } = render(); + const { getByRole } = renderWithAutofill(); const combobox = getByRole('combobox', { name: 'States' }); await userEvent.type(combobox, 'A');