Skip to content

Commit 710bb2e

Browse files
committed
wip test
1 parent 93b63f6 commit 710bb2e

File tree

4 files changed

+142
-7
lines changed

4 files changed

+142
-7
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import React from 'react';
2+
import { expect } from 'chai';
3+
import {
4+
screen,
5+
userEvent,
6+
waitFor,
7+
} from '@mongodb-js/testing-library-compass';
8+
import DiagramEditor from './diagram-editor';
9+
import { renderWithOpenedDiagramStore } from '../../test/setup-store';
10+
import type { DataModelingStore } from '../../test/setup-store';
11+
import { DataModelStorageServiceProvider } from '../provider';
12+
import type { MongoDBDataModelDescription } from '../services/data-model-storage';
13+
import { DiagramProvider } from '@mongodb-js/diagramming';
14+
15+
const storageItems: MongoDBDataModelDescription[] = [
16+
{
17+
id: '1',
18+
name: 'One',
19+
createdAt: '2023-10-01T00:00:00.000Z',
20+
updatedAt: '2023-10-03T00:00:00.000Z',
21+
edits: [
22+
{
23+
id: 'edit-id-1',
24+
timestamp: '2023-10-02T00:00:00.000Z',
25+
type: 'SetModel',
26+
model: {
27+
collections: [
28+
{
29+
ns: 'db1.collection1',
30+
indexes: [],
31+
displayPosition: [1, 1],
32+
shardKey: {},
33+
jsonSchema: { bsonType: 'object' },
34+
},
35+
],
36+
relationships: [],
37+
},
38+
},
39+
],
40+
connectionId: null,
41+
},
42+
];
43+
44+
const renderDiagramEditor = async ({
45+
items = storageItems,
46+
}: {
47+
items?: MongoDBDataModelDescription[];
48+
} = {}) => {
49+
const mockDataModelStorage = {
50+
status: 'READY',
51+
error: null,
52+
items,
53+
save: () => {
54+
return Promise.resolve(false);
55+
},
56+
delete: () => {
57+
return Promise.resolve(false);
58+
},
59+
loadAll: () => Promise.resolve(items),
60+
load: (id: string) => {
61+
return Promise.resolve(items.find((x) => x.id === id) ?? null);
62+
},
63+
};
64+
console.log(DiagramProvider);
65+
const result = await renderWithOpenedDiagramStore(
66+
<DataModelStorageServiceProvider storage={mockDataModelStorage}>
67+
<DiagramProvider fitView>
68+
<DiagramEditor />
69+
</DiagramProvider>
70+
</DataModelStorageServiceProvider>,
71+
{
72+
services: {
73+
dataModelStorage: mockDataModelStorage,
74+
},
75+
},
76+
items[0]
77+
);
78+
return result;
79+
};
80+
81+
describe.only('DiagramEditor', function () {
82+
let store: DataModelingStore;
83+
84+
beforeEach(async function () {
85+
const result = await renderDiagramEditor();
86+
store = result.store;
87+
88+
// wait till the editor is loaded
89+
// await waitFor(() => {
90+
// expect(screen.getByTestId('model-preview')).to.be.visible;
91+
// });
92+
});
93+
94+
it('shows the list of diagrams', async function () {
95+
// screen.debug()
96+
});
97+
});

