diff --git a/CHANGELOG.md b/CHANGELOG.md index c5e3b7d..4ffab7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,18 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -### [6.1.1](https://github.com/eea/volto-group-block/compare/6.1.0...6.1.1) - 22 May 2023 +### [6.1.2](https://github.com/eea/volto-group-block/compare/6.1.1...6.1.2) - 12 June 2023 + +#### :house: Internal changes -#### :rocket: New Features +- chore: [JENKINS] Deprecate circularity website [valentinab25 - [`ad30e83`](https://github.com/eea/volto-group-block/commit/ad30e832bb869b67dc4e64ed99590b51cb80ab75)] -- feat: add support for toc [Miu Razvan - [`0c4568b`](https://github.com/eea/volto-group-block/commit/0c4568b816dcfa55820f45f796f115fcf2306dfa)] +#### :hammer_and_wrench: Others + +- test: jest should look for addons in node_modules Refs #253277 [valentinab25 - [`4352c3a`](https://github.com/eea/volto-group-block/commit/4352c3afb80d6f1cbfca06b27abd11e156f1c216)] +- test: Add unit tests for View, Edit, EditBlockWrapper - refs #253277 [ana-oprea - [`2f7e7ac`](https://github.com/eea/volto-group-block/commit/2f7e7ac2c9cf7654f5a0b6b123e7589364ba13c2)] +- test: Fix test config, coverage Refs #253277 [valentinab25 - [`fa46d74`](https://github.com/eea/volto-group-block/commit/fa46d741f4ac393eb7123b09a38b774192550f95)] +### [6.1.1](https://github.com/eea/volto-group-block/compare/6.1.0...6.1.1) - 22 May 2023 ### [6.1.0](https://github.com/eea/volto-group-block/compare/6.0.0...6.1.0) - 4 April 2023 diff --git a/Jenkinsfile b/Jenkinsfile index 08c9baf..0770aa5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ pipeline { environment { GIT_NAME = "volto-group-block" NAMESPACE = "@eeacms" - SONARQUBE_TAGS = "volto.eea.europa.eu,forest.eea.europa.eu,www.eea.europa.eu-ims,climate-energy.eea.europa.eu,sustainability.eionet.europa.eu,biodiversity.europa.eu,clms.land.copernicus.eu,industry.eea.europa.eu,water.europa.eu-freshwater,demo-www.eea.europa.eu,clmsdemo.devel6cph.eea.europa.eu,circularity.eea.europa.eu,water.europa.eu-marine,climate-adapt.eea.europa.eu,climate-advisory-board.devel4cph.eea.europa.eu,climate-advisory-board.europa.eu,www.eea.europa.eu-en" + SONARQUBE_TAGS = "volto.eea.europa.eu,forest.eea.europa.eu,www.eea.europa.eu-ims,climate-energy.eea.europa.eu,sustainability.eionet.europa.eu,biodiversity.europa.eu,clms.land.copernicus.eu,industry.eea.europa.eu,water.europa.eu-freshwater,demo-www.eea.europa.eu,clmsdemo.devel6cph.eea.europa.eu,water.europa.eu-marine,climate-adapt.eea.europa.eu,climate-advisory-board.devel4cph.eea.europa.eu,climate-advisory-board.europa.eu,www.eea.europa.eu-en" DEPENDENCIES = "" VOLTO = "" } @@ -188,6 +188,7 @@ pipeline { def nodeJS = tool 'NodeJS'; withSonarQubeEnv('Sonarqube') { sh '''sed -i "s#/opt/frontend/my-volto-project/src/addons/${GIT_NAME}/##g" xunit-reports/coverage/lcov.info''' + sh '''sed -i "s#src/addons/${GIT_NAME}/##g" xunit-reports/coverage/lcov.info''' sh "export PATH=${scannerHome}/bin:${nodeJS}/bin:$PATH; sonar-scanner -Dsonar.javascript.lcov.reportPaths=./xunit-reports/coverage/lcov.info,./cypress-coverage/coverage/lcov.info -Dsonar.sources=./src -Dsonar.projectKey=$GIT_NAME-$BRANCH_NAME -Dsonar.projectVersion=$BRANCH_NAME-$BUILD_NUMBER" sh '''try=2; while [ \$try -gt 0 ]; do curl -s -XPOST -u "${SONAR_AUTH_TOKEN}:" "${SONAR_HOST_URL}api/project_tags/set?project=${GIT_NAME}-${BRANCH_NAME}&tags=${SONARQUBE_TAGS},${BRANCH_NAME}" > set_tags_result; if [ \$(grep -ic error set_tags_result ) -eq 0 ]; then try=0; else cat set_tags_result; echo "... Will retry"; sleep 60; try=\$(( \$try - 1 )); fi; done''' } diff --git a/jest-addon.config.js b/jest-addon.config.js index da38318..3c86610 100644 --- a/jest-addon.config.js +++ b/jest-addon.config.js @@ -5,19 +5,19 @@ module.exports = { '!src/**/*.d.ts', ], moduleNameMapper: { + '\\.(css|less|scss|sass)$': 'identity-obj-proxy', '@plone/volto/cypress': '/node_modules/@plone/volto/cypress', '@plone/volto/babel': '/node_modules/@plone/volto/babel', '@plone/volto/(.*)$': '/node_modules/@plone/volto/src/$1', '@package/(.*)$': '/src/$1', '@root/(.*)$': '/src/$1', '@plone/volto-quanta/(.*)$': '/src/addons/volto-quanta/src/$1', - '@eeacms/(.*?)/(.*)$': '/src/addons/$1/src/$2', + '@eeacms/(.*?)/(.*)$': '/node_modules/@eeacms/$1/src/$2', '@plone/volto-slate': '/node_modules/@plone/volto/packages/volto-slate/src', '~/(.*)$': '/src/$1', 'load-volto-addons': '/node_modules/@plone/volto/jest-addons-loader.js', - '\\.(css|less|scss|sass)$': 'identity-obj-proxy', }, transform: { '^.+\\.js(x)?$': 'babel-jest', diff --git a/package.json b/package.json index 63403ab..6ad5b16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eeacms/volto-group-block", - "version": "6.1.1", + "version": "6.1.2", "description": "volto-group-block: Volto block to be used to group other blocks", "main": "src/index.js", "author": "European Environment Agency: IDM2 A-Team", 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 +
+
+`;