|
7 | 7 | */
|
8 | 8 | import {
|
9 | 9 | clickRowAction,
|
| 10 | + closeToast, |
10 | 11 | expect,
|
11 | 12 | expectRowVisible,
|
12 | 13 | openRowActions,
|
@@ -240,3 +241,71 @@ test('instance table', async ({ page }) => {
|
240 | 241 | state: expect.stringMatching(/^starting\d+s$/),
|
241 | 242 | })
|
242 | 243 | })
|
| 244 | + |
| 245 | +async function expectRowMenuStaysOpen(page: Page, rowSelector: string) { |
| 246 | + // stop, but don't wait until the state has changed |
| 247 | + await page.getByRole('button', { name: 'Stop' }).click() |
| 248 | + await page.getByRole('button', { name: 'Confirm' }).click() |
| 249 | + await closeToast(page) |
| 250 | + |
| 251 | + const menu = page.getByRole('menu') |
| 252 | + const stopped = page.getByText('statestopped') |
| 253 | + |
| 254 | + await expect(menu).toBeHidden() |
| 255 | + await expect(stopped).toBeHidden() |
| 256 | + |
| 257 | + await openRowActions(page, rowSelector) |
| 258 | + await expect(stopped).toBeHidden() // still not stopped yet |
| 259 | + await expect(menu).toBeVisible() |
| 260 | + |
| 261 | + // now we're stopped, which means polling has happened, but the |
| 262 | + // menu remains visible |
| 263 | + await expect(stopped).toBeVisible() |
| 264 | + await expect(menu).toBeVisible() |
| 265 | +} |
| 266 | + |
| 267 | +// silly tests, but we've reintroduced this bug like 3 times |
| 268 | + |
| 269 | +test("polling doesn't close row actions: IPs table", async ({ page }) => { |
| 270 | + await page.goto('/projects/mock-project/instances/db1/networking') |
| 271 | + await expectRowMenuStaysOpen(page, '123.4.56.0') |
| 272 | +}) |
| 273 | + |
| 274 | +test("polling doesn't close row actions: NICs table", async ({ page }) => { |
| 275 | + await page.goto('/projects/mock-project/instances/db1/networking') |
| 276 | + await expectRowMenuStaysOpen(page, 'my-nic') |
| 277 | +}) |
| 278 | + |
| 279 | +test("polling doesn't close row actions: boot disk", async ({ page }) => { |
| 280 | + await page.goto('/projects/mock-project/instances/db1') |
| 281 | + await expectRowMenuStaysOpen(page, 'disk-1') |
| 282 | +}) |
| 283 | + |
| 284 | +test("polling doesn't close row actions: other disk", async ({ page }) => { |
| 285 | + await page.goto('/projects/mock-project/instances/db1') |
| 286 | + await expectRowMenuStaysOpen(page, 'disk-2') |
| 287 | +}) |
| 288 | + |
| 289 | +test("polling doesn't close row actions: instances", async ({ page }) => { |
| 290 | + await page.goto('/projects/mock-project/instances') |
| 291 | + |
| 292 | + // can't use the cool function because it's *slightly* different |
| 293 | + await clickRowAction(page, 'db1', 'Stop') |
| 294 | + await page.getByRole('button', { name: 'Confirm' }).click() |
| 295 | + await closeToast(page) |
| 296 | + |
| 297 | + const menu = page.getByRole('menu') |
| 298 | + const stopped = page.getByText('stopped') |
| 299 | + |
| 300 | + await expect(menu).toBeHidden() |
| 301 | + await expect(stopped).toBeHidden() |
| 302 | + |
| 303 | + await openRowActions(page, 'db1') |
| 304 | + await expect(stopped).toBeHidden() // still not stopped yet |
| 305 | + await expect(menu).toBeVisible() |
| 306 | + |
| 307 | + // now we're stopped, which means polling has happened, but the |
| 308 | + // menu remains visible |
| 309 | + await expect(stopped).toBeVisible() |
| 310 | + await expect(menu).toBeVisible() |
| 311 | +}) |
0 commit comments