packages/compass-data-modeling/src/store/diagram.spec.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,21 @@ describe('Data Modeling store', function () {
9090
expect(initialDiagram.connectionId).to.equal(newDiagram.connectionId);
9191
expect(initialDiagram.edits).to.have.length(1);
9292
expect(initialDiagram.edits[0].type).to.equal('SetModel');
93-
expect(initialDiagram.edits[0].model.collections[0]).to.deep.include({
93+
const initialEdit = initialDiagram.edits[0] as Extract<
94+
Edit,
95+
{ type: 'SetModel' }
96+
>;
97+
expect(initialEdit.model.collections[0]).to.deep.include({
9498
ns: newDiagram.collections[0].ns,
9599
jsonSchema: newDiagram.collections[0].schema,
96100
displayPosition: [-1, -1],
97101
});
98-
expect(initialDiagram.edits[0].model.collections[1]).to.deep.include({
102+
expect(initialEdit.model.collections[1]).to.deep.include({
99103
ns: newDiagram.collections[1].ns,
100104
jsonSchema: newDiagram.collections[1].schema,
101105
displayPosition: [-1, -1],
102106
});
103-
expect(initialDiagram.edits[0].model.relationships).to.deep.equal(
107+
expect(initialEdit.model.relationships).to.deep.equal(
104108
newDiagram.relations
105109
);
106110

@@ -116,17 +120,21 @@ describe('Data Modeling store', function () {
116120
expect(diagramWithLayout.connectionId).to.equal(newDiagram.connectionId);
117121
expect(diagramWithLayout.edits).to.have.length(1);
118122
expect(diagramWithLayout.edits[0].type).to.equal('SetModel');
119-
expect(diagramWithLayout.edits[0].model.collections[0]).to.deep.include({
123+
const initialEditWithPositions = diagramWithLayout.edits[0] as Extract<
124+
Edit,
125+
{ type: 'SetModel' }
126+
>;
127+
expect(initialEditWithPositions.model.collections[0]).to.deep.include({
120128
ns: newDiagram.collections[0].ns,
121129
jsonSchema: newDiagram.collections[0].schema,
122130
displayPosition: positions[newDiagram.collections[0].ns],
123131
});
124-
expect(diagramWithLayout.edits[0].model.collections[1]).to.deep.include({
132+
expect(initialEditWithPositions.model.collections[1]).to.deep.include({
125133
ns: newDiagram.collections[1].ns,
126134
jsonSchema: newDiagram.collections[1].schema,
127135
displayPosition: positions[newDiagram.collections[1].ns],
128136
});
129-
expect(diagramWithLayout.edits[0].model.relationships).to.deep.equal(
137+
expect(initialEditWithPositions.model.relationships).to.deep.equal(
130138
newDiagram.relations
131139
);
132140
});

packages/compass-data-modeling/src/store/diagram.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ export function getCurrentModel(
354354
description: MongoDBDataModelDescription
355355
): StaticModel {
356356
// Get the last 'SetModel' edit.
357+
console.log('DESCRIPTION', description);
357358
const reversedSetModelEditIndex = description.edits
358359
.slice()
359360
.reverse()

packages/compass-data-modeling/test/setup-store.tsx

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import React from 'react';
2-
import { renderWithConnections } from '@mongodb-js/testing-library-compass';
2+
import {
3+
renderWithConnections,
4+
waitFor,
5+
} from '@mongodb-js/testing-library-compass';
36
import { createActivateHelpers } from '@mongodb-js/compass-app-registry';
47
import { createNoopTrack } from '@mongodb-js/compass-telemetry/provider';
58
import { createNoopLogger } from '@mongodb-js/compass-logging/provider';
@@ -9,6 +12,9 @@ import { activateDataModelingStore } from '../src/store';
912
import type { DataModelingStoreServices } from '../src/store';
1013
import { noopDataModelStorageService } from '../src/provider';
1114
import { Provider } from 'react-redux';
15+
import { openDiagram } from '../src/store/diagram';
16+
import { expect } from 'chai';
17+
import type { MongoDBDataModelDescription } from '../src/services/data-model-storage';
1218

1319
type ConnectionInfoWithMockData = ConnectionInfo & {
1420
databases: Array<{
@@ -197,3 +203,26 @@ export const renderWithStore = (
197203
);
198204
return { ...renderResult, store };
199205
};
206+
export const renderWithOpenedDiagramStore = async (
207+
component: JSX.Element,
208+
{
209+
services = {},
210+
connections = testConnections,
211+
}: {
212+
services?: Partial<DataModelingStoreServices>;
213+
connections?: ConnectionInfoWithMockData[];
214+
} = {},
215+
diagram: MongoDBDataModelDescription
216+
) => {
217+
const store = setupStore(services, connections);
218+
store.dispatch(openDiagram(diagram));
219+
await waitFor(() => {
220+
expect(store.getState().diagram?.edits.current).to.have.lengthOf(1);
221+
console.log('HAS A DIAGRAM', store.getState().diagram?.edits.current[0]);
222+
});
223+
const renderResult = renderWithConnections(
224+
<Provider store={store}>{component}</Provider>,
225+
{ connections }
226+
);
227+
return { ...renderResult, store };
228+
};

0 commit comments

Comments
 (0)