diff --git a/test/cypress/tests/ui/BlockTunes.cy.ts b/test/cypress/tests/ui/BlockTunes.cy.ts index d58e6919..b9acd027 100644 --- a/test/cypress/tests/ui/BlockTunes.cy.ts +++ b/test/cypress/tests/ui/BlockTunes.cy.ts @@ -1,5 +1,6 @@ import { selectionChangeDebounceTimeout } from '../../../../src/components/constants'; import Header from '@editorjs/header'; +import { ToolboxConfig } from '../../../../types'; describe('BlockTunes', function () { @@ -182,5 +183,109 @@ describe('BlockTunes', function () { .contains('Convert to') .should('not.exist'); }); + + it('should not display tool with the same data in "Convert to" menu', () => { + /** + * Tool with several toolbox entries configured + */ + class TestTool { + /** + * Tool is convertable + */ + public static get conversionConfig(): { import: string } { + return { + import: 'text', + }; + } + + /** + * TestTool contains several toolbox options + */ + public static get toolbox(): ToolboxConfig { + return [ + { + title: 'Title 1', + icon: 'Icon1', + data: { + level: 1, + }, + }, + { + title: 'Title 2', + icon: 'Icon2', + data: { + level: 2, + }, + }, + ]; + } + + /** + * Tool can render itself + */ + public render(): HTMLDivElement { + const div = document.createElement('div'); + + div.innerText = 'Some text'; + + return div; + } + + /** + * Tool can save it's data + */ + public save(): { text: string; level: number } { + return { + text: 'Some text', + level: 1, + }; + } + } + + /** Editor instance with TestTool installed and one block of TestTool type */ + cy.createEditor({ + tools: { + testTool: TestTool, + }, + data: { + blocks: [ + { + type: 'testTool', + data: { + text: 'Some text', + level: 1, + }, + }, + ], + }, + }); + + /** Open block tunes menu */ + cy.get('[data-cy=editorjs]') + .get('.ce-block') + .click(); + + cy.get('[data-cy=editorjs]') + .get('.ce-toolbar__settings-btn') + .click(); + + /** Open "Convert to" menu */ + cy.get('[data-cy=editorjs]') + .get('.ce-popover-item') + .contains('Convert to') + .click(); + + /** Check TestTool option with SAME data is NOT present */ + cy.get('[data-cy=editorjs]') + .get('.ce-popover--nested [data-item-name=testTool]') + .contains('Title 1') + .should('not.exist'); + + /** Check TestTool option with DIFFERENT data IS present */ + cy.get('[data-cy=editorjs]') + .get('.ce-popover--nested [data-item-name=testTool]') + .contains('Title 2') + .should('exist'); + }); }); });