ohif-viewer/tests/SRHydrationArrowNavigation.spec.ts
Ghadeer Albattarni 7a38903b19
fix(sr-hydration): enable hydration and arrow navigation for 3D SR measurements (#5887)
Joe is away, so approving based on the code having the requested change, and otherwise looking good/passing tests.

* fix(sr-hydration): enable hydration and arrows navigation for 3D SR measurements

* test: add automated test for SR measurement navigation with arrows after hydration

* add cross-study warning in the 3D branch

* test: address reviewer feedback for the test

* fix: support 3D and 2D annotations for SR hydration

* test: improve navigation to first image

---------

Co-authored-by: Bill Wallace <wayfarer3130@gmail.com>
2026-03-16 09:36:56 -04:00

95 lines
3.6 KiB
TypeScript

import { expect, navigateWithViewportArrow, test, visitStudy } from './utils';
import { expectRowSelected } from './utils/assertions';
import { press } from './utils/keyboardUtils';
test.beforeEach(async ({ page }) => {
const studyInstanceUID = '1.3.6.1.4.1.14519.5.2.1.7310.5101.860473186348887719777907797922';
const mode = 'viewer';
await visitStudy(page, studyInstanceUID, mode, 2000);
});
test('should navigate SR measurements with next/prev arrows after hydration for 3D SR', async ({
page,
DOMOverlayPageObject,
leftPanelPageObject,
rightPanelPageObject,
viewportPageObject,
}) => {
await rightPanelPageObject.toggle();
await rightPanelPageObject.measurementsPanel.select();
await leftPanelPageObject.loadSeriesByModality('SR');
await page.waitForTimeout(2000);
await DOMOverlayPageObject.viewport.segmentationHydration.yes.click();
await page.waitForTimeout(2000);
const measurementCount = await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount();
expect(measurementCount).toBeGreaterThan(1);
// Navigate to first image
await viewportPageObject.active.pane.click();
await press({ page, key: 'Home' });
await page.waitForTimeout(2000);
// first arrow click should navigate to second measurement
await navigateWithViewportArrow(viewportPageObject, 'next');
await expectRowSelected(rightPanelPageObject.measurementsPanel.panel.nthMeasurement(1));
await expect(viewportPageObject.active.svg('circle')).toBeVisible();
const secondAnnotation = viewportPageObject.active.nthAnnotation(0);
await expect(secondAnnotation.locator).toBeVisible();
await expect(secondAnnotation.text.locator).toBeVisible();
// navigate back to first measurement
await navigateWithViewportArrow(viewportPageObject, 'prev');
await expectRowSelected(rightPanelPageObject.measurementsPanel.panel.nthMeasurement(0));
await expect(viewportPageObject.active.svg('circle')).toBeVisible();
const firstAnnotation = viewportPageObject.active.nthAnnotation(0);
await expect(firstAnnotation.locator).toBeVisible();
await expect(firstAnnotation.text.locator).toBeVisible();
});
test('should keep arrows visible and functional after clicking measurement in right panel', async ({
page,
DOMOverlayPageObject,
leftPanelPageObject,
rightPanelPageObject,
viewportPageObject,
}) => {
await rightPanelPageObject.toggle();
await rightPanelPageObject.measurementsPanel.select();
await leftPanelPageObject.loadSeriesByModality('SR');
await page.waitForTimeout(2000);
await DOMOverlayPageObject.viewport.segmentationHydration.yes.click();
await page.waitForTimeout(2000);
const measurementCount = await rightPanelPageObject.measurementsPanel.panel.getMeasurementCount();
expect(measurementCount).toBeGreaterThan(1);
// click on first measurement
await rightPanelPageObject.measurementsPanel.panel.nthMeasurement(0).click();
await expect(viewportPageObject.active.nthAnnotation(0).locator).toBeVisible();
await expect(viewportPageObject.active.navigationArrows.next.button).toBeVisible();
await expect(viewportPageObject.active.navigationArrows.prev.button).toBeVisible();
// navigate to second measurement
await navigateWithViewportArrow(viewportPageObject, 'next');
await expectRowSelected(rightPanelPageObject.measurementsPanel.panel.nthMeasurement(1));
await expect(viewportPageObject.active.nthAnnotation(0).locator).toBeVisible();
// navigate back to first measurement
await navigateWithViewportArrow(viewportPageObject, 'prev');
await expectRowSelected(rightPanelPageObject.measurementsPanel.panel.nthMeasurement(0));
await expect(viewportPageObject.active.nthAnnotation(0).locator).toBeVisible();
});