@camunda/e2e-test-suite 0.0.804 → 0.0.806

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.
@@ -27,13 +27,16 @@ class AuditLogPage {
27
27
  await (0, test_1.expect)(this.auditLogTab).toBeVisible({ timeout: 60000 });
28
28
  await this.auditLogTab.click({ timeout: 60000 });
29
29
  }
30
+ // Returns true when the category was newly checked (form made dirty).
30
31
  async ensureChecked(category) {
31
32
  const checkbox = this.clientCategoryCheckbox(category);
32
33
  await (0, test_1.expect)(checkbox).toBeAttached({ timeout: 30000 });
33
- if (!(await checkbox.isChecked())) {
34
- await this.clientCategoryLabel(category).click({ timeout: 30000 });
35
- await (0, test_1.expect)(checkbox).toBeChecked();
34
+ if (await checkbox.isChecked()) {
35
+ return false;
36
36
  }
37
+ await this.clientCategoryLabel(category).click({ timeout: 30000 });
38
+ await (0, test_1.expect)(checkbox).toBeChecked();
39
+ return true;
37
40
  }
38
41
  async enableClientOperationLogging() {
39
42
  const categories = [
@@ -41,10 +44,18 @@ class AuditLogPage {
41
44
  'Deployed resources',
42
45
  'User tasks',
43
46
  ];
47
+ let changed = false;
44
48
  for (const category of categories) {
45
- await this.ensureChecked(category);
49
+ if (await this.ensureChecked(category)) {
50
+ changed = true;
51
+ }
46
52
  }
47
- if (await this.updateButton.isEnabled()) {
53
+ // Only persist when a toggle actually dirtied the form. Wait for the Update
54
+ // button to enable rather than probing its state at a single instant —
55
+ // Carbon enables it a tick after the last checkbox re-renders, so a bare
56
+ // isEnabled() probe could skip the save and leave audit logging off.
57
+ if (changed) {
58
+ await (0, test_1.expect)(this.updateButton).toBeEnabled({ timeout: 60000 });
48
59
  await this.updateButton.click({ timeout: 60000 });
49
60
  await (0, test_1.expect)(this.updateButton).toBeDisabled({ timeout: 60000 });
50
61
  }
@@ -146,10 +146,8 @@ class ConsoleOrganizationPage {
146
146
  });
147
147
  this.deleteButton = page.getByRole('button', { name: 'delete' });
148
148
  this.deleteSubButton = page
149
- .getByRole('button', {
150
- name: 'danger',
151
- })
152
- .last();
149
+ .getByRole('dialog')
150
+ .getByRole('button', { name: 'delete' });
153
151
  this.filterTableSearchbox = page.getByRole('searchbox', {
154
152
  name: 'Filter table',
155
153
  });
@@ -511,20 +509,13 @@ class ConsoleOrganizationPage {
511
509
  await this.organizationManagementLink.click();
512
510
  }
513
511
  async deleteAllGroups() {
514
- try {
515
- await this.deleteButton
516
- .first()
517
- .waitFor({ state: 'visible', timeout: 60000 });
518
- const count = await this.deleteButton.count();
519
- if (count > 0) {
520
- for (let i = 0; i < count; i++) {
521
- await this.deleteButton.nth(i).click({ timeout: 60000 });
522
- await this.deleteSubButton.click({ timeout: 60000 });
523
- }
524
- }
525
- }
526
- catch (error) {
527
- console.log('Delete Button Not Clicked ' + error);
512
+ // Delete groups one at a time: each confirmed deletion re-renders and
513
+ // re-indexes the list, so always operate on the first remaining row
514
+ // instead of iterating by index over a mutating collection.
515
+ while ((await this.deleteButton.count()) > 0) {
516
+ await this.deleteButton.first().click({ timeout: 60000 });
517
+ await this.deleteSubButton.click({ timeout: 60000 });
518
+ await (0, test_1.expect)(this.deleteSubButton).not.toBeVisible({ timeout: 60000 });
528
519
  }
529
520
  }
530
521
  }
@@ -656,7 +656,10 @@ class ModelerCreatePage {
656
656
  await this.createEndEvent.click({ timeout: 60000 });
657
657
  }
658
658
  async clickCanvas() {
659
- await this.canvas.click({ timeout: 60000 });
659
+ await this.endEventCanvas.click({
660
+ timeout: 60000,
661
+ position: { x: 150, y: 20 },
662
+ });
660
663
  }
661
664
  async clickEndEventCanvas() {
662
665
  await this.endEventCanvas.click({ timeout: 60000 });
@@ -10,6 +10,7 @@ declare class TaskPanelPage {
10
10
  openTask(name: string): Promise<void>;
11
11
  filterBy(option: 'All open' | 'Unassigned' | 'Assigned to me' | 'Completed'): Promise<void>;
12
12
  taskCount(name: string): Promise<number>;
13
+ expectTaskCount(name: string, expectedCount: number): Promise<void>;
13
14
  clickTasksTab(): Promise<void>;
14
15
  scrollToLastTask(name: string): Promise<void>;
15
16
  scrollToFirstTask(name: string): Promise<void>;
@@ -53,6 +53,17 @@ class TaskPanelPage {
53
53
  await (0, sleep_1.sleep)(20000);
54
54
  return this.availableTasks.getByText(name, { exact: true }).count();
55
55
  }
56
+ async expectTaskCount(name, expectedCount) {
57
+ await (0, test_1.expect)(async () => {
58
+ const count = await this.availableTasks
59
+ .getByText(name, { exact: true })
60
+ .count();
61
+ (0, test_1.expect)(count).toBe(expectedCount);
62
+ }).toPass({
63
+ intervals: [5000, 10000, 15000, 20000],
64
+ timeout: 180000,
65
+ });
66
+ }
56
67
  async clickTasksTab() {
57
68
  await this.tasksTab.click();
58
69
  }
@@ -307,13 +307,11 @@ _8_7_1.test.describe('RBA Enabled User Flows Test', () => {
307
307
  //Start first process
308
308
  await taskPanelPage.clickProcessesTab();
309
309
  await taskProcessesPage.startProcess(processName1);
310
- const updatedFirstProcessTaskCount = await taskPanelPage.taskCount(processName1);
311
- (0, test_1.expect)(updatedFirstProcessTaskCount).toBe(firstProcessTaskCount + 1);
310
+ await taskPanelPage.expectTaskCount(processName1, firstProcessTaskCount + 1);
312
311
  //Start second process
313
312
  await taskPanelPage.clickProcessesTab();
314
313
  await taskProcessesPage.startProcess(processName2);
315
- const updatedSecondProcessTaskCount = await taskPanelPage.taskCount(processName2);
316
- (0, test_1.expect)(updatedSecondProcessTaskCount).toBe(secondProcessTaskCount + 1);
314
+ await taskPanelPage.expectTaskCount(processName2, secondProcessTaskCount + 1);
317
315
  });
318
316
  await _8_7_1.test.step('Navigate to Operate and Assert Both Processes Are Accessible', async () => {
319
317
  await appsPage.clickCamundaApps();
@@ -15,10 +15,12 @@ exports.deletionAssertionOptions = {
15
15
  timeout: 60000,
16
16
  };
17
17
  // Longest options for audit-log assertions: entries land in secondary storage
18
- // only after the audit config propagates to the exporters.
18
+ // only after the audit config propagates to the exporters, which is markedly
19
+ // slower on freshly-provisioned SaaS clusters. 90s occasionally lapsed before
20
+ // the CLIENT-actor PROCESS_INSTANCE CREATE entry surfaced, so poll for 180s.
19
21
  exports.auditLogAssertionOptions = {
20
- intervals: [5000, 10000, 15000, 15000],
21
- timeout: 90000,
22
+ intervals: [5000, 10000, 15000, 20000, 30000],
23
+ timeout: 180000,
22
24
  };
23
25
  exports.TIMEOUT = {
24
26
  short: 15000,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.804",
3
+ "version": "0.0.806",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",