Files
modeling-app/e2e/playwright/sceneFixture.ts
Kurt Hutten 579151a9bb Sketch on chamfer UI (#3918)
* sketch on chamfer start

* working

* step app from getting in weird state when selection face to sketch on

* sketch on chamfer tests

* clean up

* fix test

* fix click selections for chamfers, add tests

* fixture setup (#3964)

* initial break up

* rename main fixture file

* add more expect state pattern

* add fixture comment

* add comments to chamfer function

* typos

* works without pipeExpr
2024-09-26 18:25:05 +10:00

82 lines
2.0 KiB
TypeScript

import type { Page, Locator } from '@playwright/test'
import { expect } from '@playwright/test'
import { uuidv4 } from 'lib/utils'
import {
closeDebugPanel,
doAndWaitForImageDiff,
openAndClearDebugPanel,
sendCustomCmd,
} from './test-utils'
type mouseParams = {
pixelDiff: number
}
export class SceneFixture {
public readonly page: Page
private readonly exeIndicator: Locator
constructor(page: Page) {
this.page = page
this.exeIndicator = page.getByTestId('model-state-indicator-execution-done')
}
makeMouseHelpers = (
x: number,
y: number,
{ steps }: { steps: number } = { steps: 5000 }
) => [
(params?: mouseParams) => {
if (params?.pixelDiff) {
return doAndWaitForImageDiff(
this.page,
() => this.page.mouse.click(x, y),
params.pixelDiff
)
}
return this.page.mouse.click(x, y)
},
(params?: mouseParams) => {
if (params?.pixelDiff) {
return doAndWaitForImageDiff(
this.page,
() => this.page.mouse.move(x, y, { steps }),
params.pixelDiff
)
}
return this.page.mouse.move(x, y, { steps })
},
]
/** Likely no where, there's a chance it will click something in the scene, depending what you have in the scene.
*
* Expects the viewPort to be 1000x500 */
clickNoWhere = () => this.page.mouse.click(998, 60)
moveCameraTo = async (
pos: { x: number; y: number; z: number },
target: { x: number; y: number; z: number } = { x: 0, y: 0, z: 0 }
) => {
await openAndClearDebugPanel(this.page)
await doAndWaitForImageDiff(
this.page,
() =>
sendCustomCmd(this.page, {
type: 'modeling_cmd_req',
cmd_id: uuidv4(),
cmd: {
type: 'default_camera_look_at',
vantage: pos,
center: target,
up: { x: 0, y: 0, z: 1 },
},
}),
300
)
await closeDebugPanel(this.page)
}
waitForExecutionDone = async () => {
await expect(this.exeIndicator).toBeVisible()
}
}