mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-24 10:46:50 +02:00
⚗️ Add unit tests and e2e for architecture diagram with titleAndAccessibilities
This commit is contained in:
@@ -19,6 +19,25 @@ describe.skip('architecture diagram', () => {
|
|||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('should render a simple architecture diagram with titleAndAccessabilities', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`architecture-beta
|
||||||
|
title Simple Architecture Diagram
|
||||||
|
accTitle: Accessibility Title
|
||||||
|
accDescr: Accessibility Description
|
||||||
|
group api(cloud)[API]
|
||||||
|
|
||||||
|
service db(database)[Database] in api
|
||||||
|
service disk1(disk)[Storage] in api
|
||||||
|
service disk2(disk)[Storage] in api
|
||||||
|
service server(server)[Server] in api
|
||||||
|
|
||||||
|
db:L -- R:server
|
||||||
|
disk1:T -- B:server
|
||||||
|
disk2:T -- B:db
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
it('should render an architecture diagram with groups within groups', () => {
|
it('should render an architecture diagram with groups within groups', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`architecture-beta
|
`architecture-beta
|
||||||
@@ -172,7 +191,7 @@ describe.skip('architecture diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render an architecture diagram with a resonable height', () => {
|
it('should render an architecture diagram with a reasonable height', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`architecture-beta
|
`architecture-beta
|
||||||
group federated(cloud)[Federated Environment]
|
group federated(cloud)[Federated Environment]
|
||||||
|
@@ -0,0 +1,70 @@
|
|||||||
|
import { it, describe, expect } from 'vitest';
|
||||||
|
import { db } from './architectureDb.js';
|
||||||
|
import { parser } from './architectureParser.js';
|
||||||
|
|
||||||
|
const {
|
||||||
|
clear,
|
||||||
|
getDiagramTitle,
|
||||||
|
getAccTitle,
|
||||||
|
getAccDescription,
|
||||||
|
getServices,
|
||||||
|
getGroups,
|
||||||
|
getEdges,
|
||||||
|
getJunctions,
|
||||||
|
} = db;
|
||||||
|
|
||||||
|
describe('architecture diagrams', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
clear();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('architecture diagram definitions', () => {
|
||||||
|
it('should handle the architecture keyword', async () => {
|
||||||
|
const str = `architecture-beta`;
|
||||||
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle an simple radar definition', async () => {
|
||||||
|
const str = `architecture-beta
|
||||||
|
service db
|
||||||
|
`;
|
||||||
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('should handle TitleAndAccessibilities', () => {
|
||||||
|
it('should handle title on the first line', async () => {
|
||||||
|
const str = `architecture-beta title Simple Architecture Diagram`;
|
||||||
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
||||||
|
expect(getDiagramTitle()).toBe('Simple Architecture Diagram');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle title on another line', async () => {
|
||||||
|
const str = `architecture-beta
|
||||||
|
title Simple Architecture Diagram
|
||||||
|
`;
|
||||||
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
||||||
|
expect(getDiagramTitle()).toBe('Simple Architecture Diagram');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle accessibility title and description', async () => {
|
||||||
|
const str = `architecture-beta
|
||||||
|
accTitle: Accessibility Title
|
||||||
|
accDescr: Accessibility Description
|
||||||
|
`;
|
||||||
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
||||||
|
expect(getAccTitle()).toBe('Accessibility Title');
|
||||||
|
expect(getAccDescription()).toBe('Accessibility Description');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle multiline accessibility description', async () => {
|
||||||
|
const str = `architecture-beta
|
||||||
|
accDescr {
|
||||||
|
Accessibility Description
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
||||||
|
expect(getAccDescription()).toBe('Accessibility Description');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@@ -1,6 +1,6 @@
|
|||||||
import type { ArchitectureDiagramConfig } from '../../config.type.js';
|
import type { ArchitectureDiagramConfig } from '../../config.type.js';
|
||||||
import DEFAULT_CONFIG from '../../defaultConfig.js';
|
import DEFAULT_CONFIG from '../../defaultConfig.js';
|
||||||
import { getConfig } from '../../diagram-api/diagramAPI.js';
|
import { getConfig as commonGetConfig } from '../../config.js';
|
||||||
import type { D3Element } from '../../types.js';
|
import type { D3Element } from '../../types.js';
|
||||||
import { ImperativeState } from '../../utils/imperativeState.js';
|
import { ImperativeState } from '../../utils/imperativeState.js';
|
||||||
import {
|
import {
|
||||||
@@ -33,6 +33,7 @@ import {
|
|||||||
isArchitectureService,
|
isArchitectureService,
|
||||||
shiftPositionByArchitectureDirectionPair,
|
shiftPositionByArchitectureDirectionPair,
|
||||||
} from './architectureTypes.js';
|
} from './architectureTypes.js';
|
||||||
|
import { cleanAndMerge } from '../../utils.js';
|
||||||
|
|
||||||
const DEFAULT_ARCHITECTURE_CONFIG: Required<ArchitectureDiagramConfig> =
|
const DEFAULT_ARCHITECTURE_CONFIG: Required<ArchitectureDiagramConfig> =
|
||||||
DEFAULT_CONFIG.architecture;
|
DEFAULT_CONFIG.architecture;
|
||||||
@@ -316,6 +317,14 @@ const setElementForId = (id: string, element: D3Element) => {
|
|||||||
};
|
};
|
||||||
const getElementById = (id: string) => state.records.elements[id];
|
const getElementById = (id: string) => state.records.elements[id];
|
||||||
|
|
||||||
|
const getConfig = (): Required<ArchitectureDiagramConfig> => {
|
||||||
|
const config = cleanAndMerge({
|
||||||
|
...DEFAULT_ARCHITECTURE_CONFIG,
|
||||||
|
...commonGetConfig().architecture,
|
||||||
|
});
|
||||||
|
return config;
|
||||||
|
};
|
||||||
|
|
||||||
export const db: ArchitectureDB = {
|
export const db: ArchitectureDB = {
|
||||||
clear,
|
clear,
|
||||||
setDiagramTitle,
|
setDiagramTitle,
|
||||||
@@ -324,6 +333,7 @@ export const db: ArchitectureDB = {
|
|||||||
getAccTitle,
|
getAccTitle,
|
||||||
setAccDescription,
|
setAccDescription,
|
||||||
getAccDescription,
|
getAccDescription,
|
||||||
|
getConfig,
|
||||||
|
|
||||||
addService,
|
addService,
|
||||||
getServices,
|
getServices,
|
||||||
@@ -348,9 +358,5 @@ export const db: ArchitectureDB = {
|
|||||||
export function getConfigField<T extends keyof ArchitectureDiagramConfig>(
|
export function getConfigField<T extends keyof ArchitectureDiagramConfig>(
|
||||||
field: T
|
field: T
|
||||||
): Required<ArchitectureDiagramConfig>[T] {
|
): Required<ArchitectureDiagramConfig>[T] {
|
||||||
const arch = getConfig().architecture;
|
return getConfig()[field];
|
||||||
if (arch?.[field]) {
|
|
||||||
return arch[field] as Required<ArchitectureDiagramConfig>[T];
|
|
||||||
}
|
|
||||||
return DEFAULT_ARCHITECTURE_CONFIG[field];
|
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import type { DiagramDB } from '../../diagram-api/types.js';
|
import type { DiagramDBBase } from '../../diagram-api/types.js';
|
||||||
import type { ArchitectureDiagramConfig } from '../../config.type.js';
|
import type { ArchitectureDiagramConfig } from '../../config.type.js';
|
||||||
import type { D3Element } from '../../types.js';
|
import type { D3Element } from '../../types.js';
|
||||||
import type cytoscape from 'cytoscape';
|
import type cytoscape from 'cytoscape';
|
||||||
@@ -242,7 +242,7 @@ export interface ArchitectureEdge<DT = ArchitectureDirection> {
|
|||||||
title?: string;
|
title?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ArchitectureDB extends DiagramDB {
|
export interface ArchitectureDB extends DiagramDBBase<ArchitectureDiagramConfig> {
|
||||||
clear: () => void;
|
clear: () => void;
|
||||||
addService: (service: Omit<ArchitectureService, 'edges'>) => void;
|
addService: (service: Omit<ArchitectureService, 'edges'>) => void;
|
||||||
getServices: () => ArchitectureService[];
|
getServices: () => ArchitectureService[];
|
||||||
|
@@ -1,11 +1,9 @@
|
|||||||
import { it, describe, expect } from 'vitest';
|
import { it, describe, expect } from 'vitest';
|
||||||
import { db } from './db.js';
|
import { db } from './db.js';
|
||||||
import { parser } from './parser.js';
|
import { parser } from './parser.js';
|
||||||
import { renderer, relativeRadius, closedRoundCurve } from './renderer.js';
|
import { relativeRadius, closedRoundCurve } from './renderer.js';
|
||||||
import { Diagram } from '../../Diagram.js';
|
import { Diagram } from '../../Diagram.js';
|
||||||
import mermaidAPI from '../../mermaidAPI.js';
|
import mermaidAPI from '../../mermaidAPI.js';
|
||||||
import { a } from 'vitest/dist/chunks/suite.qtkXWc6R.js';
|
|
||||||
import { buildRadarStyleOptions } from './styles.js';
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
clear,
|
clear,
|
||||||
|
@@ -31,6 +31,7 @@ vi.mock('./diagrams/xychart/xychartRenderer.js');
|
|||||||
vi.mock('./diagrams/requirement/requirementRenderer.js');
|
vi.mock('./diagrams/requirement/requirementRenderer.js');
|
||||||
vi.mock('./diagrams/sequence/sequenceRenderer.js');
|
vi.mock('./diagrams/sequence/sequenceRenderer.js');
|
||||||
vi.mock('./diagrams/radar/renderer.js');
|
vi.mock('./diagrams/radar/renderer.js');
|
||||||
|
vi.mock('./diagrams/architecture/architectureRenderer.js');
|
||||||
|
|
||||||
// -------------------------------------
|
// -------------------------------------
|
||||||
|
|
||||||
@@ -799,6 +800,7 @@ graph TD;A--x|text including URL space|B;`)
|
|||||||
{ textDiagramType: 'sequenceDiagram', expectedType: 'sequence' },
|
{ textDiagramType: 'sequenceDiagram', expectedType: 'sequence' },
|
||||||
{ textDiagramType: 'stateDiagram-v2', expectedType: 'stateDiagram' },
|
{ textDiagramType: 'stateDiagram-v2', expectedType: 'stateDiagram' },
|
||||||
{ textDiagramType: 'radar-beta', expectedType: 'radar' },
|
{ textDiagramType: 'radar-beta', expectedType: 'radar' },
|
||||||
|
{ textDiagramType: 'architecture-beta', expectedType: 'architecture' },
|
||||||
];
|
];
|
||||||
|
|
||||||
describe('accessibility', () => {
|
describe('accessibility', () => {
|
||||||
|
Reference in New Issue
Block a user