Skip to content

Commit 5cae6bb

Browse files
committed
Add context menu tests
1 parent 2b33ee5 commit 5cae6bb

File tree

1 file changed

+224
-0
lines changed

1 file changed

+224
-0
lines changed

ui-tests/tests/contextmenu.spec.ts

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
import {
2+
IJupyterLabPageFixture,
3+
expect,
4+
galata,
5+
test
6+
} from '@jupyterlab/galata';
7+
import { Locator } from '@playwright/test';
8+
import path from 'path';
9+
10+
async function openLeftPanel(page: IJupyterLabPageFixture): Promise<Locator> {
11+
const sidePanel = page.locator('#jupytergis\\:\\:leftControlPanel');
12+
if (!(await sidePanel.isVisible())) {
13+
const panelIcon = page.getByTitle('JupyterGIS Control Panel');
14+
await panelIcon.first().click();
15+
await page.waitForCondition(async () => await sidePanel.isVisible());
16+
}
17+
return sidePanel;
18+
}
19+
20+
async function openLayerTree(page: IJupyterLabPageFixture): Promise<Locator> {
21+
const sidePanel = await openLeftPanel(page);
22+
const layerTree = sidePanel.locator('.jp-gis-layerPanel');
23+
if (!(await layerTree.isVisible())) {
24+
const layerTitle = sidePanel.getByTitle('Layer tree');
25+
await layerTitle.click();
26+
await page.waitForCondition(async () => await layerTree.isVisible());
27+
}
28+
return layerTree;
29+
}
30+
31+
test.describe('context menu', () => {
32+
test.beforeAll(async ({ request }) => {
33+
const content = galata.newContentsHelper(request);
34+
await content.deleteDirectory('/examples');
35+
await content.uploadDirectory(
36+
path.resolve(__dirname, '../../examples'),
37+
'/examples'
38+
);
39+
});
40+
41+
test.beforeEach(async ({ page }) => {
42+
test.setTimeout(10000);
43+
await page.filebrowser.open('examples/test.jGIS');
44+
});
45+
46+
test.afterEach(async ({ page }) => {
47+
await page.activity.closeAll();
48+
});
49+
50+
test('right click on layer should open layer menu', async ({ page }) => {
51+
await page
52+
.getByLabel('Layers', { exact: true })
53+
.getByText('Open Topo Map')
54+
.click({ button: 'right' });
55+
56+
const text = page.getByRole('menu').getByText('Remove Layer');
57+
await expect(text).toBeVisible();
58+
});
59+
60+
test('right click on group should open group menu', async ({ page }) => {
61+
await page.getByText('level 1 group').click({ button: 'right' });
62+
63+
const text = page.getByRole('menu').getByText('Remove Group');
64+
await expect(text).toBeVisible();
65+
});
66+
67+
test('hover should display submenu', async ({ page }) => {
68+
await page
69+
.getByLabel('Layers', { exact: true })
70+
.getByText('Open Topo Map')
71+
.click({ button: 'right' });
72+
73+
await page.getByRole('menu').hover();
74+
75+
const submenu = page.locator('div').filter({
76+
hasText: 'Move to Rootlevel 1 grouplevel 2 groupMove Layers to New Group'
77+
});
78+
79+
const firstItem = page.getByText('Move to Root');
80+
await expect(firstItem).toBeVisible();
81+
await expect(submenu).toBeVisible();
82+
});
83+
84+
test('clicking remove layer should remove the layer from the tree', async ({
85+
page
86+
}) => {
87+
const firstItem = page
88+
.getByLabel('Layers', { exact: true })
89+
.getByText('Open Topo Map');
90+
91+
await page
92+
.getByLabel('Layers', { exact: true })
93+
.getByText('Open Topo Map')
94+
.click({ button: 'right' });
95+
96+
await page.getByRole('menu').getByText('Remove Layer').click();
97+
await expect(firstItem).not.toBeVisible();
98+
});
99+
100+
test('clicking remove group should remove the group from the tree', async ({
101+
page
102+
}) => {
103+
const firstItem = page
104+
.getByLabel('Layers', { exact: true })
105+
.getByText('level 1 group');
106+
107+
await page
108+
.getByLabel('Layers', { exact: true })
109+
.getByText('level 1 group')
110+
.click({ button: 'right' });
111+
112+
await page.getByRole('menu').getByText('Remove Group').click();
113+
await expect(firstItem).not.toBeVisible();
114+
});
115+
116+
test('pressing F2 should start rename for layer', async ({ page }) => {
117+
await page
118+
.getByLabel('Layers', { exact: true })
119+
.getByText('Open Topo Map')
120+
.click();
121+
await page
122+
.getByLabel('Layers', { exact: true })
123+
.getByText('Open Topo Map')
124+
.press('F2');
125+
await page
126+
.getByLabel('Layers', { exact: true })
127+
.getByRole('textbox')
128+
.fill('test name');
129+
await page
130+
.getByLabel('Layers', { exact: true })
131+
.getByRole('textbox')
132+
.press('Enter');
133+
134+
const newText = page.getByText('test name');
135+
136+
await expect(newText).toBeVisible();
137+
138+
// reset layer name
139+
await page.locator('#jp-gis-layer-tree div').nth(2).click();
140+
await page.locator('#jp-gis-layer-tree div').nth(2).press('F2');
141+
await page
142+
.getByLabel('Layers', { exact: true })
143+
.getByRole('textbox')
144+
.fill('Open Topo Map');
145+
await page
146+
.getByLabel('Layers', { exact: true })
147+
.getByRole('textbox')
148+
.press('Enter');
149+
150+
const restoredText = page
151+
.getByLabel('Layers', { exact: true })
152+
.getByText('Open Topo Map');
153+
154+
await expect(restoredText).toBeVisible();
155+
});
156+
157+
test('pressing F2 should start rename for group', async ({ page }) => {
158+
await page
159+
.getByLabel('Layers', { exact: true })
160+
.getByText('level 1 group')
161+
.click({ button: 'right' });
162+
163+
await page.getByLabel('Layers', { exact: true }).click();
164+
165+
await page.getByText('level 1 group').press('F2');
166+
await page.getByRole('textbox').fill('test name');
167+
await page.getByRole('textbox').press('Enter');
168+
169+
const newText = page.getByText('test name');
170+
171+
await expect(newText).toBeVisible();
172+
173+
await page
174+
.getByLabel('Layers', { exact: true })
175+
.getByText('test name')
176+
.click({ button: 'right' });
177+
178+
await page.getByLabel('Layers', { exact: true }).click();
179+
await page.getByText('test name').press('F2');
180+
await page.getByRole('textbox').fill('level 1 group');
181+
await page.getByRole('textbox').press('Enter');
182+
183+
const restoredText = page.getByText('level 1 group');
184+
185+
await expect(restoredText).toBeVisible();
186+
});
187+
188+
test('move layer to group should move layer', async ({ page }) => {
189+
await page
190+
.getByLabel('Layers', { exact: true })
191+
.getByText('Open Topo Map')
192+
.click({ button: 'right' });
193+
194+
await page.getByText('Move Layers to Group').hover();
195+
196+
await page.getByText('level 2 group').click();
197+
await page.getByText('level 1 group').click();
198+
await page.getByText('level 2 group').click();
199+
200+
const group = page.getByText('level 2 groupRegions FranceOpen Topo Map');
201+
202+
await expect(group).toHaveCount(1);
203+
});
204+
205+
test('move layer to new group', async ({ page }) => {
206+
await page
207+
.getByLabel('Layers', { exact: true })
208+
.getByText('Open Topo Map')
209+
.click({ button: 'right' });
210+
211+
await page.getByText('Move Layers to Group').hover();
212+
await page.getByText('Move Layers to New Group').click();
213+
await page
214+
.getByLabel('Layers', { exact: true })
215+
.getByRole('textbox')
216+
.fill('new group');
217+
await page
218+
.getByLabel('Layers', { exact: true })
219+
.getByRole('textbox')
220+
.press('Enter');
221+
222+
await expect(page.getByText('new group')).toHaveCount(1);
223+
});
224+
});

0 commit comments

Comments
 (0)