@camunda/e2e-test-suite 0.0.1204 → 0.0.1206

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.
@@ -4,6 +4,7 @@ declare class ClusterPage {
4
4
  private defaultClusterType;
5
5
  readonly belgiumRegion: Locator;
6
6
  readonly londonRegion: Locator;
7
+ readonly ohioRegion: Locator;
7
8
  readonly finlandRegion: Locator;
8
9
  private testInfo?;
9
10
  readonly createNewClusterButton: Locator;
@@ -9,6 +9,7 @@ class ClusterPage {
9
9
  defaultClusterType = 'G3-Dev';
10
10
  belgiumRegion;
11
11
  londonRegion;
12
+ ohioRegion;
12
13
  finlandRegion;
13
14
  testInfo;
14
15
  createNewClusterButton;
@@ -84,6 +85,9 @@ class ClusterPage {
84
85
  this.londonRegion = page.locator('label').filter({
85
86
  hasText: 'London, Europe (europe-west2)',
86
87
  });
88
+ this.ohioRegion = page.locator('label').filter({
89
+ hasText: 'Ohio, North America (us-east-2)',
90
+ });
87
91
  this.finlandRegion = page.locator('label').filter({
88
92
  hasText: 'Finland, Europe (europe-north1)',
89
93
  });
@@ -576,6 +580,12 @@ class ClusterPage {
576
580
  await chosen.locator.click();
577
581
  }
578
582
  }
583
+ else if (region === 'AWS' && process.env.IS_PROD == 'true') {
584
+ // The AWS region tile has no default selection, unlike GCP's tiles.
585
+ // Only prod creates AWS clusters through this UI flow.
586
+ await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
587
+ await this.ohioRegion.click();
588
+ }
579
589
  }
580
590
  async clickGCPRegion() {
581
591
  const regionSelectionEnabled = process.env.REGION_SELECTION === 'true';
@@ -5,6 +5,7 @@ declare class ClusterPage {
5
5
  readonly belgiumRegion: Locator;
6
6
  readonly finlandRegion: Locator;
7
7
  readonly londonRegion: Locator;
8
+ readonly ohioRegion: Locator;
8
9
  readonly createNewClusterButton: Locator;
9
10
  readonly clusterNameInput: Locator;
10
11
  readonly createClusterButton: Locator;
@@ -12,6 +12,7 @@ class ClusterPage {
12
12
  belgiumRegion;
13
13
  finlandRegion;
14
14
  londonRegion;
15
+ ohioRegion;
15
16
  createNewClusterButton;
16
17
  clusterNameInput;
17
18
  createClusterButton;
@@ -97,6 +98,9 @@ class ClusterPage {
97
98
  this.londonRegion = page.locator('label').filter({
98
99
  hasText: 'London, Europe (europe-west2)',
99
100
  });
101
+ this.ohioRegion = page.locator('label').filter({
102
+ hasText: 'Ohio, North America (us-east-2)',
103
+ });
100
104
  this.clustersList = page
101
105
  .getByRole('row')
102
106
  .filter({ hasNotText: 'Generation' }); //Filter out header row
@@ -231,6 +235,12 @@ class ClusterPage {
231
235
  await chosen.locator.click();
232
236
  }
233
237
  }
238
+ else if (region === 'AWS' && process.env.IS_PROD == 'true') {
239
+ // The AWS region tile has no default selection, unlike GCP's tiles.
240
+ // Only prod creates AWS clusters through this UI flow.
241
+ await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
242
+ await this.ohioRegion.click();
243
+ }
234
244
  }
235
245
  extractClusterIdFromUrl(url) {
236
246
  const clusterIdMatch = url.match(/\/cluster\/([a-f0-9-]+)/);
@@ -22,6 +22,7 @@ declare class ClusterPage {
22
22
  readonly g3DevClusterType: Locator;
23
23
  readonly belgiumRegion: Locator;
24
24
  readonly londonRegion: Locator;
25
+ readonly ohioRegion: Locator;
25
26
  readonly finlandRegion: Locator;
26
27
  readonly alphaTab: Locator;
27
28
  readonly devTab: Locator;
@@ -29,6 +29,7 @@ class ClusterPage {
29
29
  g3DevClusterType;
30
30
  belgiumRegion;
31
31
  londonRegion;
32
+ ohioRegion;
32
33
  finlandRegion;
33
34
  alphaTab;
34
35
  devTab;
@@ -87,6 +88,9 @@ class ClusterPage {
87
88
  this.londonRegion = page.locator('label').filter({
88
89
  hasText: 'London, Europe (europe-west2)',
89
90
  });
91
+ this.ohioRegion = page.locator('label').filter({
92
+ hasText: 'Ohio, North America (us-east-2)',
93
+ });
90
94
  this.belgiumRegion = page.locator('label').filter({
91
95
  hasText: 'Chaos, Belgium, Europe (europe-west1)',
92
96
  });
@@ -264,6 +268,12 @@ class ClusterPage {
264
268
  await chosen.locator.click();
265
269
  }
266
270
  }
271
+ else if (region === 'AWS' && process.env.IS_PROD == 'true') {
272
+ // The AWS region tile has no default selection, unlike GCP's tiles.
273
+ // Only prod creates AWS clusters through this UI flow.
274
+ await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
275
+ await this.ohioRegion.click();
276
+ }
267
277
  }
268
278
  async determineTasklistAPI(tasklistV1Api) {
269
279
  // Determine tasklistV1Api from project name if not explicitly provided
@@ -4,6 +4,7 @@ declare class ClusterPage {
4
4
  private defaultClusterType;
5
5
  readonly belgiumRegion: Locator;
6
6
  readonly londonRegion: Locator;
7
+ readonly ohioRegion: Locator;
7
8
  readonly finlandRegion: Locator;
8
9
  private testInfo?;
9
10
  readonly createNewClusterButton: Locator;
@@ -10,6 +10,7 @@ class ClusterPage {
10
10
  defaultClusterType = 'G3-Dev';
11
11
  belgiumRegion;
12
12
  londonRegion;
13
+ ohioRegion;
13
14
  finlandRegion;
14
15
  testInfo;
15
16
  createNewClusterButton;
@@ -81,6 +82,9 @@ class ClusterPage {
81
82
  this.londonRegion = page.locator('label').filter({
82
83
  hasText: 'London, Europe (europe-west2)',
83
84
  });
85
+ this.ohioRegion = page.locator('label').filter({
86
+ hasText: 'Ohio, North America (us-east-2)',
87
+ });
84
88
  this.finlandRegion = page.locator('label').filter({
85
89
  hasText: 'Finland, Europe (europe-north1)',
86
90
  });
@@ -415,6 +419,12 @@ class ClusterPage {
415
419
  await chosen.locator.click();
416
420
  }
417
421
  }
422
+ else if (region === 'AWS' && process.env.IS_PROD == 'true') {
423
+ // The AWS region tile has no default selection, unlike GCP's tiles.
424
+ // Only prod creates AWS clusters through this UI flow.
425
+ await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
426
+ await this.ohioRegion.click();
427
+ }
418
428
  }
419
429
  async clickGCPRegion() {
420
430
  const regionSelectionEnabled = process.env.REGION_SELECTION === 'true';
@@ -772,6 +772,16 @@ async function performOptimizeInteractiveLogin(page, callerLabel, verifySession)
772
772
  if (loginAttempt < maxLoginAttempts - 1) {
773
773
  const rateLimited = String(error).includes(utils_1.AUTH0_RATE_LIMIT);
774
774
  const unauthenticated = String(error).includes(OPTIMIZE_SESSION_UNAUTHENTICATED);
775
+ // loginToApp rethrows a bare Playwright TimeoutError when its own
776
+ // page.waitForURL never sees the post-login redirect land (run
777
+ // 35340608406, optimize-collections-api.spec.ts "Delete non-existent
778
+ // collection"). That is the same sso-callback rejection burst the
779
+ // "unauthenticated" branch below backs off for -- Auth0 answered the
780
+ // login but the redirect back to Optimize never completed -- so it
781
+ // needs the same growing backoff, not the flat 10-20s fallback below
782
+ // meant for genuinely unclassified errors. Without this, that attempt
783
+ // just retried straight back into the same burst.
784
+ const navigationTimeout = String(error).includes('waitForURL');
775
785
  console.warn(`${callerLabel}: login attempt ${loginAttempt + 1} failed, retrying after backoff...`, error);
776
786
  await page.goto('about:blank');
777
787
  if (rateLimited) {
@@ -780,7 +790,7 @@ async function performOptimizeInteractiveLogin(page, callerLabel, verifySession)
780
790
  // the same window and burns the attempt budget for nothing.
781
791
  await (0, randomSleep_1.randomSleep)(60000, 90000);
782
792
  }
783
- else if (unauthenticated) {
793
+ else if (unauthenticated || navigationTimeout) {
784
794
  // The rejected callbacks come in bursts lasting tens of seconds
785
795
  // (every login inside the burst window fails, isolated ones all
786
796
  // succeed), so back off past the burst rather than retrying inside
@@ -789,8 +799,9 @@ async function performOptimizeInteractiveLogin(page, callerLabel, verifySession)
789
799
  // the same distribution at the same moment, so a fixed band keeps
790
800
  // the herd synchronised and they re-collide on the next attempt.
791
801
  // Growing the ceiling fans them out while the floor still lets a
792
- // lucky worker recover quickly. Worst case stays well inside the
793
- // 12-minute hook timeout.
802
+ // lucky worker recover quickly. Worst case (3 retries at the
803
+ // ceiling, plus the initial stagger) stays under 6 minutes, well
804
+ // inside the 12-minute test timeout.
794
805
  await (0, randomSleep_1.randomSleep)(20000, 45000 + loginAttempt * 45000);
795
806
  }
796
807
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.1204",
3
+ "version": "0.0.1206",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",