diff --git a/src/components/manage/Blocks/Group/Edit.test.jsx b/src/components/manage/Blocks/Group/Edit.test.jsx new file mode 100644 index 0000000..48da9de --- /dev/null +++ b/src/components/manage/Blocks/Group/Edit.test.jsx @@ -0,0 +1,79 @@ +import React from 'react'; +import Edit from './Edit'; +import configureStore from 'redux-mock-store'; +import { Provider } from 'react-intl-redux'; +import thunk from 'redux-thunk'; +import renderer from 'react-test-renderer'; +import { render, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom/extend-expect'; + +const mockStore = configureStore([thunk]); +const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, +}); + +describe('Edit', () => { + const onChangeBlock = jest.fn(); + const onChangeField = jest.fn(); + const mockBlockNode = { current: {} }; + const props = { + block: 'testBlock', + data: { + data: { + blocks: { + block1: { + type: 'test', + data: { + value: 'Test', + }, + }, + }, + blocks_layout: { + items: ['block1'], + }, + }, + }, + onChangeBlock, + onChangeField, + pathname: '/', + selected: true, + manage: true, + }; + + it('should render without crashing', () => { + const component = renderer.create( + + + , + ); + + const json = component.toJSON(); + expect(json).toMatchSnapshot(); + }); + + it('renders without crashing', () => { + const { getByRole } = render( + + + , + ); + expect(getByRole('presentation')).toBeInTheDocument(); + }); + + it('should call ArrowUp keydown', () => { + const mockOnFocusPreviousBlock = jest.fn(); + const { getByRole } = render( + + + , + ); + fireEvent.keyDown(getByRole('presentation'), { key: 'ArrowUp', code: 38 }); + }); +}); diff --git a/src/components/manage/Blocks/Group/EditBlockWrapper.test.jsx b/src/components/manage/Blocks/Group/EditBlockWrapper.test.jsx new file mode 100644 index 0000000..01893c3 --- /dev/null +++ b/src/components/manage/Blocks/Group/EditBlockWrapper.test.jsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { fireEvent, render } from '@testing-library/react'; +import { Provider } from 'react-intl-redux'; +import EditBlockWrapper from './EditBlockWrapper'; +import configureStore from 'redux-mock-store'; +import '@testing-library/jest-dom/extend-expect'; + +const mockDragInfo = { + innerRef: { + current: { + childMethod: jest.fn(), + }, + }, + draggableProps: {}, + dragHandleProps: {}, +}; + +const mockStore = configureStore(); +const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, +}); + +describe('EditBlockWrapper', () => { + const mockBlockProps = { + allowedBlocks: [], + block: 'mockBlock', + data: {}, + onSelectBlock: jest.fn(), + onDeleteBlock: jest.fn(), + onMutateBlock: jest.fn(), + onInsertBlock: jest.fn(), + selected: true, + }; + + it('renders children', () => { + const { getByText } = render( + + +
Test child
+
+
, + ); + expect(getByText('Test child')).toBeInTheDocument(); + }); + + it('calls onDeleteBlock when delete button is clicked', () => { + const { getByTitle } = render( + + + , + ); + fireEvent.click(getByTitle('Remove block')); + expect(mockBlockProps.onDeleteBlock).toHaveBeenCalledWith('mockBlock'); + }); +}); diff --git a/src/components/manage/Blocks/Group/View.test.jsx b/src/components/manage/Blocks/Group/View.test.jsx new file mode 100644 index 0000000..f9116b1 --- /dev/null +++ b/src/components/manage/Blocks/Group/View.test.jsx @@ -0,0 +1,68 @@ +import React from 'react'; +import View from './View'; +import renderer from 'react-test-renderer'; +import { render } from '@testing-library/react'; +import { RenderBlocks } from '@plone/volto/components'; +import '@testing-library/jest-dom/extend-expect'; + +jest.mock('@plone/volto/components', () => ({ + RenderBlocks: jest.fn(() =>
RenderBlocks
), +})); + +describe('View', () => { + it('should render without crashing', () => { + const props = { + data: {}, + metadata: {}, + properties: {}, + }; + const component = renderer.create(); + + const json = component.toJSON(); + expect(json).toMatchSnapshot(); + }); + + it('renders with default tag and without crashing', () => { + const props = { + data: {}, + metadata: {}, + properties: {}, + }; + const { container } = render(); + expect(container.querySelector('div')).toBeInTheDocument(); + }); + + it('renders with a custom tag and custom id', () => { + const props = { + data: { + as: 'section', + title: 'Test Title', + data: { key: 'value' }, + }, + properties: {}, + }; + const { container } = render(); + expect(container.querySelector('section')).toBeInTheDocument(); + expect(container.querySelector('#test-title')).toBeInTheDocument(); + }); + + it('renders RenderBlocks with correct props', () => { + const props = { + data: { + as: 'section', + title: 'Test Title', + data: { key: 'value' }, + }, + metadata: { meta: 'data' }, + properties: { prop: 'erty' }, + }; + render(); + expect(RenderBlocks).toHaveBeenCalledWith( + expect.objectContaining({ + metadata: props.metadata, + content: props.data.data, + }), + {}, + ); + }); +}); diff --git a/src/components/manage/Blocks/Group/__snapshots__/Edit.test.jsx.snap b/src/components/manage/Blocks/Group/__snapshots__/Edit.test.jsx.snap new file mode 100644 index 0000000..e526e26 --- /dev/null +++ b/src/components/manage/Blocks/Group/__snapshots__/Edit.test.jsx.snap @@ -0,0 +1,26 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Edit should render without crashing 1`] = ` +
+ + +
+
+
+
+`; diff --git a/src/components/manage/Blocks/Group/__snapshots__/View.test.jsx.snap b/src/components/manage/Blocks/Group/__snapshots__/View.test.jsx.snap new file mode 100644 index 0000000..efc7bd6 --- /dev/null +++ b/src/components/manage/Blocks/Group/__snapshots__/View.test.jsx.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`View should render without crashing 1`] = ` +
+
+ RenderBlocks +
+
+`;