diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 05315cfdb..a75bbf83d 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -131,7 +131,7 @@ jobs: VITEST_COVERAGE: true CYPRESS_COMMIT: ${{ github.sha }} ARGOS_TOKEN: ${{ secrets.ARGOS_TOKEN }} - ARGOS_PARALLEL: ${{ env.CYPRESS_RECORD_KEY != '' }} + ARGOS_PARALLEL: ${{ secrets.CYPRESS_RECORD_KEY != '' }} ARGOS_PARALLEL_TOTAL: 4 ARGOS_PARALLEL_INDEX: ${{ matrix.containers }} diff --git a/cypress.config.ts b/cypress.config.ts index 6ebb75cdf..5315a5ea6 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -19,16 +19,19 @@ export default eyesPlugin( } return launchOptions; }); - addMatchImageSnapshotPlugin(on, config); // copy any needed variables from process.env to config.env config.env.useAppli = process.env.USE_APPLI ? true : false; + config.env.useArgos = !!process.env.ARGOS_TOKEN; - // Argos - registerArgosTask(on, config, { - uploadToArgos: !!process.env.CI, - token: process.env.ARGOS_TOKEN, - }); - + if (config.env.useArgos) { + // Argos + registerArgosTask(on, config, { + uploadToArgos: !!process.env.CI, + token: process.env.ARGOS_TOKEN, + }); + } else { + addMatchImageSnapshotPlugin(on, config); + } // do not forget to return the changed config object! return config; }, diff --git a/cypress/helpers/util.ts b/cypress/helpers/util.ts index d6ceb85f1..17bebeaef 100644 --- a/cypress/helpers/util.ts +++ b/cypress/helpers/util.ts @@ -95,19 +95,8 @@ export const openURLAndVerifyRendering = ( options: CypressMermaidConfig, validation?: any ): void => { - const useAppli: boolean = Cypress.env('useAppli'); const name: string = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-'); - if (useAppli) { - cy.log(`Opening eyes ${Cypress.spec.name} --- ${name}`); - cy.eyesOpen({ - appName: 'Mermaid', - testName: name, - batchName: Cypress.spec.name, - batchId: batchId + Cypress.spec.name, - }); - } - cy.visit(url); cy.window().should('have.property', 'rendered', true); cy.get('svg').should('be.visible'); @@ -116,15 +105,28 @@ export const openURLAndVerifyRendering = ( cy.get('svg').should(validation); } - cy.argosScreenshot(name); + verifyScreenshot(name); +}; + +export const verifyScreenshot = (name: string): void => { + const useAppli: boolean = Cypress.env('useAppli'); + const useArgos: boolean = Cypress.env('useArgos'); if (useAppli) { + cy.log(`Opening eyes ${Cypress.spec.name} --- ${name}`); + cy.eyesOpen({ + appName: 'Mermaid', + testName: name, + batchName: Cypress.spec.name, + batchId: batchId + Cypress.spec.name, + }); cy.log(`Check eyes ${Cypress.spec.name}`); cy.eyesCheckWindow('Click!'); cy.log(`Closing eyes ${Cypress.spec.name}`); cy.eyesClose(); + } else if (useArgos) { + cy.argosScreenshot(name); } else { - // Argos will take care of this - // cy.matchImageSnapshot(name); + cy.matchImageSnapshot(name); } }; diff --git a/cypress/integration/other/configuration.spec.js b/cypress/integration/other/configuration.spec.js index 544eab40f..6b9496768 100644 --- a/cypress/integration/other/configuration.spec.js +++ b/cypress/integration/other/configuration.spec.js @@ -1,4 +1,4 @@ -import { renderGraph } from '../../helpers/util.ts'; +import { renderGraph, verifyScreenshot } from '../../helpers/util.ts'; describe('Configuration', () => { describe('arrowMarkerAbsolute', () => { it('should handle default value false of arrowMarkerAbsolute', () => { @@ -120,7 +120,7 @@ describe('Configuration', () => { cy.visit(url); cy.window().should('have.property', 'rendered', true); cy.get('svg').should('be.visible'); - cy.matchImageSnapshot( + verifyScreenshot( 'configuration.spec-should-not-taint-initial-configuration-when-using-multiple-directives' ); }); @@ -145,7 +145,7 @@ describe('Configuration', () => { // none of the diagrams should be error diagrams expect($svg).to.not.contain('Syntax error'); }); - cy.matchImageSnapshot( + verifyScreenshot( 'configuration.spec-should-not-render-error-diagram-if-suppressErrorRendering-is-set' ); }); @@ -162,7 +162,7 @@ describe('Configuration', () => { // some of the diagrams should be error diagrams expect($svg).to.contain('Syntax error'); }); - cy.matchImageSnapshot( + verifyScreenshot( 'configuration.spec-should-render-error-diagram-if-suppressErrorRendering-is-not-set' ); }); diff --git a/packages/mermaid-flowchart-elk/src/detector.spec.ts b/packages/mermaid-flowchart-elk/src/detector.spec.ts index 6e949c57b..94ac22d26 100644 --- a/packages/mermaid-flowchart-elk/src/detector.spec.ts +++ b/packages/mermaid-flowchart-elk/src/detector.spec.ts @@ -39,6 +39,26 @@ describe('flowchart-elk detector', () => { ).toBe(true); }); + // The error from the issue was reproduced with mindmap, so this is just an example + // what matters is the keyword somewhere inside graph definition + it('should check only the beginning of the line in search of keywords', () => { + expect( + detector('mindmap ["Descendant node in flowchart"]', { + flowchart: { + defaultRenderer: 'elk', + }, + }) + ).toBe(false); + + expect( + detector('mindmap ["Descendant node in graph"]', { + flowchart: { + defaultRenderer: 'elk', + }, + }) + ).toBe(false); + }); + it('should detect flowchart-elk', () => { expect(detector('flowchart-elk')).toBe(true); }); diff --git a/packages/mermaid-flowchart-elk/src/detector.ts b/packages/mermaid-flowchart-elk/src/detector.ts index 52fb355a5..3b168bd61 100644 --- a/packages/mermaid-flowchart-elk/src/detector.ts +++ b/packages/mermaid-flowchart-elk/src/detector.ts @@ -11,7 +11,7 @@ const detector: DiagramDetector = (txt, config): boolean => { // If diagram explicitly states flowchart-elk /^\s*flowchart-elk/.test(txt) || // If a flowchart/graph diagram has their default renderer set to elk - (/^\s*flowchart|graph/.test(txt) && config?.flowchart?.defaultRenderer === 'elk') + (/^\s*(flowchart|graph)/.test(txt) && config?.flowchart?.defaultRenderer === 'elk') ) { return true; }