ohif-viewer/tests/ContourSegLocking.spec.ts
2026-04-23 08:46:03 -04:00

147 lines
4.6 KiB
TypeScript

import { addOHIFGlobalCustomizations, expect, test, visitStudy } from './utils';
import { simulateNormalizedDragOnElement } from './utils/simulateDragOnElement';
const studyInstanceUID = '1.2.840.113619.2.290.3.3767434740.226.1600859119.501';
test('should not allow contours to be edited in basic viewer mode', async ({
page,
DOMOverlayPageObject,
leftPanelPageObject,
rightPanelPageObject,
viewportPageObject,
}) => {
const mode = 'viewer';
await visitStudy(page, studyInstanceUID, mode, 2000);
await rightPanelPageObject.toggle();
await leftPanelPageObject.loadSeriesByModality('RTSTRUCT');
// Wait for the segmentation to be loaded.
await page.waitForTimeout(5000);
await DOMOverlayPageObject.viewport.segmentationHydration.yes.click();
// Wait for the segmentation to hydrate.
await page.waitForTimeout(5000);
const svgPathLocatorPreEdit = (await viewportPageObject.getById('default')).svg();
expect(
await svgPathLocatorPreEdit.count(),
'Expected exactly 1 path element in the viewport'
).toBe(1);
const expectedPathCommands = await svgPathLocatorPreEdit.getAttribute('d');
// Try to drag one of the edges of the rectangular contour.
await simulateNormalizedDragOnElement({
locator: svgPathLocatorPreEdit,
start: { x: 0.1, y: 0 },
end: { x: 0.1, y: -0.2 },
});
const svgPathLocatorPostEdit = (await viewportPageObject.getById('default')).svg();
expect(
await svgPathLocatorPostEdit.getAttribute('d'),
'Expected the path commands to be the same as the pre-edit path commands'
).toBe(expectedPathCommands);
});
test('should not allow contours to be edited when panelSegmentation.disableEditing is true', async ({
page,
DOMOverlayPageObject,
leftPanelPageObject,
rightPanelPageObject,
viewportPageObject,
}) => {
const mode = 'segmentation';
await visitStudy(page, studyInstanceUID, mode, 2000);
await rightPanelPageObject.toggle();
await leftPanelPageObject.loadSeriesByModality('RTSTRUCT');
// Wait for the segmentation to be loaded.
await page.waitForTimeout(5000);
// disable editing of segmentations via the customization service
await addOHIFGlobalCustomizations(page, {
'panelSegmentation.disableEditing': true,
});
await DOMOverlayPageObject.viewport.segmentationHydration.yes.click();
// Wait for the segmentation to hydrate.
await page.waitForTimeout(5000);
const svgPathLocatorPreEdit = (await viewportPageObject.getById('default')).svg();
expect(
await svgPathLocatorPreEdit.count(),
'Expected exactly 1 path element in the viewport'
).toBe(1);
const expectedPathCommands = await svgPathLocatorPreEdit.getAttribute('d');
// Try to drag one of the edges of the rectangular contour.
await simulateNormalizedDragOnElement({
locator: svgPathLocatorPreEdit,
start: { x: 0.1, y: 0 },
end: { x: 0.1, y: -0.2 },
});
const svgPathLocatorPostEdit = (await viewportPageObject.getById('default')).svg();
expect(
await svgPathLocatorPostEdit.getAttribute('d'),
'Expected the path commands to be the same as the pre-edit path commands'
).toBe(expectedPathCommands);
});
test('should allow contours to be edited when panelSegmentation.disableEditing is false', async ({
page,
DOMOverlayPageObject,
leftPanelPageObject,
rightPanelPageObject,
viewportPageObject,
}) => {
const mode = 'segmentation';
await visitStudy(page, studyInstanceUID, mode, 2000);
await rightPanelPageObject.toggle();
await leftPanelPageObject.loadSeriesByModality('RTSTRUCT');
// Wait for the segmentation to be loaded.
await page.waitForTimeout(5000);
// disable editing of segmentations via the customization service
await addOHIFGlobalCustomizations(page, {
'panelSegmentation.disableEditing': false,
});
await DOMOverlayPageObject.viewport.segmentationHydration.yes.click();
// Wait for the segmentation to hydrate.
await page.waitForTimeout(5000);
const svgPathLocatorPreEdit = (await viewportPageObject.getById('default')).svg('path');
expect(
await svgPathLocatorPreEdit.count(),
'Expected exactly 1 path element in the viewport'
).toBe(1);
const preEditPathCommands = await svgPathLocatorPreEdit.getAttribute('d');
// Try to drag one of the edges of the rectangular contour.
await simulateNormalizedDragOnElement({
locator: svgPathLocatorPreEdit,
start: { x: 0.1, y: 0 },
end: { x: 0.1, y: -0.2 },
});
const svgPathLocatorPostEdit = (await viewportPageObject.getById('default')).svg('path');
expect(
await svgPathLocatorPostEdit.getAttribute('d'),
'Not expecting the path commands to be the same as the pre-edit path commands'
).not.toBe(preEditPathCommands);
});