@camunda/e2e-test-suite 0.0.455 → 0.0.457

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.
@@ -18,7 +18,7 @@ declare class TaskPanelPage {
18
18
  scrollToFirstTask(name: string): Promise<void>;
19
19
  clickCollapseFilter(): Promise<void>;
20
20
  clickProcessesTab(): Promise<void>;
21
- taskCount(name: string): Promise<number>;
21
+ taskCount(name: string, waitForStable?: boolean): Promise<number>;
22
22
  clickTasksTab(): Promise<void>;
23
23
  }
24
24
  export { TaskPanelPage };
@@ -83,8 +83,30 @@ class TaskPanelPage {
83
83
  await (0, test_1.expect)(this.processesPageTab).toBeVisible();
84
84
  await this.processesPageTab.click();
85
85
  }
86
- async taskCount(name) {
86
+ async taskCount(name, waitForStable = true) {
87
87
  await this.page.waitForLoadState('networkidle');
88
+ if (waitForStable) {
89
+ // Wait for the task list to stabilize: poll until count is unchanged for 2s
90
+ let previousCount = -1;
91
+ let stableIterations = 0;
92
+ const maxAttempts = 15; // 15 * 1s = 15s max wait
93
+ for (let i = 0; i < maxAttempts; i++) {
94
+ const currentCount = await this.availableTasks
95
+ .getByText(name, { exact: true })
96
+ .count();
97
+ if (currentCount === previousCount) {
98
+ stableIterations++;
99
+ if (stableIterations >= 2) {
100
+ return currentCount;
101
+ }
102
+ }
103
+ else {
104
+ stableIterations = 0;
105
+ previousCount = currentCount;
106
+ }
107
+ await this.page.waitForTimeout(1000);
108
+ }
109
+ }
88
110
  return this.availableTasks.getByText(name, { exact: true }).count();
89
111
  }
90
112
  async clickTasksTab() {
@@ -92,7 +92,7 @@ class TaskDetailsPage {
92
92
  this.tagList = page.getByPlaceholder('Search');
93
93
  this.detailsInfo = page.getByTestId('details-info');
94
94
  this.textInput = page.locator('[class="fjs-input"]');
95
- this.taskCompletedBanner = this.page.getByText('Task completed');
95
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
96
96
  this.assignedToMeText = page
97
97
  .getByTestId('assignee')
98
98
  .getByText('Assigned to me');
@@ -93,7 +93,7 @@ class TaskDetailsPage {
93
93
  this.detailsInfo = page.getByTestId('details-info');
94
94
  this.textInput = page.locator('[class="fjs-input"]');
95
95
  this.textInput = page.locator('[class="fjs-input"]');
96
- this.taskCompletedBanner = this.page.getByText('Task completed');
96
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
97
97
  this.assignedToMeText = page
98
98
  .getByTestId('assignee')
99
99
  .getByText('Assigned to me');
@@ -94,7 +94,7 @@ class TaskDetailsPage {
94
94
  this.detailsInfo = page.getByTestId('details-info');
95
95
  this.textInput = page.locator('[class="fjs-input"]');
96
96
  this.textInput = page.locator('[class="fjs-input"]');
97
- this.taskCompletedBanner = this.page.getByText('Task completed');
97
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
98
98
  this.assignedToMeText = page
99
99
  .getByTestId('assignee')
100
100
  .getByText('Assigned to me');
@@ -18,7 +18,7 @@ declare class TaskPanelPage {
18
18
  scrollToFirstTask(name: string): Promise<void>;
19
19
  clickCollapseFilter(): Promise<void>;
20
20
  clickProcessesTab(): Promise<void>;
21
- taskCount(name: string): Promise<number>;
21
+ taskCount(name: string, waitForStable?: boolean): Promise<number>;
22
22
  clickTasksTab(): Promise<void>;
23
23
  }
24
24
  export { TaskPanelPage };
@@ -82,8 +82,30 @@ class TaskPanelPage {
82
82
  await (0, test_1.expect)(this.processesPageTab).toBeVisible();
83
83
  await this.processesPageTab.click();
84
84
  }
85
- async taskCount(name) {
85
+ async taskCount(name, waitForStable = true) {
86
86
  await this.page.waitForLoadState('networkidle');
87
+ if (waitForStable) {
88
+ // Wait for the task list to stabilize: poll until count is unchanged for 2s
89
+ let previousCount = -1;
90
+ let stableIterations = 0;
91
+ const maxAttempts = 15; // 15 * 1s = 15s max wait
92
+ for (let i = 0; i < maxAttempts; i++) {
93
+ const currentCount = await this.availableTasks
94
+ .getByText(name, { exact: true })
95
+ .count();
96
+ if (currentCount === previousCount) {
97
+ stableIterations++;
98
+ if (stableIterations >= 2) {
99
+ return currentCount;
100
+ }
101
+ }
102
+ else {
103
+ stableIterations = 0;
104
+ previousCount = currentCount;
105
+ }
106
+ await this.page.waitForTimeout(1000);
107
+ }
108
+ }
87
109
  return this.availableTasks.getByText(name, { exact: true }).count();
88
110
  }
89
111
  async clickTasksTab() {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertReportWithRefreshes = exports.createReportForProcess = void 0;
4
4
  const UtilitiesPage_1 = require("../SM-8.8/UtilitiesPage");
5
5
  const createReportForProcess = async (page, optimizeCollectionsPage, optimizeReportPage, processName) => {
6
- const TOTAL_TIMEOUT_MS = 3 * 60 * 1000; // 3 minutes
6
+ const TOTAL_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes (OpenSearch ingestion can be slow)
7
7
  const startTime = Date.now();
8
8
  let attempt = 0;
9
9
  let found = false;
@@ -38,7 +38,7 @@ const createReportForProcess = async (page, optimizeCollectionsPage, optimizeRep
38
38
  };
39
39
  exports.createReportForProcess = createReportForProcess;
40
40
  const assertReportWithRefreshes = async (page, optimizeHomePage, optimizeCollectionsPage, optimizeReportPage, reportName, locator, text) => {
41
- const TOTAL_TIMEOUT_MS = 3 * 60 * 1000; // 3 minutes
41
+ const TOTAL_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes (OpenSearch ingestion can be slow)
42
42
  const startTime = Date.now();
43
43
  let attempt = 0;
44
44
  let found = false;
@@ -18,7 +18,7 @@ declare class TaskPanelPage {
18
18
  scrollToFirstTask(name: string): Promise<void>;
19
19
  clickCollapseFilter(): Promise<void>;
20
20
  clickProcessesTab(): Promise<void>;
21
- taskCount(name: string): Promise<number>;
21
+ taskCount(name: string, waitForStable?: boolean): Promise<number>;
22
22
  clickTasksTab(): Promise<void>;
23
23
  }
24
24
  export { TaskPanelPage };
@@ -83,8 +83,30 @@ class TaskPanelPage {
83
83
  await (0, test_1.expect)(this.processesPageTab).toBeVisible();
84
84
  await this.processesPageTab.click();
85
85
  }
86
- async taskCount(name) {
86
+ async taskCount(name, waitForStable = true) {
87
87
  await this.page.waitForLoadState('networkidle');
88
+ if (waitForStable) {
89
+ // Wait for the task list to stabilize: poll until count is unchanged for 2s
90
+ let previousCount = -1;
91
+ let stableIterations = 0;
92
+ const maxAttempts = 15; // 15 * 1s = 15s max wait
93
+ for (let i = 0; i < maxAttempts; i++) {
94
+ const currentCount = await this.availableTasks
95
+ .getByText(name, { exact: true })
96
+ .count();
97
+ if (currentCount === previousCount) {
98
+ stableIterations++;
99
+ if (stableIterations >= 2) {
100
+ return currentCount;
101
+ }
102
+ }
103
+ else {
104
+ stableIterations = 0;
105
+ previousCount = currentCount;
106
+ }
107
+ await this.page.waitForTimeout(1000);
108
+ }
109
+ }
88
110
  return this.availableTasks.getByText(name, { exact: true }).count();
89
111
  }
90
112
  async clickTasksTab() {
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.455",
3
+ "version": "0.0.457",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",