Pass network and connection tests

This commit is contained in:
49lf
2024-11-28 12:44:08 -05:00
parent faae28b025
commit 3e435bebf4

View File

@ -1,221 +1,192 @@
import { test, expect } from '@playwright/test' import { test, expect } from './zoo-test'
import { commonPoints, getUtils, setup, tearDown } from './test-utils' import { commonPoints, getUtils } from './test-utils'
test.beforeEach(async ({ context, page }, testInfo) => {
await setup(context, page, testInfo)
})
test.afterEach(async ({ page }, testInfo) => {
await tearDown(page, testInfo)
})
test.describe('Test network and connection issues', () => { test.describe('Test network and connection issues', () => {
test('simulate network down and network little widget', async ({ test('simulate network down and network little widget', async ({ page, homePage }) => { const u = await getUtils(page)
page, await page.setBodyDimensions({ width: 1200, height: 500 })
browserName,
}) => {
// TODO: Don't skip Mac for these. After `window.tearDown` is working in Safari, these should work on webkit
test.skip(
browserName === 'webkit',
'Skip on Safari until `window.tearDown` is working there'
)
const u = await getUtils(page)
await page.setViewportSize({ width: 1200, height: 500 })
await u.waitForAuthSkipAppStart() await homePage.goToModelingScene()
const networkToggle = page.getByTestId('network-toggle') const networkToggle = page.getByTestId('network-toggle')
// This is how we wait until the stream is online // This is how we wait until the stream is online
await expect( await expect(
page.getByRole('button', { name: 'Start Sketch' }) page.getByRole('button', { name: 'Start Sketch' })
).not.toBeDisabled({ timeout: 15000 }) ).not.toBeDisabled({ timeout: 15000 })
const networkWidget = page.locator('[data-testid="network-toggle"]') const networkWidget = page.locator('[data-testid="network-toggle"]')
await expect(networkWidget).toBeVisible() await expect(networkWidget).toBeVisible()
await networkWidget.hover() await networkWidget.hover()
const networkPopover = page.locator('[data-testid="network-popover"]') const networkPopover = page.locator('[data-testid="network-popover"]')
await expect(networkPopover).not.toBeVisible() await expect(networkPopover).not.toBeVisible()
// (First check) Expect the network to be up // (First check) Expect the network to be up
await expect(networkToggle).toContainText('Connected') await expect(networkToggle).toContainText('Connected')
// Click the network widget // Click the network widget
await networkWidget.click() await networkWidget.click()
// Check the modal opened. // Check the modal opened.
await expect(networkPopover).toBeVisible() await expect(networkPopover).toBeVisible()
// Click off the modal. // Click off the modal.
await page.mouse.click(100, 100) await page.mouse.click(100, 100)
await expect(networkPopover).not.toBeVisible() await expect(networkPopover).not.toBeVisible()
// Turn off the network // Turn off the network
await u.emulateNetworkConditions({ await u.emulateNetworkConditions({
offline: true, offline: true,
// values of 0 remove any active throttling. crbug.com/456324#c9 // values of 0 remove any active throttling. crbug.com/456324#c9
latency: 0, latency: 0,
downloadThroughput: -1, downloadThroughput: -1,
uploadThroughput: -1, uploadThroughput: -1,
})
// Expect the network to be down
await expect(networkToggle).toContainText('Offline')
// Click the network widget
await networkWidget.click()
// Check the modal opened.
await expect(networkPopover).toBeVisible()
// Click off the modal.
await page.mouse.click(0, 0)
await expect(networkPopover).not.toBeVisible()
// Turn back on the network
await u.emulateNetworkConditions({
offline: false,
// values of 0 remove any active throttling. crbug.com/456324#c9
latency: 0,
downloadThroughput: -1,
uploadThroughput: -1,
})
await expect(
page.getByRole('button', { name: 'Start Sketch' })
).not.toBeDisabled({ timeout: 15000 })
// (Second check) expect the network to be up
await expect(networkToggle).toContainText('Connected')
}) })
test('Engine disconnect & reconnect in sketch mode', async ({ // Expect the network to be down
page, await expect(networkToggle).toContainText('Problem')
browserName,
}) => {
// TODO: Don't skip Mac for these. After `window.tearDown` is working in Safari, these should work on webkit
test.skip(
browserName === 'webkit',
'Skip on Safari until `window.tearDown` is working there'
)
const networkToggle = page.getByTestId('network-toggle')
const u = await getUtils(page) // Click the network widget
await page.setViewportSize({ width: 1200, height: 500 }) await networkWidget.click()
const PUR = 400 / 37.5 //pixeltoUnitRatio
await u.waitForAuthSkipAppStart() // Check the modal opened.
await u.openDebugPanel() await expect(networkPopover).toBeVisible()
await expect( // Click off the modal.
page.getByRole('button', { name: 'Start Sketch' }) await page.mouse.click(0, 0)
).not.toBeDisabled({ timeout: 15000 }) await expect(networkPopover).not.toBeVisible()
// click on "Start Sketch" button // Turn back on the network
await u.clearCommandLogs() await u.emulateNetworkConditions({
await page.getByRole('button', { name: 'Start Sketch' }).click() offline: false,
await page.waitForTimeout(100) // values of 0 remove any active throttling. crbug.com/456324#c9
latency: 0,
downloadThroughput: -1,
uploadThroughput: -1,
})
// select a plane await expect(
await page.mouse.click(700, 200) page.getByRole('button', { name: 'Start Sketch' })
).not.toBeDisabled({ timeout: 15000 })
await expect(page.locator('.cm-content')).toHaveText( // (Second check) expect the network to be up
`sketch001 = startSketchOn('XZ')` await expect(networkToggle).toContainText('Connected') })
)
await u.closeDebugPanel()
await page.waitForTimeout(500) // TODO detect animation ending, or disable animation test('Engine disconnect & reconnect in sketch mode', async ({ page, browserName, homePage }) => { // TODO: Don't skip Mac for these. After `window.tearDown` is working in Safari, these should work on webkit
const networkToggle = page.getByTestId('network-toggle')
const startXPx = 600 const u = await getUtils(page)
await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10) await page.setBodyDimensions({ width: 1200, height: 500 })
await expect(page.locator('.cm-content')) const PUR = 400 / 37.5 //pixeltoUnitRatio
.toHaveText(`sketch001 = startSketchOn('XZ')
|> startProfileAt(${commonPoints.startAt}, %)`)
await page.waitForTimeout(100)
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 10) await homePage.goToModelingScene()
await page.waitForTimeout(100) await u.waitForPageLoad()
await expect(page.locator('.cm-content')) await u.openDebugPanel()
.toHaveText(`sketch001 = startSketchOn('XZ') // click on "Start Sketch" button
|> startProfileAt(${commonPoints.startAt}, %) await u.clearCommandLogs()
|> xLine(${commonPoints.num1}, %)`) await page.getByRole('button', { name: 'Start Sketch' }).click()
await page.waitForTimeout(100)
// Expect the network to be up // select a plane
await expect(networkToggle).toContainText('Connected') await page.mouse.click(700, 200)
// simulate network down await expect(page.locator('.cm-content')).toHaveText(
await u.emulateNetworkConditions({ `sketch001 = startSketchOn('XZ')`
offline: true, )
// values of 0 remove any active throttling. crbug.com/456324#c9 await u.closeDebugPanel()
latency: 0,
downloadThroughput: -1,
uploadThroughput: -1,
})
// Expect the network to be down await page.waitForTimeout(500) // TODO detect animation ending, or disable animation
await expect(networkToggle).toContainText('Offline')
// Ensure we are not in sketch mode const startXPx = 600
await expect( await page.mouse.click(startXPx + PUR * 10, 500 - PUR * 10)
page.getByRole('button', { name: 'Exit Sketch' }) await expect(page.locator('.cm-content'))
).not.toBeVisible() .toHaveText(`sketch001 = startSketchOn('XZ')
await expect( |> startProfileAt(${commonPoints.startAt}, %)`)
page.getByRole('button', { name: 'Start Sketch' }) await page.waitForTimeout(100)
).toBeVisible()
// simulate network up await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 10)
await u.emulateNetworkConditions({ await page.waitForTimeout(100)
offline: false,
// values of 0 remove any active throttling. crbug.com/456324#c9
latency: 0,
downloadThroughput: -1,
uploadThroughput: -1,
})
// Wait for the app to be ready for use await expect(page.locator('.cm-content'))
await expect( .toHaveText(`sketch001 = startSketchOn('XZ')
page.getByRole('button', { name: 'Start Sketch' }) |> startProfileAt(${commonPoints.startAt}, %)
).not.toBeDisabled({ timeout: 15000 }) |> xLine(${commonPoints.num1}, %)`)
// Expect the network to be up // Expect the network to be up
await expect(networkToggle).toContainText('Connected') await expect(networkToggle).toContainText('Connected')
await expect(page.getByTestId('loading-stream')).not.toBeAttached()
// Click off the code pane. // simulate network down
await page.mouse.click(100, 100) await u.emulateNetworkConditions({
offline: true,
// values of 0 remove any active throttling. crbug.com/456324#c9
latency: 0,
downloadThroughput: -1,
uploadThroughput: -1,
})
// select a line // Expect the network to be down
await page.getByText(`startProfileAt(${commonPoints.startAt}, %)`).click() await expect(networkToggle).toContainText('Problem')
// enter sketch again // Ensure we are not in sketch mode
await u.doAndWaitForCmd( await expect(
() => page.getByRole('button', { name: 'Edit Sketch' }).click(), page.getByRole('button', { name: 'Exit Sketch' })
'default_camera_get_settings' ).not.toBeVisible()
) await expect(
await page.waitForTimeout(150) page.getByRole('button', { name: 'Start Sketch' })
).toBeVisible()
// Click the line tool // simulate network up
await page.getByRole('button', { name: 'line Line', exact: true }).click() await u.emulateNetworkConditions({
offline: false,
// values of 0 remove any active throttling. crbug.com/456324#c9
latency: 0,
downloadThroughput: -1,
uploadThroughput: -1,
})
await page.waitForTimeout(150) // Wait for the app to be ready for use
await expect(
page.getByRole('button', { name: 'Start Sketch' })
).not.toBeDisabled({ timeout: 15000 })
// Ensure we can continue sketching // Expect the network to be up
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20) await expect(networkToggle).toContainText('Connected')
await expect.poll(u.normalisedEditorCode) await expect(page.getByTestId('loading-stream')).not.toBeAttached()
.toBe(`sketch001 = startSketchOn('XZ')
// Click off the code pane.
await page.mouse.click(100, 100)
// select a line
await page.getByText(`startProfileAt(${commonPoints.startAt}, %)`).click()
// enter sketch again
await u.doAndWaitForCmd(
() => page.getByRole('button', { name: 'Edit Sketch' }).click(),
'default_camera_get_settings'
)
await page.waitForTimeout(150)
// Click the line tool
await page.getByRole('button', { name: 'line Line', exact: true }).click()
await page.waitForTimeout(150)
// Ensure we can continue sketching
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20)
await expect.poll(u.normalisedEditorCode)
.toBe(`sketch001 = startSketchOn('XZ')
|> startProfileAt([12.34, -12.34], %) |> startProfileAt([12.34, -12.34], %)
|> xLine(12.34, %) |> xLine(12.34, %)
|> line([-12.34, 12.34], %) |> line([-12.34, 12.34], %)
`) `)
await page.waitForTimeout(100) await page.waitForTimeout(100)
await page.mouse.click(startXPx, 500 - PUR * 20) await page.mouse.click(startXPx, 500 - PUR * 20)
await expect.poll(u.normalisedEditorCode) await expect.poll(u.normalisedEditorCode)
.toBe(`sketch001 = startSketchOn('XZ') .toBe(`sketch001 = startSketchOn('XZ')
|> startProfileAt([12.34, -12.34], %) |> startProfileAt([12.34, -12.34], %)
|> xLine(12.34, %) |> xLine(12.34, %)
|> line([-12.34, 12.34], %) |> line([-12.34, 12.34], %)
@ -223,20 +194,19 @@ test.describe('Test network and connection issues', () => {
`) `)
// Unequip line tool // Unequip line tool
await page.keyboard.press('Escape') await page.keyboard.press('Escape')
// Make sure we didn't pop out of sketch mode. // Make sure we didn't pop out of sketch mode.
await expect( await expect(
page.getByRole('button', { name: 'Exit Sketch' }) page.getByRole('button', { name: 'Exit Sketch' })
).toBeVisible() ).toBeVisible()
await expect( await expect(
page.getByRole('button', { name: 'line Line', exact: true }) page.getByRole('button', { name: 'line Line', exact: true })
).not.toHaveAttribute('aria-pressed', 'true') ).not.toHaveAttribute('aria-pressed', 'true')
// Exit sketch // Exit sketch
await page.keyboard.press('Escape') await page.keyboard.press('Escape')
await expect( await expect(
page.getByRole('button', { name: 'Exit Sketch' }) page.getByRole('button', { name: 'Exit Sketch' })
).not.toBeVisible() ).not.toBeVisible() })
})
}) })