@camunda/e2e-test-suite 0.0.1275 → 0.0.1276

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.
@@ -280,7 +280,14 @@ class ClusterPage {
280
280
  await this.clickClusterNameInput();
281
281
  await this.fillClusterNameInput(name);
282
282
  await this.clickClusterType();
283
- await this.page.getByRole('tab', { name: region }).click();
283
+ // Same design-system role="radio" fallback as the choice()-wrapped
284
+ // locators above -- `region` is a runtime parameter ('GCP'/'AWS') so
285
+ // this can't reuse a named locator directly. Ported from
286
+ // pages/8.9/ClusterPage.ts.
287
+ await this.page
288
+ .getByRole('tab', { name: region })
289
+ .or(this.page.getByRole('radio', { name: region, exact: true }))
290
+ .click();
284
291
  await this.selectSubRegion(region);
285
292
  await this.clickClusterOption();
286
293
  await this.determineTasklistAPI(tasklistV1Api);
@@ -118,9 +118,16 @@ class ConsoleOrganizationPage {
118
118
  name: 'danger',
119
119
  })
120
120
  .last();
121
- this.filterTableSearchbox = page.getByRole('searchbox', {
122
- name: 'Filter table',
123
- });
121
+ // Camunda Hub's design-system Organization Management page renamed the
122
+ // Carbon TableToolbarSearch's default "Filter table" label to plain
123
+ // "Search" (same rename already ported elsewhere for the secrets
124
+ // panels). Confirmed against camunda-hub's own
125
+ // e2e-playwright/pages/Console/ConsoleOrgManagementPage.ts, which already
126
+ // uses `getByRole('searchbox', {name: 'Search'})` for this exact users
127
+ // list. Match either.
128
+ this.filterTableSearchbox = page
129
+ .getByRole('searchbox', { name: 'Filter table' })
130
+ .or(page.getByRole('searchbox', { name: 'Search' }));
124
131
  }
125
132
  async filterTable(names) {
126
133
  for (const name of names) {
@@ -48,21 +48,49 @@ class ProcessApplicationPage {
48
48
  // .first() defensively only: hub renders exactly one of these today, in the
49
49
  // workspace-root empty state. A future second placement should not turn
50
50
  // every PA-creating test into a strict-mode violation.
51
+ //
52
+ // hubTerm('project') (utils/hub-terminology.ts) renames "process
53
+ // application" to "project" in copy once an org has workspacesEnabled --
54
+ // confirmed from a nightly trace screenshot on hub.ultrawombat.com: the
55
+ // workspace-root empty state renders "Create project" (not "Create
56
+ // process application"), and EmptyStateActionButtons.tsx's source
57
+ // confirms the button text is `Create {hubTerm('project')}`. Accept both
58
+ // so this keeps working on orgs at either rollout stage.
59
+ // exact:true on both -- without it, "Create project" substring-matches
60
+ // the split button's own "Create project options" chevron too, and
61
+ // .first() then picks whichever the DOM happens to order first. Same
62
+ // pattern already fixed for the same chevron in
63
+ // ModelerHomePage.ts's createNewProjectButton/createWorkspaceButton.
51
64
  this.createProcessApplicationButton = page
52
- .getByRole('button', { name: 'Create process application' })
65
+ .getByRole('button', { name: 'Create process application', exact: true })
66
+ .or(page.getByRole('button', { name: 'Create project', exact: true }))
53
67
  .first();
54
68
  this.createProcessApplicationOption = page.locator('[data-test="create-process-application"]');
55
- this.creationDialog = page.getByRole('dialog', {
56
- name: 'Create a process application',
57
- });
69
+ // Same hubTerm('project') rename as the button above --
70
+ // CreationModalDs.common.tsx's dialog title is `Create a
71
+ // {hubTerm('project')}`. A confirmed nightly trace showed a THIRD shape,
72
+ // live on this SaaS org: `app/pages/workspace-projects/features/
73
+ // create-project/CreateProjectModal.tsx` -- a newer, unrelated component
74
+ // (built on `api/projects`' useCreateProject, not processApplicationStore)
75
+ // titled plainly "Create project" (no "a"), with its field labelled
76
+ // "Project name" (not "Name") and its submit button reading "Create
77
+ // project" (not "Create"). Accept all three shapes.
78
+ this.creationDialog = page
79
+ .getByRole('dialog', { name: 'Create a process application' })
80
+ .or(page.getByRole('dialog', { name: 'Create a project' }))
81
+ .or(page.getByRole('dialog', { name: 'Create project', exact: true }));
58
82
  // Deliberately scoped to the dialog: ModelerCreatePage owns an unscoped
59
83
  // getByLabel('Name', {exact: true}) for the properties panel, which would
60
84
  // resolve to two elements while the creation modal is open.
61
- this.nameInput = this.creationDialog.getByLabel('Name', { exact: true });
62
- this.submitButton = this.creationDialog.getByRole('button', {
63
- name: 'Create',
85
+ this.nameInput = this.creationDialog
86
+ .getByLabel('Name', { exact: true })
87
+ .or(this.creationDialog.getByLabel('Project name', { exact: true }));
88
+ this.submitButton = this.creationDialog
89
+ .getByRole('button', { name: 'Create', exact: true })
90
+ .or(this.creationDialog.getByRole('button', {
91
+ name: 'Create project',
64
92
  exact: true,
65
- });
93
+ }));
66
94
  this.cancelButton = this.creationDialog.getByRole('button', {
67
95
  name: 'Cancel',
68
96
  exact: true,
@@ -7,8 +7,18 @@ class SettingsPage {
7
7
  logoutButton;
8
8
  constructor(page) {
9
9
  this.page = page;
10
- this.openSettingsButton = page.getByLabel('Open Settings');
11
- this.logoutButton = page.getByRole('button', { name: 'Log out' });
10
+ // Camunda Hub's design-system shell renders a `UserMenu` button named
11
+ // "User menu, <full name>" in place of the legacy Carbon "Open Settings"
12
+ // icon button, and its logout control is a menuitem inside that menu
13
+ // rather than a plain button. Both shells still ship -- match either.
14
+ // Ported from camunda-hub's own e2e-playwright/pages/Console/ConsoleBasePage.ts
15
+ // (settingsButton / dsLogoutMenuItem / carbonLogoutButton).
16
+ this.openSettingsButton = page
17
+ .getByRole('button', { name: /^User menu,/ })
18
+ .or(page.getByLabel('Open Settings'));
19
+ this.logoutButton = page
20
+ .getByRole('menuitem', { name: 'Log out', exact: true })
21
+ .or(page.getByRole('button', { name: 'Log out' }));
12
22
  }
13
23
  async clickOpenSettingsButton(retries = 3) {
14
24
  for (let i = 0; i < retries; i++) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.1275",
3
+ "version": "0.0.1276",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",