Преглед изворни кода

chore: add fixed layout node case (#294)

* chore: ensure page render

* chore: add fixed layout node e2e
chenjiawei.inizio пре 7 месеци
родитељ
комит
8a6b50ba78

+ 0 - 2
.github/workflows/e2e.yml

@@ -1,8 +1,6 @@
 name: E2E Tests
 name: E2E Tests
 
 
 on:
 on:
-  push:
-    branches: [ "main" ]
   pull_request:
   pull_request:
     branches: [ "main" ]
     branches: [ "main" ]
   merge_group:
   merge_group:

+ 1 - 1
e2e/fixed-layout/tests/layout.spec.ts

@@ -2,5 +2,5 @@ import { test, expect } from '@playwright/test';
 
 
 test('page render test', async ({ page }) => {
 test('page render test', async ({ page }) => {
   await page.goto('http://localhost:3000');
   await page.goto('http://localhost:3000');
-  await expect(page).toHaveScreenshot('homepage.png');
+  await page.waitForSelector('.gedit-playground-pipeline');
 });
 });

BIN
e2e/fixed-layout/tests/layout.spec.ts-snapshots/homepage-linux.png


+ 47 - 0
e2e/fixed-layout/tests/models/index.ts

@@ -0,0 +1,47 @@
+import type { Page } from '@playwright/test';
+
+type InsertEdgeOptions = {
+  from: string;
+  to: string;
+};
+
+class FixedLayoutModel {
+  private page: Page;
+
+  constructor(page: Page) {
+    this.page = page;
+  }
+
+  public async getNodeCount() {
+    return await this.page.locator('.gedit-flow-activity-node').count();
+  }
+
+  public async insert(searchText: string, { from, to }: InsertEdgeOptions) {
+    const preConditionNodes = await this.page.locator('.gedit-flow-activity-node');
+    const preCount = await preConditionNodes.count();
+    const element = await this.page.locator(
+      `[data-testid="sdk.flowcanvas.line.adder"][data-from="${from}"][data-to="${to}"]`
+    );
+
+    await element.waitFor({ state: 'visible' });
+    await element.scrollIntoViewIfNeeded();
+    await element.hover({
+      timeout: 3000,
+    });
+    const adder = this.page.locator('.semi-icon-plus_circle');
+
+    await adder.waitFor({ state: 'visible', timeout: 3000 });
+    await adder.scrollIntoViewIfNeeded();
+    await adder.click();
+    const nodeItem = await this.page.locator('.semi-popover-content').getByText(searchText);
+    await nodeItem.click();
+
+    await this.page.waitForFunction(
+      (expectedCount) =>
+        document.querySelectorAll('.gedit-flow-activity-node').length >= expectedCount,
+      preCount + 1
+    );
+  }
+}
+
+export default FixedLayoutModel;

+ 26 - 0
e2e/fixed-layout/tests/node.spec.ts

@@ -0,0 +1,26 @@
+import { test, expect } from '@playwright/test';
+
+import PageModel from './models';
+
+test.describe('node operations', () => {
+  let editorPage: PageModel;
+
+  test.beforeEach(async ({ page }) => {
+    editorPage = new PageModel(page);
+    await page.goto('http://localhost:3000');
+  });
+
+  test('node preview', async () => {
+    const defaultNodeCount = await editorPage.getNodeCount();
+    expect(defaultNodeCount).toEqual(10);
+  });
+
+  test('add node', async () => {
+    await editorPage.insert('condition', {
+      from: 'llm_0',
+      to: 'loop_0',
+    });
+    const defaultNodeCount = await editorPage.getNodeCount();
+    expect(defaultNodeCount).toEqual(13);
+  });
+});

+ 3 - 2
e2e/free-layout/tests/layout.spec.ts

@@ -1,8 +1,9 @@
-import { test, expect } from '@playwright/test';
+import { test } from '@playwright/test';
 
 
+// ensure layout render
 test.describe('page render screen shot', () => {
 test.describe('page render screen shot', () => {
   test('screenshot', async ({ page }) => {
   test('screenshot', async ({ page }) => {
     await page.goto('http://localhost:3000');
     await page.goto('http://localhost:3000');
-    await expect(page).toHaveScreenshot('homepage.png');
+    await page.waitForSelector('.gedit-playground-pipeline');
   });
   });
 });
 });

BIN
e2e/free-layout/tests/layout.spec.ts-snapshots/homepage-linux.png