openpencil/tests/e2e/fixtures.ts
2026-06-06 11:31:24 +03:00

56 lines
1.3 KiB
TypeScript

import { test, expect, type Locator, type Page } from '@playwright/test'
import { CanvasHelper } from '#tests/helpers/canvas'
export function useEditorSetup(url = '/') {
let page: Page
let canvas: CanvasHelper
test.describe.configure({ mode: 'serial' })
test.beforeAll(async ({ browser }) => {
page = await browser.newPage()
await page.goto(url)
canvas = new CanvasHelper(page)
await canvas.waitForInit()
})
test.afterAll(async () => {
await page.close()
})
return {
get page() {
return page
},
get canvas() {
return canvas
}
}
}
export function useEditorSetupWithClear(url = '/') {
const ctx = useEditorSetup(url)
test.beforeEach(async () => {
await ctx.canvas.clearCanvas()
})
return ctx
}
export async function expectInViewport(page: Page, locator: Locator) {
const box = await locator.boundingBox()
if (!box) throw new Error('Expected visible element to have a bounding box')
const viewport = page.viewportSize()
if (!viewport) throw new Error('Expected page to have a viewport')
expect(box.x).toBeGreaterThanOrEqual(0)
expect(box.y).toBeGreaterThanOrEqual(0)
expect(box.x + box.width).toBeLessThanOrEqual(viewport.width)
expect(box.y + box.height).toBeLessThanOrEqual(viewport.height)
}
export { test, expect }