feat: e2e tests with playwright #5
ui-tests.yml
on: pull_request
Playwright E2E Tests
6m 20s
Annotations
10 errors, 1 warning, and 1 notice
|
[chromium] › e2e/tests/workflow-editor.spec.ts:31:6 › Workflow Editor › should display existing nodes from workflow:
e2e/helpers/frappe.ts#L65
4) [chromium] › e2e/tests/workflow-editor.spec.ts:31:6 › Workflow Editor › should display existing nodes from workflow
Error: Failed to create Hazel Workflow: {"exception":"frappe.exceptions.ValidationError: Trigger is required for the workflow!","exc_type":"ValidationError","_exc_source":"hazelnode (app)","exc":"[\"Traceback (most recent call last):\\n File \\\"apps/frappe/frappe/app.py\\\", line 121, in application\\n response = frappe.api.handle(request)\\n File \\\"apps/frappe/frappe/api/__init__.py\\\", line 63, in handle\\n data = endpoint(**arguments)\\n File \\\"apps/frappe/frappe/api/v1.py\\\", line 46, in create_doc\\n return frappe.new_doc(doctype, **data).insert()\\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\\n File \\\"apps/frappe/frappe/model/document.py\\\", line 447, in insert\\n self.run_before_save_methods()\\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\\n File \\\"apps/frappe/frappe/model/document.py\\\", line 1332, in run_before_save_methods\\n self.run_method(\\\"validate\\\")\\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^\\n File \\\"apps/frappe/frappe/model/document.py\\\", line 1181, in run_method\\n out = Document.hook(fn)(self, *args, **kwargs)\\n File \\\"apps/frappe/frappe/model/document.py\\\", line 1578, in composer\\n return composed(self, method, *args, **kwargs)\\n File \\\"apps/frappe/frappe/model/document.py\\\", line 1556, in runner\\n add_to_return_value(self, fn(self, *args, **kwargs))\\n ~~^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"apps/frappe/frappe/model/document.py\\\", line 1178, in fn\\n return method_object(*args, **kwargs)\\n File \\\"apps/hazelnode/hazelnode/hazelnode/doctype/hazel_workflow/hazel_workflow.py\\\", line 34, in validate\\n self.validate_nodes()\\n ~~~~~~~~~~~~~~~~~~~^^\\n File \\\"apps/hazelnode/hazelnode/hazelnode/doctype/hazel_workflow/hazel_workflow.py\\\", line 37, in validate_nodes\\n self.validate_trigger_is_required()\\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^\\n File \\\"apps/hazelnode/hazelnode/hazelnode/doctype/hazel_workflow/hazel_workflow.py\\\", line 47, in validate_trigger_is_required\\n frappe.throw('Trigger is required for the workflow!')\\n ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"apps/frappe/frappe/utils/messages.py\\\", line 148, in throw\\n msgprint(\\n ~~~~~~~~^\\n \\tmsg,\\n ^^^^\\n ...<6 lines>...\\n \\tprimary_action=primary_action,\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n )\\n ^\\n File \\\"apps/frappe/frappe/utils/messages.py\\\", line 109, in msgprint\\n _raise_exception()\\n ~~~~~~~~~~~~~~~~^^\\n File \\\"apps/frappe/frappe/utils/messages.py\\\", line 58, in _raise_exception\\n raise exc\\nfrappe.exceptions.ValidationError: Trigger is required for the workflow!\\n\"]","_server_messages":"[\"{\\\"message\\\":\\\"Trigger is required for the workflow!\\\",\\\"as_table\\\":false,\\\"title\\\":\\\"Message\\\",\\\"indicator\\\":\\\"red\\\",\\\"raise_exception\\\":1,\\\"__frappe_exc_id\\\":\\\"a009418dd451c6675faa81fc21e5e5685635e51a8bc0c51c8051e219\\\"}\"]"}
at ../helpers/frappe.ts:65
63 | if (!response.ok()) {
64 | const error = await response.text();
> 65 | throw new Error(`Failed to create ${doctype}: ${error}`);
| ^
66 | }
67 |
68 | const result = await response.json();
at createDoc (/home/runner/work/hazelnode/hazelnode/e2e/helpers/frappe.ts:65:9)
at createTestWorkflow (/home/runner/work/hazelnode/hazelnode/e2e/helpers/workflow.ts:50:14)
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-editor.spec.ts:36:24
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:111:6 › Workflow CRUD Operations › should cancel workflow creation dialog:
e2e/pages/workflow-list.page.ts#L71
3) [chromium] › e2e/tests/workflow-crud.spec.ts:111:6 › Workflow CRUD Operations › should cancel workflow creation dialog
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TimeoutError: locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('[role="dialog"]') to be visible
35 × locator resolved to hidden <div data-open="" role="dialog" tabindex="-1" aria-modal="true" id="headlessui-dialog-:r0:" data-headlessui-state="open" aria-labelledby="headlessui-dialog-title-:r2:">…</div>
at ../pages/workflow-list.page.ts:71
69 | async openCreateDialog(): Promise<void> {
70 | await this.newWorkflowButton.click();
> 71 | await this.createDialog.waitFor({ state: 'visible' });
| ^
72 | }
73 |
74 | /**
at WorkflowListPage.openCreateDialog (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:71:27)
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:115:3
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:111:6 › Workflow CRUD Operations › should cancel workflow creation dialog:
e2e/pages/workflow-list.page.ts#L71
3) [chromium] › e2e/tests/workflow-crud.spec.ts:111:6 › Workflow CRUD Operations › should cancel workflow creation dialog
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TimeoutError: locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('[role="dialog"]') to be visible
35 × locator resolved to hidden <div data-open="" role="dialog" tabindex="-1" aria-modal="true" id="headlessui-dialog-:r0:" data-headlessui-state="open" aria-labelledby="headlessui-dialog-title-:r2:">…</div>
at ../pages/workflow-list.page.ts:71
69 | async openCreateDialog(): Promise<void> {
70 | await this.newWorkflowButton.click();
> 71 | await this.createDialog.waitFor({ state: 'visible' });
| ^
72 | }
73 |
74 | /**
at WorkflowListPage.openCreateDialog (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:71:27)
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:115:3
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:111:6 › Workflow CRUD Operations › should cancel workflow creation dialog:
e2e/pages/workflow-list.page.ts#L71
3) [chromium] › e2e/tests/workflow-crud.spec.ts:111:6 › Workflow CRUD Operations › should cancel workflow creation dialog
TimeoutError: locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('[role="dialog"]') to be visible
35 × locator resolved to hidden <div data-open="" role="dialog" tabindex="-1" aria-modal="true" id="headlessui-dialog-:r0:" data-headlessui-state="open" aria-labelledby="headlessui-dialog-title-:r2:">…</div>
at ../pages/workflow-list.page.ts:71
69 | async openCreateDialog(): Promise<void> {
70 | await this.newWorkflowButton.click();
> 71 | await this.createDialog.waitFor({ state: 'visible' });
| ^
72 | }
73 |
74 | /**
at WorkflowListPage.openCreateDialog (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:71:27)
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:115:3
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:82:6 › Workflow CRUD Operations › should toggle workflow enabled state:
e2e/tests/workflow-crud.spec.ts#L98
2) [chromium] › e2e/tests/workflow-crud.spec.ts:82:6 › Workflow CRUD Operations › should toggle workflow enabled state
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: undefined
96 | const workflow = await getWorkflow(request, workflowName);
97 | // Initial state should be 0/false, after toggle should be 1/true
> 98 | expect(workflow.is_active).toBeTruthy();
| ^
99 |
100 | // Toggle back
101 | await listPage.toggleWorkflowEnabled(workflowTitle);
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:98:31
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:82:6 › Workflow CRUD Operations › should toggle workflow enabled state:
e2e/tests/workflow-crud.spec.ts#L98
2) [chromium] › e2e/tests/workflow-crud.spec.ts:82:6 › Workflow CRUD Operations › should toggle workflow enabled state
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: undefined
96 | const workflow = await getWorkflow(request, workflowName);
97 | // Initial state should be 0/false, after toggle should be 1/true
> 98 | expect(workflow.is_active).toBeTruthy();
| ^
99 |
100 | // Toggle back
101 | await listPage.toggleWorkflowEnabled(workflowTitle);
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:98:31
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:82:6 › Workflow CRUD Operations › should toggle workflow enabled state:
e2e/tests/workflow-crud.spec.ts#L98
2) [chromium] › e2e/tests/workflow-crud.spec.ts:82:6 › Workflow CRUD Operations › should toggle workflow enabled state
Error: expect(received).toBeTruthy()
Received: undefined
96 | const workflow = await getWorkflow(request, workflowName);
97 | // Initial state should be 0/false, after toggle should be 1/true
> 98 | expect(workflow.is_active).toBeTruthy();
| ^
99 |
100 | // Toggle back
101 | await listPage.toggleWorkflowEnabled(workflowTitle);
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:98:31
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:23:6 › Workflow CRUD Operations › should create a new workflow via UI:
e2e/pages/workflow-list.page.ts#L71
1) [chromium] › e2e/tests/workflow-crud.spec.ts:23:6 › Workflow CRUD Operations › should create a new workflow via UI
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TimeoutError: locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('[role="dialog"]') to be visible
35 × locator resolved to hidden <div data-open="" role="dialog" tabindex="-1" aria-modal="true" id="headlessui-dialog-:r0:" data-headlessui-state="open" aria-labelledby="headlessui-dialog-title-:r2:">…</div>
at ../pages/workflow-list.page.ts:71
69 | async openCreateDialog(): Promise<void> {
70 | await this.newWorkflowButton.click();
> 71 | await this.createDialog.waitFor({ state: 'visible' });
| ^
72 | }
73 |
74 | /**
at WorkflowListPage.openCreateDialog (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:71:27)
at WorkflowListPage.createWorkflow (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:78:3)
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:28:3
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:23:6 › Workflow CRUD Operations › should create a new workflow via UI:
e2e/pages/workflow-list.page.ts#L71
1) [chromium] › e2e/tests/workflow-crud.spec.ts:23:6 › Workflow CRUD Operations › should create a new workflow via UI
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TimeoutError: locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('[role="dialog"]') to be visible
35 × locator resolved to hidden <div data-open="" role="dialog" tabindex="-1" aria-modal="true" id="headlessui-dialog-:r0:" data-headlessui-state="open" aria-labelledby="headlessui-dialog-title-:r2:">…</div>
at ../pages/workflow-list.page.ts:71
69 | async openCreateDialog(): Promise<void> {
70 | await this.newWorkflowButton.click();
> 71 | await this.createDialog.waitFor({ state: 'visible' });
| ^
72 | }
73 |
74 | /**
at WorkflowListPage.openCreateDialog (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:71:27)
at WorkflowListPage.createWorkflow (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:78:3)
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:28:3
|
|
[chromium] › e2e/tests/workflow-crud.spec.ts:23:6 › Workflow CRUD Operations › should create a new workflow via UI:
e2e/pages/workflow-list.page.ts#L71
1) [chromium] › e2e/tests/workflow-crud.spec.ts:23:6 › Workflow CRUD Operations › should create a new workflow via UI
TimeoutError: locator.waitFor: Timeout 15000ms exceeded.
Call log:
- waiting for locator('[role="dialog"]') to be visible
35 × locator resolved to hidden <div data-open="" role="dialog" tabindex="-1" aria-modal="true" id="headlessui-dialog-:r0:" data-headlessui-state="open" aria-labelledby="headlessui-dialog-title-:r2:">…</div>
at ../pages/workflow-list.page.ts:71
69 | async openCreateDialog(): Promise<void> {
70 | await this.newWorkflowButton.click();
> 71 | await this.createDialog.waitFor({ state: 'visible' });
| ^
72 | }
73 |
74 | /**
at WorkflowListPage.openCreateDialog (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:71:27)
at WorkflowListPage.createWorkflow (/home/runner/work/hazelnode/hazelnode/e2e/pages/workflow-list.page.ts:78:3)
at /home/runner/work/hazelnode/hazelnode/e2e/tests/workflow-crud.spec.ts:28:3
|
|
Playwright E2E Tests
No files were found with the provided path: playwright-report/. No artifacts will be uploaded.
|
|
🎭 Playwright Run Summary
10 failed
[chromium] › e2e/tests/workflow-crud.spec.ts:23:6 › Workflow CRUD Operations › should create a new workflow via UI
[chromium] › e2e/tests/workflow-crud.spec.ts:82:6 › Workflow CRUD Operations › should toggle workflow enabled state
[chromium] › e2e/tests/workflow-crud.spec.ts:111:6 › Workflow CRUD Operations › should cancel workflow creation dialog
[chromium] › e2e/tests/workflow-editor.spec.ts:31:6 › Workflow Editor › should display existing nodes from workflow
[chromium] › e2e/tests/workflow-editor.spec.ts:53:6 › Workflow Editor › should display existing edges from workflow
[chromium] › e2e/tests/workflow-editor.spec.ts:112:6 › Workflow Editor › should select a node when clicked
[chromium] › e2e/tests/workflow-editor.spec.ts:137:6 › Workflow Editor › should use zoom controls
[chromium] › e2e/tests/workflow-editor.spec.ts:161:6 › Workflow Editor › should persist node count after page reload
[chromium] › e2e/tests/workflow-editor.spec.ts:202:6 › Workflow Editor - Node Interactions › should drag and drop node from palette to canvas
[chromium] › e2e/tests/workflow-editor.spec.ts:230:6 › Workflow Editor - Node Interactions › should delete node with keyboard
13 passed (3.4m)
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
test-results
Expired
|
5.32 MB |
sha256:8c31e8f3afb04068b501989734c17f5b4890d4d112d97e95d19986915e7d0cb7
|
|