Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/every-hats-invent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'mermaid': minor
---

feat: add subgraph support to ER diagrams.
40 changes: 40 additions & 0 deletions cypress/integration/rendering/er/erDiagram-unified.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -662,5 +662,45 @@ describe('Entity Relationship Diagram Unified', () => {
{ ...options }
);
});

it(`${description}should render ER subgraphs`, () => {
imgSnapshotTest(
`
erDiagram
subgraph customers
CUSTOMER
ORDER
end

CUSTOMER ||--o{ ORDER : places
`,
options
);
});

it(`${description}should render nested ER subgraphs with direction override`, () => {
imgSnapshotTest(
`
erDiagram
direction LR

subgraph domain
direction TB

CUSTOMER

subgraph details
ORDER
end
end

PRODUCT

PRODUCT ||--o{ domain : links
CUSTOMER ||--o{ ORDER : places
`,
options
);
});
});
});
147 changes: 147 additions & 0 deletions cypress/integration/rendering/er/erDiagram.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -497,4 +497,151 @@ ORDER ||--|{ LINE-ITEM : contains
{ logLevel: 1 }
);
});

describe('ER diagram subgraphs', () => {
it('should render a simple subgraph', () => {
imgSnapshotTest(
`
erDiagram
subgraph domain
CUSTOMER
ORDER
end
`,
{ logLevel: 1 }
);
});

it('should render empty subgraphs', () => {
imgSnapshotTest(
`
erDiagram
subgraph emptyDomain
end
`,
{ logLevel: 1 }
);
});

it('should render nested subgraphs', () => {
imgSnapshotTest(
`
erDiagram
subgraph domain
CUSTOMER

subgraph details
ORDER
end
end
`,
{ logLevel: 1 }
);
});

it('should render relationships across subgraphs', () => {
imgSnapshotTest(
`
erDiagram
subgraph customers
CUSTOMER
end

subgraph orders
ORDER
end

CUSTOMER ||--o{ ORDER : places
`,
{ logLevel: 1 }
);
});

it('should render relationships between subgraph and entity', () => {
imgSnapshotTest(
`
erDiagram
subgraph customers
CUSTOMER
end

subgraph orders
ORDER
end

CUSTOMER ||--o{ orders : places
`,
{ logLevel: 1 }
);
});

it('should render relationships between subgraphs', () => {
imgSnapshotTest(
`
erDiagram
subgraph customers
CUSTOMER
end

subgraph orders
ORDER
end

customers ||--o{ orders : places
`,
{ logLevel: 1 }
);
});

it('should render subgraphs with quoted ids', () => {
imgSnapshotTest(
`
erDiagram
subgraph "Customer Domain"
CUSTOMER
end

"Customer Domain" ||--o{ ORDER : contains
`,
{ logLevel: 1 }
);
});

it('should render subgraphs with explicit id and title', () => {
imgSnapshotTest(
`
erDiagram
subgraph domain["Customer Domain"]
CUSTOMER
ORDER
end

CUSTOMER ||--o{ ORDER : places
`,
{ logLevel: 1 }
);
});

it('should render subgraphs with direction override', () => {
imgSnapshotTest(
`
erDiagram
direction LR

subgraph domain
direction TB

CUSTOMER
ORDER
end

PRODUCT

PRODUCT||--o{ domain: links
CUSTOMER ||--o{ ORDER : places
`,
{ logLevel: 1 }
);
});
});
});
Loading
Loading