Skip to content

Commit 236b2ee

Browse files
authored
feat(data-modeling): show previous edits when opening the diagram COMPASS-9544 (#7106)
* allow previous edits * add test
1 parent 6190901 commit 236b2ee

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,14 @@ export const diagramReducer: Reducer<DiagramState> = (
9494
action
9595
) => {
9696
if (isAction(action, DiagramActionTypes.OPEN_DIAGRAM)) {
97+
const current = action.diagram.edits;
98+
const prev = current.map((_item, index, arr) => arr.slice(0, index + 1));
99+
prev.shift(); // Remove the first item, which is initial SetModel and there's no previous edit for it.
97100
return {
98101
...action.diagram,
99102
edits: {
100-
prev: [],
101-
current: action.diagram.edits,
103+
prev,
104+
current,
102105
next: [],
103106
},
104107
};

packages/compass-e2e-tests/tests/data-modeling-tab.test.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,54 @@ describe('Data Modeling tab', function () {
213213
.waitForDisplayed({ reverse: true });
214214
});
215215

216+
it('allows undo after opening a diagram', async function () {
217+
const dataModelName = 'Test Data Model - Undo After Open';
218+
await setupDiagram(browser, {
219+
diagramName: dataModelName,
220+
connectionName: DEFAULT_CONNECTION_NAME_1,
221+
databaseName: 'test',
222+
});
223+
224+
const dataModelEditor = browser.$(Selectors.DataModelEditor);
225+
await dataModelEditor.waitForDisplayed();
226+
227+
const testCollection1 = browser.$(
228+
Selectors.DataModelPreviewCollection('test.testCollection-one')
229+
);
230+
const startPosition = await testCollection1.getLocation();
231+
const nodeSize = await testCollection1.getSize();
232+
233+
await browser
234+
.action('pointer')
235+
.move({
236+
x: Math.round(startPosition.x + nodeSize.width / 2),
237+
y: Math.round(startPosition.y + nodeSize.height / 2),
238+
})
239+
.down({ button: 0 }) // Left mouse button
240+
.move({ x: 100, y: 0, duration: 1000, origin: 'pointer' })
241+
.pause(1000)
242+
.move({ x: 100, y: 0, duration: 1000, origin: 'pointer' })
243+
.up({ button: 0 }) // Release the left mouse button
244+
.perform();
245+
await browser.waitForAnimations(dataModelEditor);
246+
247+
// Open the saved diagram in new tab
248+
await browser.openNewTab();
249+
await browser.clickVisible(Selectors.DataModelsListItem(dataModelName));
250+
await browser.$(Selectors.DataModelEditor).waitForDisplayed();
251+
252+
// Ensure that undo button is enabled
253+
await browser.waitForAriaDisabled(Selectors.DataModelUndoButton, false);
254+
255+
// Undo the change
256+
await browser.clickVisible(Selectors.DataModelUndoButton);
257+
await browser.waitForAnimations(dataModelEditor);
258+
259+
// Ensure that undo button is now disabled and redo is enabled
260+
await browser.waitForAriaDisabled(Selectors.DataModelUndoButton, true);
261+
await browser.waitForAriaDisabled(Selectors.DataModelRedoButton, false);
262+
});
263+
216264
it('exports the data model to JSON', async function () {
217265
const dataModelName = 'Test Export Model - JSON';
218266
exportFileName = `${dataModelName}.json`;

0 commit comments

Comments
 (0)