Files
xyflow/tests/playwright/e2e/pane.spec.ts
T
b8affc1c82 Svelte NodeToolbar with E2E (#3643)
* Added NodeToolbar

* Added comments & fixed default behaviour in svelte

* Added e2e-tests for NodeToolbar component & added data-id to react NodeToolbar

* refactor(svelte/NodeToolbar): cleanup

* refactor(node-toolbar): add system utils

---------

Co-authored-by: moklick <info@moritzklack.com>
2023-11-20 18:40:43 +01:00

181 lines
5.8 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { FRAMEWORK } from './constants';
import { getTransform } from './utils';
test.describe('PANE DEFAULT', () => {
test.beforeEach(async ({ page }) => {
// Go to the starting url before each test.
await page.goto('/tests/generic/pane/general');
// Wait till the edges are rendered
await page.waitForSelector('[data-id="first-edge"]', { timeout: 5000 });
});
test.describe('pan & zoom', () => {
test('panning the pane moves it', async ({ page }) => {
const pane = page.locator(`.${FRAMEWORK}-flow__pane`);
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
await expect(pane).toBeAttached();
const paneBox = await pane.boundingBox();
const transformsBefore = await getTransform(viewport);
await pane.hover();
await page.mouse.down();
// Move pane by 100, 100
await page.mouse.move(paneBox!.x + paneBox!.width * 0.5 + 100, paneBox!.y + paneBox!.height * 0.5 + 100);
const transformsAfter = await getTransform(viewport);
expect(transformsAfter.translateX - transformsBefore.translateX).toBe(100);
expect(transformsAfter.translateY - transformsBefore.translateY).toBe(100);
});
test('scrolling the default pane zooms it', async ({ page }) => {
const pane = page.locator(`.${FRAMEWORK}-flow__pane`);
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
await expect(pane).toBeAttached();
const transformsBefore = await getTransform(viewport);
await pane.hover();
await page.mouse.wheel(0, 100);
const transformsAfter = await getTransform(viewport);
expect(transformsAfter.scale).not.toBe(transformsBefore.scale);
});
});
test.describe('minZoom & maxZoom', () => {
test('minZoom works as intended', async ({ page }) => {
const pane = page.locator(`.${FRAMEWORK}-flow__pane`);
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
await expect(pane).toBeAttached();
await pane.hover();
// Zoom out
await page.mouse.wheel(5000, 5000);
const transformsMinZoom = await getTransform(viewport);
expect(transformsMinZoom.scale).toBe(0.25);
});
test('maxZoom works as intended', async ({ page }) => {
const pane = page.locator(`.${FRAMEWORK}-flow__pane`);
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
await expect(pane).toBeAttached();
await pane.hover();
// Zoom in
await page.mouse.wheel(-5000, -5000);
const transformsMaxZoom = await getTransform(viewport);
expect(transformsMaxZoom.scale).toBe(4);
});
});
test.describe('autoPan', () => {
test('autoPanOnNodeDrag works as intended', async ({ page }) => {
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
const node = page.locator('[data-id="1"]');
await expect(node).toBeAttached();
const transformBefore = await getTransform(viewport);
await node.hover();
await page.mouse.down();
await page.mouse.move(0, 0);
await page.waitForTimeout(500);
await page.mouse.move(100, 100);
const transformAfter = await getTransform(viewport);
await expect(transformAfter.translateX).toBeGreaterThan(transformBefore.translateX);
await expect(transformAfter.translateY).toBeGreaterThan(transformBefore.translateY);
});
test('autoPanOnConnect works as intended', async ({ page }) => {
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
const handle = page.locator(`[data-id="1"] .${FRAMEWORK}-flow__handle`);
await expect(handle).toBeAttached();
const transformBefore = await getTransform(viewport);
await handle.hover();
await page.mouse.down();
await page.mouse.move(0, 0);
await page.waitForTimeout(500);
await page.mouse.move(100, 100);
const transformAfter = await getTransform(viewport);
await expect(transformAfter.translateX).toBeGreaterThan(transformBefore.translateX);
await expect(transformAfter.translateY).toBeGreaterThan(transformBefore.translateY);
});
});
});
test.describe('PANE NON-DEFAULT', () => {
test.beforeEach(async ({ page }) => {
// Go to the starting url before each test.
await page.goto('/tests/generic/pane/non-defaults');
// Wait till the edges are rendered
await page.waitForSelector('[data-id="first-edge"]', { timeout: 5000 });
});
test.describe('pan & zoom', () => {
test('panOnScroll pans the pane on scrolling', async ({ page }) => {
const pane = page.locator(`.${FRAMEWORK}-flow__pane`);
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
await expect(pane).toBeAttached();
const transformsBefore = await getTransform(viewport);
await pane.hover();
await page.mouse.wheel(100, 100);
const transformsAfter = await getTransform(viewport);
expect(transformsAfter.translateX).not.toBe(transformsBefore.translateX);
expect(transformsAfter.translateY).not.toBe(transformsBefore.translateY);
});
test('intialViewport', async ({ page }) => {
const pane = page.locator(`.${FRAMEWORK}-flow__pane`);
const viewport = page.locator(`.${FRAMEWORK}-flow__viewport`);
await expect(pane).toBeAttached();
const viewportTransform = await getTransform(viewport);
expect(viewportTransform.translateX).toBe(1.23);
expect(viewportTransform.translateY).toBe(9.87);
expect(viewportTransform.scale).toBe(1.234);
});
});
});
test.describe('PANE ACTIVATION KEYS', () => {
test.beforeEach(async ({ page }) => {
// Go to the starting url before each test.
await page.goto('/tests/generic/pane/activation-keys');
// Wait till the edges are rendered
await page.waitForSelector('[data-id="first-edge"]', { timeout: 5000 });
});
// TODO
});