mirror of
https://github.com/enso-org/enso.git
synced 2024-12-23 09:22:41 +03:00
a8551c7268
* Select node on any click Implements #10689.
70 lines
2.6 KiB
TypeScript
70 lines
2.6 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, closeDocPanel: boolean = true) {
|
|
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()
|
|
if (closeDocPanel) {
|
|
await expect(page.getByTestId('rightDock')).toExist()
|
|
await page.getByRole('button', { name: 'Documentation Panel' }).click()
|
|
// Wait for the closing animation.
|
|
await expect(page.getByTestId('rightDock')).toBeHidden()
|
|
}
|
|
// Wait for position initialization
|
|
await expectNodePositionsInitialized(page, 72)
|
|
}
|
|
|
|
export async function expectNodePositionsInitialized(page: Page, yPos: number) {
|
|
// Wait until edges are initialized and displayed correctly.
|
|
await expect(page.getByTestId('broken-edge')).toBeHidden()
|
|
// 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 locate.graphEditor(page).dblclick({ position: { x, y } })
|
|
}
|
|
|
|
// =================
|
|
// === 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 = node.locator('.grab-handle')
|
|
await grabHandle.dragTo(grabHandle, {
|
|
targetPosition: { x, y },
|
|
force: true,
|
|
})
|
|
}
|
|
|
|
/// Move mouse away to avoid random hover events and wait for any circular menus to disappear.
|
|
export async function ensureNoCircularMenusVisibleDueToHovering(page: Page) {
|
|
await page.mouse.move(-1000, 0)
|
|
await expect(locate.circularMenu(page)).toBeHidden()
|
|
}
|
|
|
|
/// Ensure no nodes are selected.
|
|
export async function deselectNodes(page: Page) {
|
|
await page.mouse.click(0, 0)
|
|
await expect(locate.selectedNodes(page)).toHaveCount(0)
|
|
}
|