mirror of
https://github.com/enso-org/enso.git
synced 2024-12-21 17:41:32 +03:00
1b59744660
This is a set of split off changes made as a side effect while working on engine reconnection handling. Cleaned up GUI e2e setup, unified as much of the entrypoint code as possible. Currently the only real difference between the real and testing entrypoint is mocking of all network calls and not loading through dashboard. I've managed to completely get rid of `MockApp`, and remove tricky mocking of pinia stores.
52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
import { type Page } from '@playwright/test'
|
|
import { expect } from './customExpect'
|
|
import * as locate from './locate'
|
|
import { graphNodeByBinding } from './locate'
|
|
|
|
// =================
|
|
// === goToGraph ===
|
|
// =================
|
|
|
|
/** Perform a successful login. */
|
|
export async function goToGraph(page: Page) {
|
|
await page.goto('/')
|
|
// Initial load through vite can take a while. Make sure that the first locator has enough time.
|
|
await expect(page.locator('.GraphEditor')).toBeVisible({ timeout: 100000 })
|
|
// Wait until nodes are loaded.
|
|
await expect(locate.graphNode(page)).toExist()
|
|
// Wait for position initialization
|
|
await expectNodePositionsInitialized(page, 64)
|
|
}
|
|
|
|
export async function expectNodePositionsInitialized(page: Page, yPos: number) {
|
|
// Wait until edges are initialized and displayed correctly.
|
|
await expect(page.getByTestId('broken-edge')).toHaveCount(0)
|
|
// Wait until node sizes are initialized.
|
|
await expect(locate.graphNode(page).first().locator('.bgFill')).toBeVisible()
|
|
// TODO: The yPos should not need to be a variable. Instead, first automatically positioned nodes
|
|
// should always have constant known position. This is a bug caused by incorrect layout after
|
|
// entering a function. To be fixed with #9255
|
|
await expect(locate.graphNode(page).first()).toHaveCSS(
|
|
'transform',
|
|
`matrix(1, 0, 0, 1, -16, ${yPos})`,
|
|
)
|
|
}
|
|
|
|
export async function exitFunction(page: Page, x = 300, y = 300) {
|
|
await page.mouse.dblclick(x, y, { delay: 10 })
|
|
}
|
|
|
|
// =================
|
|
// === Drag Node ===
|
|
// =================
|
|
|
|
/// Move node defined by the given binding by the given x and y.
|
|
export async function dragNodeByBinding(page: Page, nodeBinding: string, x: number, y: number) {
|
|
const node = graphNodeByBinding(page, nodeBinding)
|
|
const grabHandle = await node.locator('.grab-handle')
|
|
await grabHandle.dragTo(grabHandle, {
|
|
targetPosition: { x, y },
|
|
force: true,
|
|
})
|
|
}
|