@camunda/e2e-test-suite 0.0.1042 → 0.0.1043

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -903,7 +903,18 @@ class ModelerCreatePage {
903
903
  await (0, test_1.expect)(this.deploySubButton).toBeVisible({
904
904
  timeout: 60000,
905
905
  });
906
- await this.deploySubButton.click({ force: true });
906
+ // The modal renders Deploy enabled while it is still showing
907
+ // "Checking cluster availability", then disables it for
908
+ // ~0.1-2s once the cluster list lands and the deployment
909
+ // policy / linked-form checks run. A forced click inside that
910
+ // window is swallowed by the disabled button -- no deployment
911
+ // request is sent and the dialog never closes. Wait for the
912
+ // button to settle, and click without `force` so Playwright
913
+ // re-checks it is enabled at click time.
914
+ await (0, test_1.expect)(this.deploySubButton).toBeEnabled({
915
+ timeout: 20000,
916
+ });
917
+ await this.deploySubButton.click({ timeout: 20000 });
907
918
  return true;
908
919
  }
909
920
  catch {
@@ -24,6 +24,7 @@ declare class ModelerHomePage {
24
24
  readonly uploadFilesButton: Locator;
25
25
  readonly messageBanner: Locator;
26
26
  readonly idpTemplateOption: Locator;
27
+ readonly idpEmptyStateButton: Locator;
27
28
  readonly idpApplicationNameInput: Locator;
28
29
  readonly createIdpApplicationButton: Locator;
29
30
  readonly dialog: Locator;
@@ -67,6 +68,7 @@ declare class ModelerHomePage {
67
68
  clickMessageBanner(): Promise<void>;
68
69
  selectCluster(clusterName: string): Promise<void>;
69
70
  clickIdpApplicationTemplateOption(): Promise<void>;
71
+ startIdpApplicationCreation(): Promise<void>;
70
72
  assertFormBreadcrumbVisible(formName: string): Promise<void>;
71
73
  }
72
74
  export { ModelerHomePage };
@@ -43,6 +43,7 @@ class ModelerHomePage {
43
43
  uploadFilesButton;
44
44
  messageBanner;
45
45
  idpTemplateOption;
46
+ idpEmptyStateButton;
46
47
  idpApplicationNameInput;
47
48
  createIdpApplicationButton;
48
49
  dialog;
@@ -74,6 +75,9 @@ class ModelerHomePage {
74
75
  this.idpTemplateOption = page
75
76
  .locator('[data-test="create-idp-application"]')
76
77
  .getByText('IDP Application');
78
+ this.idpEmptyStateButton = page.getByRole('button', {
79
+ name: 'Create IDP application',
80
+ });
77
81
  this.diagramTypeDropdown = page.locator('[data-test="diagram-dropdown"]');
78
82
  // Matched on the test id alone: hub's design-system variant of the create
79
83
  // menu renders "BPMN diagram" (lowercase d), so a text filter breaks the
@@ -605,6 +609,25 @@ class ModelerHomePage {
605
609
  async clickIdpApplicationTemplateOption() {
606
610
  await this.idpTemplateOption.click({ timeout: 120000 });
607
611
  }
612
+ // Which control starts an IDP application depends on whether the workspace
613
+ // root already holds a resource: hub's EntityTable renders the toolbar's
614
+ // create menu OR the empty state, never both (same split
615
+ // clickCreateProcessApplication has to straddle). A workspace whose very
616
+ // first resource is the IDP application only ever offers the empty state's
617
+ // "Create IDP application" button, so waiting for the create menu there
618
+ // times out. Race both entry points, then use whichever one rendered.
619
+ async startIdpApplicationCreation() {
620
+ const rootLoaded = await this.becameVisible(this.idpEmptyStateButton.or(this.diagramTypeDropdown).first(), 60000);
621
+ if (!rootLoaded) {
622
+ await this.page.reload();
623
+ }
624
+ if (await this.becameVisible(this.idpEmptyStateButton, 5000)) {
625
+ await this.idpEmptyStateButton.click({ timeout: 60000 });
626
+ return;
627
+ }
628
+ await this.clickWorkspaceDiagramTypeDropdown();
629
+ await this.clickIdpApplicationTemplateOption();
630
+ }
608
631
  async assertFormBreadcrumbVisible(formName) {
609
632
  await (0, test_1.expect)(this.formNameBreadcrumb(formName)).toBeVisible({
610
633
  timeout: 120000,
@@ -87,10 +87,11 @@ _8_8_1.test.describe('IDP User Flow Tests', () => {
87
87
  await modelerHomePage.clickCrossComponentProjectFolder();
88
88
  });
89
89
  await _8_8_1.test.step('Add an IDP application to the project', async () => {
90
- // Workspace-level menu: an IDP application can only be created at
91
- // workspace root, never inside a process application.
92
- await modelerHomePage.clickWorkspaceDiagramTypeDropdown();
93
- await modelerHomePage.clickIdpApplicationTemplateOption();
90
+ // Workspace root only: an IDP application can never be created
91
+ // inside a process application. The entry point there is the create
92
+ // menu or the empty state, depending on whether the workspace
93
+ // already holds a resource.
94
+ await modelerHomePage.startIdpApplicationCreation();
94
95
  });
95
96
  await _8_8_1.test.step('Creates a document extraction template', async () => {
96
97
  await modelerHomePage.enterIdpApplicationName(idpApplicationName);
@@ -161,10 +162,11 @@ _8_8_1.test.describe('IDP User Flow Tests', () => {
161
162
  await modelerHomePage.clickCrossComponentProjectFolder();
162
163
  });
163
164
  await _8_8_1.test.step('Add an IDP application to the project', async () => {
164
- // Workspace-level menu: an IDP application can only be created at
165
- // workspace root, never inside a process application.
166
- await modelerHomePage.clickWorkspaceDiagramTypeDropdown();
167
- await modelerHomePage.clickIdpApplicationTemplateOption();
165
+ // Workspace root only: an IDP application can never be created
166
+ // inside a process application. The entry point there is the create
167
+ // menu or the empty state, depending on whether the workspace
168
+ // already holds a resource.
169
+ await modelerHomePage.startIdpApplicationCreation();
168
170
  });
169
171
  await _8_8_1.test.step('Creates a document extraction template', async () => {
170
172
  await modelerHomePage.enterIdpApplicationName(idpApplicationName);
@@ -203,7 +203,8 @@ _8_8_1.test.describe('Optimize User Flow Tests', () => {
203
203
  await (0, test_1.expect)(newOperateTab.getByText('Displaying data from 1 instance.')).toBeVisible({ timeout: 90000 });
204
204
  });
205
205
  });
206
- (0, _8_8_1.test)('Process Import Flow @tasklistV1', async ({ page, homePage, modelerHomePage, appsPage, modelerCreatePage, }) => {
206
+ // Skipped due to bug #60153: https://github.com/camunda/camunda/issues/60153
207
+ _8_8_1.test.skip('Process Import Flow @tasklistV1', async ({ page, homePage, modelerHomePage, appsPage, modelerCreatePage, }) => {
207
208
  _8_8_1.test.slow();
208
209
  const processName = 'Process Import Flow' + (await (0, _setup_1.generateRandomStringAsync)(6));
209
210
  await _8_8_1.test.step('Navigate to Web Modeler', async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.1042",
3
+ "version": "0.0.1043",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",