@camunda/e2e-test-suite 0.0.676 → 0.0.678

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.
@@ -26,6 +26,7 @@ declare class Authorization {
26
26
  resourceId: string;
27
27
  accessPermissions: string[];
28
28
  }): Promise<void>;
29
+ selectResourceTypeFromDialog(resourceType: string): Promise<void>;
29
30
  deleteAuthorization(resourceId: string, resourceType: string): Promise<void>;
30
31
  }
31
32
  export { Authorization };
@@ -117,19 +117,7 @@ class Authorization {
117
117
  .first();
118
118
  await (0, test_1.expect)(ownerMenuItem).toBeVisible({ timeout: 60000 });
119
119
  await ownerMenuItem.click({ timeout: 20000 });
120
- // Resource type is pre-filled and locked starting with the Identity
121
- // commit camunda/camunda 8c72d29 (2026-05-26, "fix: prefill and lock
122
- // resource type in create authorization modal"). The modal now
123
- // initializes `resourceType` to whatever tab the user opened the
124
- // modal from (the test calls clickResourceTab/clickComponentTab/etc.
125
- // before createAuthorization), and the Dropdown is rendered with a
126
- // hardcoded `disabled` prop — see
127
- // identity/client/src/pages/authorizations/modals/add-modal/AddModal.tsx
128
- // line ~184. There is no test-side interaction that can enable it,
129
- // and no interaction is needed: the form already has the right
130
- // value. Skip the dropdown click entirely. (8.9 still uses the older
131
- // unlocked Dropdown, which is why its same-shaped page object
132
- // continues to pass.)
120
+ await this.selectResourceTypeFromDialog(authorization.resourceType);
133
121
  await this.createAuthorizationResourceIdField.fill(authorization.resourceId);
134
122
  for (const permission of authorization.accessPermissions) {
135
123
  await this.createAuthorizationAccessPermission(permission).click({
@@ -148,6 +136,14 @@ class Authorization {
148
136
  clickLocator: this.selectResourceTypeTab(authorization.resourceType),
149
137
  });
150
138
  }
139
+ async selectResourceTypeFromDialog(resourceType) {
140
+ const isDisabled = await this.createAuthorizationResourceTypeDropdown.isDisabled();
141
+ if (isDisabled) {
142
+ return;
143
+ }
144
+ await this.createAuthorizationResourceTypeDropdown.click();
145
+ await this.createAuthorizationResourceTypeOption(resourceType).click();
146
+ }
151
147
  async deleteAuthorization(resourceId, resourceType) {
152
148
  const locator = this.deleteAuthorizationButton(resourceId);
153
149
  await (0, expectLocatorWithPagination_1.expectLocatorWithPagination)(this.page, locator, {
@@ -50,6 +50,13 @@ class HomePage {
50
50
  }
51
51
  async clickClusters() {
52
52
  await (0, test_1.expect)(this.clusterTab).toBeVisible({ timeout: 30000 });
53
+ // Dismiss any modal that may be intercepting pointer events on the nav link.
54
+ if (await this.informationDialog
55
+ .last()
56
+ .isVisible({ timeout: 2000 })
57
+ .catch(() => false)) {
58
+ await this.closeInformationDialog();
59
+ }
53
60
  await this.clusterTab.click({ timeout: 15000 });
54
61
  }
55
62
  async clickDashboard() {
@@ -287,7 +287,7 @@ async function disableRBA(clusterName, homePage, clusterPage, clusterDetailsPage
287
287
  await clusterDetailsPage.clickSettingsTab();
288
288
  await clusterDetailsPage.disableAuthorizations();
289
289
  await homePage.clickClusters();
290
- await clusterPage.assertClusterHealthyStatusWithRetry(clusterName);
290
+ await clusterPage.assertClusterHealthyStatusWithRetry(clusterName, 120000, 600000);
291
291
  await clusterPage.clickClusterLink(clusterName);
292
292
  await (0, test_1.expect)(clusterDetailsPage.rbaEnabledMessage.first()).not.toBeVisible({
293
293
  timeout: 30000,
@@ -321,7 +321,7 @@ async function enableAuthorizations(clusterName, homePage, clusterPage, clusterD
321
321
  await clusterDetailsPage.clickSettingsTab();
322
322
  await clusterDetailsPage.enableAuthorizations();
323
323
  await homePage.clickClusters();
324
- await clusterPage.assertClusterHealthyStatusWithRetry(clusterName);
324
+ await clusterPage.assertClusterHealthyStatusWithRetry(clusterName, 120000, 600000);
325
325
  await clusterPage.clickClusterLink(clusterName);
326
326
  await clusterDetailsPage.assertComponentsHealth();
327
327
  }
@@ -176,22 +176,25 @@ _8_10_1.test.describe('Orchestration Cluster MCP Server — /mcp/processes tools
176
176
  const apiContext = await (0, apiHelpers_1.getApiRequestContext)();
177
177
  let instanceKey = smokeProcessInstanceKey;
178
178
  await _8_10_1.test.step('Resolve process instance key', async () => {
179
- if (!instanceKey) {
180
- // Attempt to find any mcpAsToolProcess instance via the search API.
181
- const searchRes = await apiContext.post(processInstancesSearchUrl, {
182
- headers: (0, mcpHelpers_1.buildMcpHeaders)(authToken, mcpSessionId),
183
- data: {
184
- filter: { processDefinitionId: 'mcpAsToolProcess' },
185
- sort: [{ field: 'processInstanceKey', order: 'desc' }],
186
- page: { limit: 1 },
187
- },
188
- });
189
- if (searchRes.ok()) {
190
- const searchJson = (await searchRes.json());
191
- instanceKey = searchJson.items[0]?.processInstanceKey ?? null;
179
+ await (0, test_1.expect)(async () => {
180
+ if (!instanceKey) {
181
+ // Attempt to find any mcpAsToolProcess instance via the search API.
182
+ // Wrapped in toPass so propagation lag doesn't cause a one-shot failure.
183
+ const searchRes = await apiContext.post(processInstancesSearchUrl, {
184
+ headers: (0, mcpHelpers_1.buildMcpHeaders)(authToken, mcpSessionId),
185
+ data: {
186
+ filter: { processDefinitionId: 'mcpAsToolProcess' },
187
+ sort: [{ field: 'processInstanceKey', order: 'desc' }],
188
+ page: { limit: 1 },
189
+ },
190
+ });
191
+ if (searchRes.ok()) {
192
+ const searchJson = (await searchRes.json());
193
+ instanceKey = searchJson.items[0]?.processInstanceKey ?? null;
194
+ }
192
195
  }
193
- }
194
- (0, test_1.expect)(instanceKey, 'No mcpAsToolProcess instance available for getProcessInstance smoke test').not.toBeNull();
196
+ (0, test_1.expect)(instanceKey, 'No mcpAsToolProcess instance available for getProcessInstance smoke test').not.toBeNull();
197
+ }).toPass(constants_1.defaultAssertionOptions);
195
198
  });
196
199
  await _8_10_1.test.step('Call getProcessInstance tool and verify response', async () => {
197
200
  const body = await (0, mcpHelpers_1.callTool)(apiContext, mcpProcessesUrl, authToken, mcpSessionId, 'getProcessInstance', { processInstanceKey: instanceKey });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.676",
3
+ "version": "0.0.678",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",