fix(measurement-tracking): restore tracked state on undo after Delete all (#5994)
* fix: always show delete confirmation when measurements exist
This commit is contained in:
1 parent
8cd8ccc163
commit
397aa4d0e3
10 files changed
+238
-30
No files matched your search
@@ -1,4 +1,12 @@
|
||||
import { addLengthMeasurement, expect, scrollVolumeViewport, test, visitStudy } from './utils';
|
||||
import {
|
||||
addLengthMeasurement,
|
||||
addOHIFConfiguration,
|
||||
expect,
|
||||
scrollVolumeViewport,
|
||||
test,
|
||||
visitStudy,
|
||||
waitForViewportsRendered,
|
||||
} from './utils';
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
// Using same one as JumpToMeasurementMPR.spec.ts
|
||||
@@ -213,3 +221,132 @@ test('checks if measurement item can be deleted through the context menu on the
|
||||
await expect(activeViewport.nthAnnotation(0).locator).toBeHidden();
|
||||
expect(await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount()).toBe(0);
|
||||
});
|
||||
|
||||
test('checks that undo after delete-all restores measurements as tracked', async ({
|
||||
page,
|
||||
DOMOverlayPageObject,
|
||||
rightPanelPageObject,
|
||||
viewportPageObject,
|
||||
mainToolbarPageObject,
|
||||
}) => {
|
||||
await addLengthMeasurement(page, {
|
||||
firstClick: [450, 180],
|
||||
secondClick: [550, 180],
|
||||
});
|
||||
|
||||
await expect(DOMOverlayPageObject.viewport.measurementTracking.locator).toBeVisible();
|
||||
await DOMOverlayPageObject.viewport.measurementTracking.confirm.click();
|
||||
|
||||
await addLengthMeasurement(page, {
|
||||
firstClick: [450, 260],
|
||||
secondClick: [550, 260],
|
||||
});
|
||||
|
||||
await rightPanelPageObject.measurementsPanel.select();
|
||||
expect(await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount()).toBe(2);
|
||||
|
||||
await rightPanelPageObject.measurementsPanel.panel.deleteAll();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toHaveText('Untrack Study');
|
||||
await DOMOverlayPageObject.dialog.confirmation.confirm.click();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toBeHidden();
|
||||
expect(await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount()).toBe(0);
|
||||
|
||||
await mainToolbarPageObject.undo.click();
|
||||
|
||||
await waitForViewportsRendered(page);
|
||||
|
||||
await expect(rightPanelPageObject.measurementsPanel.panel.rows).toHaveCount(2);
|
||||
|
||||
const activeViewport = await viewportPageObject.active;
|
||||
|
||||
const firstMeasurementLine = activeViewport.svg('line').first();
|
||||
await expect(firstMeasurementLine).not.toHaveAttribute('stroke-dasharray');
|
||||
|
||||
const secondMeasurementLine = activeViewport.svg('line').nth(2);
|
||||
await expect(secondMeasurementLine).not.toHaveAttribute('stroke-dasharray');
|
||||
});
|
||||
|
||||
test('checks that delete-all prompt reappears after undo', async ({
|
||||
page,
|
||||
DOMOverlayPageObject,
|
||||
rightPanelPageObject,
|
||||
mainToolbarPageObject,
|
||||
}) => {
|
||||
await addLengthMeasurement(page, {
|
||||
firstClick: [450, 180],
|
||||
secondClick: [550, 180],
|
||||
});
|
||||
await expect(DOMOverlayPageObject.viewport.measurementTracking.locator).toBeVisible();
|
||||
await DOMOverlayPageObject.viewport.measurementTracking.confirm.click();
|
||||
|
||||
await rightPanelPageObject.measurementsPanel.select();
|
||||
|
||||
await rightPanelPageObject.measurementsPanel.panel.deleteAll();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toHaveText('Untrack Study');
|
||||
await DOMOverlayPageObject.dialog.confirmation.confirm.click();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toBeHidden();
|
||||
|
||||
await mainToolbarPageObject.undo.click();
|
||||
|
||||
await expect(rightPanelPageObject.measurementsPanel.panel.rows).toHaveCount(1);
|
||||
|
||||
await rightPanelPageObject.measurementsPanel.panel.deleteAll();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toHaveText('Untrack Study');
|
||||
|
||||
await DOMOverlayPageObject.dialog.confirmation.confirm.click();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toBeHidden();
|
||||
|
||||
await expect(rightPanelPageObject.measurementsPanel.panel.rows).toHaveCount(0);
|
||||
});
|
||||
|
||||
test.describe('simplified tracking mode', () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await addOHIFConfiguration(page, {
|
||||
measurementTrackingMode: 'simplified',
|
||||
});
|
||||
const studyInstanceUID = '1.3.6.1.4.1.25403.345050719074.3824.20170125095438.5';
|
||||
await visitStudy(page, studyInstanceUID, 'viewer', 2000);
|
||||
});
|
||||
|
||||
test('checks that undo after delete-all restores measurements as tracked (simplified mode)', async ({
|
||||
page,
|
||||
DOMOverlayPageObject,
|
||||
rightPanelPageObject,
|
||||
viewportPageObject,
|
||||
mainToolbarPageObject,
|
||||
}) => {
|
||||
await addLengthMeasurement(page, {
|
||||
firstClick: [450, 180],
|
||||
secondClick: [550, 180],
|
||||
});
|
||||
|
||||
await addLengthMeasurement(page, {
|
||||
firstClick: [450, 260],
|
||||
secondClick: [550, 260],
|
||||
});
|
||||
|
||||
await rightPanelPageObject.measurementsPanel.select();
|
||||
expect(await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount()).toBe(2);
|
||||
|
||||
await rightPanelPageObject.measurementsPanel.panel.deleteAll();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toHaveText('Untrack Study');
|
||||
await DOMOverlayPageObject.dialog.confirmation.confirm.click();
|
||||
await expect(DOMOverlayPageObject.dialog.title).toBeHidden();
|
||||
|
||||
expect(await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount()).toBe(0);
|
||||
|
||||
await mainToolbarPageObject.undo.click();
|
||||
|
||||
await waitForViewportsRendered(page);
|
||||
|
||||
await expect(rightPanelPageObject.measurementsPanel.panel.rows).toHaveCount(2);
|
||||
|
||||
const activeViewport = await viewportPageObject.active;
|
||||
|
||||
const firstMeasurementLine = activeViewport.svg('line').first();
|
||||
await expect(firstMeasurementLine).not.toHaveAttribute('stroke-dasharray');
|
||||
|
||||
const secondMeasurementLine = activeViewport.svg('line').nth(2);
|
||||
await expect(secondMeasurementLine).not.toHaveAttribute('stroke-dasharray');
|
||||
});
|
||||
});
|
||||
@@ -338,4 +338,22 @@ export class MainToolbarPageObject {
|
||||
},
|
||||
};
|
||||
}
|
||||
get undo() {
|
||||
const button = this.page.getByTestId('undo-btn');
|
||||
return {
|
||||
button,
|
||||
async click() {
|
||||
await button.click();
|
||||
},
|
||||
};
|
||||
}
|
||||
get redo() {
|
||||
const button = this.page.getByTestId('redo-btn');
|
||||
return {
|
||||
button,
|
||||
async click() {
|
||||
await button.click();
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -125,6 +125,7 @@ export class RightPanelPageObject {
|
||||
getMeasurementCount: async () => {
|
||||
return await page.getByTestId('data-row').count();
|
||||
},
|
||||
rows: page.getByTestId('data-row'),
|
||||
locator: page.getByTestId('trackedMeasurements-panel').last(),
|
||||
nthMeasurement(index: number) {
|
||||
return getMeasurementByIdx(index);
|
||||
|
||||
@@ -10,7 +10,7 @@ import { DataOverlayPageObject } from './DataOverlayPageObject';
|
||||
import { DOMOverlayPageObject } from './DOMOverlayPageObject';
|
||||
import { MagnifyGlassPageObject } from './MagnifyGlassPageObject';
|
||||
|
||||
type SvgInnerElement = 'circle' | 'path' | 'd';
|
||||
type SvgInnerElement = 'circle' | 'path' | 'd' | 'line';
|
||||
|
||||
type NormalizedDragParams = {
|
||||
start: { x: number; y: number };
|
||||
|
||||
Reference in new issue
Block a user