import { Editor, ValueNode } from '@sagold/react-json-editor'; import { OneOfSelectWidget } from './OneOfSelectWidget'; import userEvent from '@testing-library/user-event'; import { widgets } from '../../index'; import { screen } from '@testing-library/dom'; import { render } from '@testing-library/react'; import { MantineProvider } from '@mantine/core'; describe('OneOfSelectWidget', () => { let editor: Editor; beforeEach( () => (editor = new Editor({ widgets, schema: { oneOf: [ { title: 'First-OneOf', type: 'object', required: ['title'], properties: { title: { type: 'string' } } }, { title: 'Second-OneOf', type: 'object', required: ['subtitle'], properties: { subtitle: { type: 'string' } } } ] } })) ); it('should have first oneOf-item selected initially', () => { editor.setData({ title: 'test-title' }); render( ); const $select = screen.getByRole('combobox'); expect($select).toHaveValue('First-OneOf'); }); it('should have second oneOf-item selected initially', () => { editor.setData({ subtitle: 'test-title' }); render( ); const $select = screen.getByRole('combobox'); expect($select).toHaveValue('Second-OneOf'); }); it('should select second item', async () => { editor.setData({ title: 'test-title' }); const { rerender } = render( ); const user = userEvent.setup(); await user.click(screen.getByRole('combobox')); await user.click(screen.getByText('Second-OneOf')); rerender( ); const $select = screen.getByRole('combobox'); expect($select).toHaveValue('Second-OneOf'); }); });