From c38dc5532a4b3b5045174ac864a2209943039b29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Katja=20Su=CC=88ss?= Date: Sat, 19 Oct 2024 19:11:38 +0200 Subject: [PATCH] Add snapshot tests --- .../src/components/Tooltips.test.js | 412 ++++++++++++++++++ .../__snapshots__/Tooltips.test.js.snap | 358 +++++++++++++++ 2 files changed, 770 insertions(+) create mode 100644 packages/volto-slate-glossary/src/components/Tooltips.test.js create mode 100644 packages/volto-slate-glossary/src/components/__snapshots__/Tooltips.test.js.snap diff --git a/packages/volto-slate-glossary/src/components/Tooltips.test.js b/packages/volto-slate-glossary/src/components/Tooltips.test.js new file mode 100644 index 0000000..3206215 --- /dev/null +++ b/packages/volto-slate-glossary/src/components/Tooltips.test.js @@ -0,0 +1,412 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import configureStore from 'redux-mock-store'; +import { Provider } from 'react-intl-redux'; +import { waitFor } from '@testing-library/react'; + +import View from '@plone/volto/components/theme/View/View'; +import DefaultView from '@plone/volto/components/theme/View/DefaultView'; +import { AppExtras, ViewTitleBlock } from '@plone/volto/components'; +import installSlate from '@plone/volto-slate/editor'; +import installTextBlock from '@plone/volto-slate/blocks/Text'; +import TextBlockView from '@plone/volto-slate/blocks/Text/TextBlockView'; +import { TextWithGlossaryTooltips } from '../utils'; +import Tooltips from '../components/Tooltips'; +import config from '@plone/volto/registry'; + +const installTooltips = (config) => { + config.settings.glossary = { + caseSensitive: false, + matchOnlyFirstOccurence: false, + }; + config.settings.slate.leafs = { + text: ({ children }) => , + }; + + config.settings.appExtras = [ + // ...config.settings.appExtras, + { + match: '/', + component: Tooltips, + }, + ]; + return config; +}; + +beforeAll(() => { + config.set('views', { + defaultView: DefaultView, + layoutViews: { + summary_view: () =>
, + }, + contentTypesViews: { + Document: DefaultView, + }, + errorViews: { + ECONNREFUSED: () =>
, + }, + }); + + // Apply volto-slate configuration + [installSlate, installTextBlock].reduce((acc, apply) => apply(acc), config); + + config.blocks.blocksConfig['title'] = { + id: 'title', + title: 'Title', + view: ViewTitleBlock, + }; + config.blocks.blocksConfig['slate'] = { + id: 'slate', + title: 'Text', + view: TextBlockView, + }; + + // Apply volto-slate-glossary configuration + [installTooltips].reduce((acc, apply) => apply(acc), config); + + config.settings.publicURL = 'https://plone.org'; +}); +global.__SERVER__ = true; // eslint-disable-line no-underscore-dangle + +const mockStore = configureStore(); + +jest.mock('@plone/volto/components/manage/Toolbar/Toolbar', () => + jest.fn(() =>
), +); + +jest.mock('@plone/volto/components/theme/Comments/Comments', () => + jest.fn(() =>
), +); +jest.mock('@plone/volto/components/theme/Tags/Tags', () => + jest.fn(() =>
), +); +jest.mock('@plone/volto/components/theme/SlotRenderer/SlotRenderer', () => + jest.fn(() =>
), +); +jest.mock( + '@plone/volto/components/theme/ContentMetadataTags/ContentMetadataTags', + () => jest.fn(() =>
), +); + +const actions = { + document_actions: [], + object: [ + { + icon: '', + id: 'view', + title: 'View', + }, + { + icon: '', + id: 'edit', + title: 'Edit', + }, + { + icon: '', + id: 'folderContents', + title: 'Contents', + }, + { + icon: '', + id: 'history', + title: 'History', + }, + { + icon: '', + id: 'local_roles', + title: 'Sharing', + }, + ], + object_buttons: [ + { + icon: '', + id: 'cut', + title: 'Cut', + }, + { + icon: '', + id: 'copy', + title: 'Copy', + }, + { + icon: '', + id: 'delete', + title: 'Delete', + }, + { + icon: '', + id: 'rename', + title: 'Rename', + }, + { + icon: '', + id: 'ical_import_enable', + title: 'Enable icalendar import', + }, + ], + portal_tabs: [], + site_actions: [ + { + icon: '', + id: 'sitemap', + title: 'Site Map', + }, + { + icon: '', + id: 'accessibility', + title: 'Accessibility', + }, + { + icon: '', + id: 'contact', + title: 'Contact', + }, + ], + user: [ + { + icon: '', + id: 'preferences', + title: 'Preferences', + }, + { + icon: '', + id: 'dashboard', + title: 'Dashboard', + }, + { + icon: '', + id: 'plone_setup', + title: 'Site Setup', + }, + { + icon: '', + id: 'logout', + title: 'Log out', + }, + ], +}; + +describe('Tooltips are generated', () => { + let baseStore = { + router: { + location: { pathname: '/test' }, + }, + actions: { actions }, + content: { + data: { + '@type': 'Document', + blocks: { + '1b1e29b6-5c16-48b7-ae63-d6dd70d9799c': { + '@type': 'slate', + plaintext: 'Morgen üben wir weiter.', + value: [ + { + children: [ + { + text: 'Morgen üben wir weiter.', + }, + ], + type: 'p', + }, + ], + }, + '5bdcc024-9715-4711-bb61-05019a4b8d1e': { + '@type': 'slate', + plaintext: 'Üben macht den Meister.', + value: [ + { + children: [ + { + text: 'Üben macht den Meister.', + }, + ], + type: 'p', + }, + ], + }, + '713f6a98-68af-4935-860b-9f17375368d8': { + '@type': 'slate', + plaintext: + 'Wir üben das. Die Abkürzung AB ist im Glossar erklärt. Wir verwenden AB ab Donnerstag.', + value: [ + { + children: [ + { + text: 'Wir üben das. Die Abkürzung AB ist im Glossar erklärt. Wir verwenden AB ab Donnerstag.', + }, + ], + type: 'p', + }, + ], + }, + '00000001-68af-4935-860b-9f17375368d8': { + '@type': 'slate', + plaintext: + 'Bij volledige elektrificatie: Canyon: Tot -57% of tot -17 μg NO2/m3', + value: [ + { + children: [ + { + text: 'Bij volledige elektrificatie: Canyon: Tot -57% of tot -17 μg NO2/m3', + }, + ], + type: 'p', + }, + ], + }, + '00000002-68af-4935-860b-9f17375368d8': { + '@type': 'slate', + plaintext: 'In automn, Aბㄱ is something you should care about.', + value: [ + { + children: [ + { + text: 'In automn, Aბㄱ is something you should care about.', + }, + ], + type: 'p', + }, + ], + }, + '00000003-68af-4935-860b-9f17375368d8': { + '@type': 'slate', + plaintext: + 'Het laatste 8-uurgemiddelde van een dag wordt berekend van 16:00 uur tot 24:00 uur.', + value: [ + { + children: [ + { + text: 'Het laatste 8-uurgemiddelde van een dag wordt berekend van 16:00 uur tot 24:00 uur.', + }, + ], + type: 'p', + }, + ], + }, + 'e4ceaac9-669f-4df4-937a-fb762f7b289e': { + '@type': 'title', + }, + }, + blocks_layout: { + items: [ + 'e4ceaac9-669f-4df4-937a-fb762f7b289e', + '5bdcc024-9715-4711-bb61-05019a4b8d1e', + '713f6a98-68af-4935-860b-9f17375368d8', + '00000001-68af-4935-860b-9f17375368d8', + '00000002-68af-4935-860b-9f17375368d8', + '00000003-68af-4935-860b-9f17375368d8', + '1b1e29b6-5c16-48b7-ae63-d6dd70d9799c', + ], + }, + }, + get: { error: null }, + }, + userSession: { token: null }, + apierror: {}, + intl: { + locale: 'en', + messages: {}, + }, + glossarytooltipterms: { + error: null, + hasErrror: false, + result: { + items: [ + { + definition: [ + '

Eine Tätigkeit ausführen um vertrauter mit ihr zu werden und sie zu meistern.

', + ], + term: 'üben', + }, + { + definition: [ + '

Microgram of één miljoenste gram.

', + ], + term: 'µg', + }, + { + definition: [ + '

No clue what that should be!?

', + ], + term: 'Aბㄱ', + }, + { + definition: ['

Arbeitsbegleitung

'], + term: 'AB', + }, + { + definition: [ + '

Voor het hoogste 8-uurgemiddelde van een dag berekenen we voor elke 8 uur het gemiddelde en nemen dan de hoogste waarde. Het eerste 8-urgemiddelde van een dag loopt van 17:00 uur op de dag daarvoor tot 1:00 uur op de dag zelf.

', + ], + term: '8-uurgemiddelde', + }, + ], + items_total: 1, + }, + loadingResults: false, + }, + }; + + test('for all occurrences', async () => { + const store = mockStore(baseStore); + const { container } = render( + + <> + +
+ + +
, + ); + + await waitFor(() => {}); + expect(container).toMatchSnapshot(); + expect(container).toHaveTextContent('Üben macht den Meister'); + }); + + test('only for first occurrences per page', async () => { + const store = mockStore(baseStore); + config.settings.glossary.matchOnlyFirstOccurence = true; + const { container } = render( + + <> + +
+ + +
, + ); + + await waitFor(() => {}); + expect(container).toMatchSnapshot(); + expect(container).toHaveTextContent('Üben macht den Meister'); + }); + + test('only case sensitive', async () => { + const store = mockStore(baseStore); + config.settings.glossary.caseSensitive = true; + const { container } = render( + + <> + +
+ + +
, + ); + + await waitFor(() => {}); + expect(container).toMatchSnapshot(); + expect(container).toHaveTextContent('Üben macht den Meister'); + }); + + it(' – component Tooltips is rendered in AppExtras', () => { + const store = mockStore(baseStore); + const { container } = render( + + + , + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/volto-slate-glossary/src/components/__snapshots__/Tooltips.test.js.snap b/packages/volto-slate-glossary/src/components/__snapshots__/Tooltips.test.js.snap new file mode 100644 index 0000000..de68114 --- /dev/null +++ b/packages/volto-slate-glossary/src/components/__snapshots__/Tooltips.test.js.snap @@ -0,0 +1,358 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Tooltips are generated – component Tooltips is rendered in AppExtras 1`] = ` +
+
+
+
+`; + +exports[`Tooltips are generated for all occurrences 1`] = ` +
+
+
+
+
+

+

+ + + Üben + + macht den Meister. + +

+

+ + Wir + + üben + + das. Die Abkürzung + + AB + + ist im Glossar erklärt. Wir verwenden + + AB + + ab Donnerstag. + +

+

+ + Bij volledige elektrificatie: <strong>Canyon: Tot -57% of tot -17 + + μg + + NO2/m3</strong> + +

+

+ + In automn, + + Aბㄱ + + is something you should care about. + +

+

+ + Het laatste + + 8-uurgemiddelde + + van een dag wordt berekend van 16:00 uur tot 24:00 uur. + +

+

+ + Morgen + + üben + + wir weiter. + +

+

+
+
+
+
+
+
+
+
+`; + +exports[`Tooltips are generated only case sensitive 1`] = ` +
+
+
+
+
+

+

+ + Üben macht den Meister. + +

+

+ + Wir + + üben + + das. Die Abkürzung + + AB + + ist im Glossar erklärt. Wir verwenden AB ab Donnerstag. + +

+

+ + Bij volledige elektrificatie: <strong>Canyon: Tot -57% of tot -17 μg NO2/m3</strong> + +

+

+ + In automn, + + Aბㄱ + + is something you should care about. + +

+

+ + Het laatste + + 8-uurgemiddelde + + van een dag wordt berekend van 16:00 uur tot 24:00 uur. + +

+

+ + Morgen üben wir weiter. + +

+

+
+
+
+
+
+
+
+
+`; + +exports[`Tooltips are generated only for first occurrences per page 1`] = ` +
+
+
+
+
+

+

+ + + Üben + + macht den Meister. + +

+

+ + Wir üben das. Die Abkürzung + + AB + + ist im Glossar erklärt. Wir verwenden AB ab Donnerstag. + +

+

+ + Bij volledige elektrificatie: <strong>Canyon: Tot -57% of tot -17 + + μg + + NO2/m3</strong> + +

+

+ + In automn, + + Aბㄱ + + is something you should care about. + +

+

+ + Het laatste + + 8-uurgemiddelde + + van een dag wordt berekend van 16:00 uur tot 24:00 uur. + +

+

+ + Morgen üben wir weiter. + +

+

+
+
+
+
+
+
+
+
+`;