@camunda/e2e-test-suite 0.0.563 → 0.0.565
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.
- package/dist/pages/8.7/AppsPage.js +4 -0
- package/dist/pages/8.7/ClusterDetailsPage.js +3 -3
- package/dist/pages/8.7/ClusterSecretsPage.js +11 -0
- package/dist/pages/8.7/ConsoleOrganizationPage.js +18 -1
- package/dist/pages/8.7/LoginPage.js +20 -7
- package/dist/pages/8.7/ModelerCreatePage.js +41 -16
- package/dist/pages/8.7/ModelerHomePage.js +37 -5
- package/dist/pages/8.7/PlayPage.js +4 -6
- package/dist/pages/8.7/SettingsPage.js +5 -2
- package/dist/pages/8.7/SignUpPage.js +18 -28
- package/dist/pages/8.7/UtilitiesPage.js +19 -10
- package/dist/pages/SM-8.10/ModelerCreatePage.d.ts +1 -1
- package/dist/pages/SM-8.10/ModelerCreatePage.js +26 -14
- package/dist/pages/SM-8.10/UtilitiesPage.d.ts +7 -3
- package/dist/pages/SM-8.10/UtilitiesPage.js +2 -5
- package/dist/pages/SM-8.8/ModelerCreatePage.d.ts +1 -1
- package/dist/pages/SM-8.8/ModelerCreatePage.js +25 -13
- package/dist/pages/SM-8.8/UtilitiesPage.d.ts +10 -4
- package/dist/pages/SM-8.8/UtilitiesPage.js +2 -5
- package/dist/tests/8.7/web-modeler-user-flows.spec.js +27 -5
- package/dist/tests/SM-8.10/connectors-user-flows.spec.js +7 -1
- package/dist/tests/SM-8.10/mt-enabled-user-flows.spec.js +3 -1
- package/dist/tests/SM-8.10/smoke-tests.spec.js +4 -1
- package/dist/tests/SM-8.8/connectors-user-flows.spec.js +11 -3
- package/dist/tests/SM-8.8/mt-enabled-user-flows.spec.js +8 -4
- package/dist/tests/SM-8.8/smoke-tests.spec.js +6 -1
- package/package.json +1 -1
|
@@ -260,6 +260,10 @@ class AppsPage {
|
|
|
260
260
|
await (0, test_1.expect)(this.consoleLink).toBeVisible({ timeout: 30000 });
|
|
261
261
|
await this.consoleLink.click();
|
|
262
262
|
}
|
|
263
|
+
// Console may land on the root URL first and then redirect to the
|
|
264
|
+
// org-specific URL (/org/<uuid>/...) before the header banner renders.
|
|
265
|
+
// Wait for that redirect so callers can immediately assert page elements.
|
|
266
|
+
await this.page.waitForURL(/\/org\//, { timeout: 90000 }).catch(() => { });
|
|
263
267
|
return;
|
|
264
268
|
}
|
|
265
269
|
catch (error) {
|
|
@@ -378,9 +378,9 @@ class ClusterDetailsPage {
|
|
|
378
378
|
async assertComponentsHealth(components = ['Zeebe', 'Tasklist', 'Operate', 'Optimize']) {
|
|
379
379
|
for (const component of components) {
|
|
380
380
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.page.getByText(`${component}Healthy`, { exact: true }), {
|
|
381
|
-
visibilityTimeout:
|
|
382
|
-
totalTimeout:
|
|
383
|
-
maxRetries:
|
|
381
|
+
visibilityTimeout: 120000,
|
|
382
|
+
totalTimeout: 600000,
|
|
383
|
+
maxRetries: 10,
|
|
384
384
|
preAction: async () => {
|
|
385
385
|
await this.page.reload();
|
|
386
386
|
},
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClusterSecretsPage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
|
+
const sleep_1 = require("../../utils/sleep");
|
|
5
6
|
class ClusterSecretsPage {
|
|
6
7
|
page;
|
|
7
8
|
createNewSecretButton;
|
|
@@ -101,6 +102,16 @@ class ClusterSecretsPage {
|
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
async clickClusterBanner() {
|
|
105
|
+
try {
|
|
106
|
+
const blockingModal = this.page.locator('.cds--modal.is-visible');
|
|
107
|
+
if ((await blockingModal.count()) > 0) {
|
|
108
|
+
await this.page.keyboard.press('Escape');
|
|
109
|
+
await (0, sleep_1.sleep)(1000);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (_e) {
|
|
113
|
+
// no blocking modal to dismiss
|
|
114
|
+
}
|
|
104
115
|
await (0, test_1.expect)(this.clusterBanner).toBeVisible({ timeout: 30000 });
|
|
105
116
|
await this.clusterBanner.click({ timeout: 60000 });
|
|
106
117
|
}
|
|
@@ -203,7 +203,17 @@ class ConsoleOrganizationPage {
|
|
|
203
203
|
});
|
|
204
204
|
}
|
|
205
205
|
async clickOptionsButton() {
|
|
206
|
-
|
|
206
|
+
const dataRow = this.rows.nth(1);
|
|
207
|
+
await dataRow.hover({ timeout: 30000 }).catch(() => { });
|
|
208
|
+
// Try scoped click first; fall back to page-level with force
|
|
209
|
+
try {
|
|
210
|
+
await dataRow
|
|
211
|
+
.getByRole('button', { name: 'Options' })
|
|
212
|
+
.click({ timeout: 30000 });
|
|
213
|
+
}
|
|
214
|
+
catch (_e) {
|
|
215
|
+
await this.optionsButton.first().click({ force: true, timeout: 60000 });
|
|
216
|
+
}
|
|
207
217
|
}
|
|
208
218
|
async clickEditUserMenuItem() {
|
|
209
219
|
await this.editUserMenuItem.click({ timeout: 60000 });
|
|
@@ -461,6 +471,13 @@ class ConsoleOrganizationPage {
|
|
|
461
471
|
await (0, test_1.expect)(this.filterTableSearchbox).toBeVisible({ timeout: 120000 });
|
|
462
472
|
await this.filterTableSearchbox.click({ timeout: 60000 });
|
|
463
473
|
await this.filterTableSearchbox.fill(name);
|
|
474
|
+
await this.page
|
|
475
|
+
.waitForLoadState('networkidle', { timeout: 30000 })
|
|
476
|
+
.catch(() => { });
|
|
477
|
+
// Wait for at least one data row to appear after filtering
|
|
478
|
+
await (0, test_1.expect)(this.rows.nth(1))
|
|
479
|
+
.toBeVisible({ timeout: 30000 })
|
|
480
|
+
.catch(() => { });
|
|
464
481
|
}
|
|
465
482
|
}
|
|
466
483
|
async clickAssignSubButton() {
|
|
@@ -60,14 +60,27 @@ class LoginPage {
|
|
|
60
60
|
}
|
|
61
61
|
async loginWithTestUser(credentials = {}) {
|
|
62
62
|
const { username = process.env.C8_USERNAME_TEST, password = process.env.C8_PASSWORD_TEST, } = credentials;
|
|
63
|
-
// Navigate to app root to
|
|
64
|
-
// console.* hostnames) embeds a hidden invite-user email input also labeled
|
|
65
|
-
// "Email address" that would otherwise satisfy the locator below before the
|
|
66
|
-
// auth0 redirect has had a chance to complete.
|
|
63
|
+
// Navigate to app root to start the auth flow.
|
|
67
64
|
await this.page.goto('/');
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
// SSO re-auth may silently log us back in as the previous user after
|
|
66
|
+
// logout/session-reset, keeping the page on Console instead of redirecting
|
|
67
|
+
// to the Auth0 login form. Detect Console (settings button visible) and
|
|
68
|
+
// force logout until the Auth0 email input appears.
|
|
69
|
+
const settingsBtn = this.page.getByLabel('Open Settings');
|
|
70
|
+
const logoutBtn = this.page.getByRole('button', { name: 'Log out' });
|
|
71
|
+
for (let i = 0; i < 3; i++) {
|
|
72
|
+
const onAuth0 = await this.usernameInput
|
|
73
|
+
.waitFor({ state: 'visible', timeout: 15000 })
|
|
74
|
+
.then(() => true)
|
|
75
|
+
.catch(() => false);
|
|
76
|
+
if (onAuth0)
|
|
77
|
+
break;
|
|
78
|
+
if (await settingsBtn.isVisible({ timeout: 3000 })) {
|
|
79
|
+
await settingsBtn.click({ timeout: 30000 });
|
|
80
|
+
await logoutBtn.click({ timeout: 30000 });
|
|
81
|
+
await this.page.waitForLoadState('domcontentloaded', { timeout: 30000 });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
71
84
|
await (0, test_1.expect)(this.usernameInput).toBeVisible({ timeout: 120000 });
|
|
72
85
|
await this.fillUsername(username);
|
|
73
86
|
await this.clickContinueButton();
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ModelerCreatePage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
5
|
const sleep_1 = require("../../utils/sleep");
|
|
6
|
-
const ConnectorMarketplacePage_1 = require("../8.8/ConnectorMarketplacePage");
|
|
7
6
|
class ModelerCreatePage {
|
|
8
7
|
page;
|
|
9
8
|
generalPanel;
|
|
@@ -708,29 +707,55 @@ class ModelerCreatePage {
|
|
|
708
707
|
}
|
|
709
708
|
async clickPublicHolidayConnectorOption() {
|
|
710
709
|
const maxRetries = 4;
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
710
|
+
const setupModelerState = async () => {
|
|
711
|
+
// Navigate back from marketplace (full-page nav in 8.7) if needed
|
|
712
|
+
const onModeler = await this.page
|
|
713
|
+
.locator('[data-test="modeler"]')
|
|
714
|
+
.waitFor({ state: 'visible', timeout: 5000 })
|
|
715
|
+
.then(() => true)
|
|
716
|
+
.catch(() => false);
|
|
717
|
+
if (!onModeler) {
|
|
718
|
+
await this.page.keyboard.press('Escape');
|
|
719
|
+
await this.page.waitForTimeout(2000);
|
|
720
|
+
const afterEscape = await this.page
|
|
721
|
+
.locator('[data-test="modeler"]')
|
|
722
|
+
.waitFor({ state: 'visible', timeout: 3000 })
|
|
723
|
+
.then(() => true)
|
|
724
|
+
.catch(() => false);
|
|
725
|
+
if (!afterEscape) {
|
|
726
|
+
await this.page.goBack();
|
|
721
727
|
await this.page.waitForTimeout(5000);
|
|
722
|
-
await connectorMarketplacePage.downloadConnectorToProject();
|
|
723
|
-
await this.publicHolidayConnectorOption.click({ timeout: 120000 });
|
|
724
728
|
}
|
|
729
|
+
await this.page.reload();
|
|
730
|
+
await this.page.waitForTimeout(5000);
|
|
731
|
+
}
|
|
732
|
+
await this.clickCanvas();
|
|
733
|
+
await this.secondElement.click({ timeout: 60000 });
|
|
734
|
+
await this.clickChangeTypeButton();
|
|
735
|
+
// Wait for change-type panel to be fully loaded before clicking connector
|
|
736
|
+
await (0, test_1.expect)(this.marketPlaceButton).toBeVisible({ timeout: 60000 });
|
|
737
|
+
};
|
|
738
|
+
for (let retries = 0; retries < maxRetries; retries++) {
|
|
739
|
+
try {
|
|
740
|
+
await setupModelerState();
|
|
741
|
+
await this.publicHolidayConnectorOption.click({ timeout: 120000 });
|
|
725
742
|
return;
|
|
726
743
|
}
|
|
727
744
|
catch (error) {
|
|
728
745
|
console.error(`Click attempt ${retries + 1} failed: ${error}`);
|
|
746
|
+
if (retries >= maxRetries - 1)
|
|
747
|
+
break;
|
|
748
|
+
const onModeler = await this.page
|
|
749
|
+
.locator('[data-test="modeler"]')
|
|
750
|
+
.waitFor({ state: 'visible', timeout: 3000 })
|
|
751
|
+
.then(() => true)
|
|
752
|
+
.catch(() => false);
|
|
753
|
+
if (!onModeler) {
|
|
754
|
+
await this.page.goBack();
|
|
755
|
+
await this.page.waitForTimeout(3000);
|
|
756
|
+
}
|
|
729
757
|
await this.page.reload();
|
|
730
758
|
await this.page.waitForTimeout(5000);
|
|
731
|
-
await this.clickCanvas();
|
|
732
|
-
await this.secondElement.click({ timeout: 60000 });
|
|
733
|
-
await this.clickChangeTypeButton();
|
|
734
759
|
}
|
|
735
760
|
}
|
|
736
761
|
throw new Error(`Failed to click the public holiday connector after ${maxRetries} attempts.`);
|
|
@@ -78,7 +78,18 @@ class ModelerHomePage {
|
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
async clickCreateNewProjectButton() {
|
|
81
|
-
|
|
81
|
+
// Wait for any top-bar survey/banner overlay to clear before clicking
|
|
82
|
+
await this.page
|
|
83
|
+
.locator('[data-test="top-bar"]')
|
|
84
|
+
.waitFor({ state: 'hidden', timeout: 10000 })
|
|
85
|
+
.catch(() => { });
|
|
86
|
+
try {
|
|
87
|
+
await this.createNewProjectButton.click({ timeout: 30000 });
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Overlay still present — force the click through
|
|
91
|
+
await this.createNewProjectButton.click({ force: true, timeout: 30000 });
|
|
92
|
+
}
|
|
82
93
|
}
|
|
83
94
|
async enterNewProjectName(name) {
|
|
84
95
|
await this.projectNameInput.click({ timeout: 60000 });
|
|
@@ -143,7 +154,14 @@ class ModelerHomePage {
|
|
|
143
154
|
await this.diagramTypeDropdown.click({ timeout: 120000 });
|
|
144
155
|
}
|
|
145
156
|
async clickBpmnTemplateOption() {
|
|
146
|
-
|
|
157
|
+
try {
|
|
158
|
+
await this.bpmnTemplateOption.click({ timeout: 120000 });
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Element may be detaching during re-render; wait briefly then force-click
|
|
162
|
+
await this.page.waitForTimeout(3000);
|
|
163
|
+
await this.bpmnTemplateOption.click({ force: true, timeout: 60000 });
|
|
164
|
+
}
|
|
147
165
|
}
|
|
148
166
|
async clickIdpApplicationTemplateOption() {
|
|
149
167
|
await this.idpTemplateOption.click({ timeout: 120000 });
|
|
@@ -206,14 +224,28 @@ class ModelerHomePage {
|
|
|
206
224
|
await this.optionsButton.click({ timeout: 30000 });
|
|
207
225
|
for (let i = 0; i < retries; i++) {
|
|
208
226
|
try {
|
|
209
|
-
await
|
|
210
|
-
|
|
227
|
+
await (0, sleep_1.sleep)(5000);
|
|
228
|
+
if (await this.manageButton.isVisible({ timeout: 30000 })) {
|
|
229
|
+
await this.manageButton.click({ timeout: 10000 });
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
await this.clickOpenOrganizationsButton();
|
|
233
|
+
await this.optionsButton.click({ timeout: 30000 });
|
|
234
|
+
await (0, test_1.expect)(this.manageButton).toBeVisible({ timeout: 30000 });
|
|
235
|
+
await this.manageButton.click({ timeout: 30000 });
|
|
236
|
+
}
|
|
237
|
+
// Wait for the Console org management page to finish loading
|
|
238
|
+
await this.page
|
|
239
|
+
.waitForLoadState('networkidle', { timeout: 30000 })
|
|
240
|
+
.catch(() => { });
|
|
241
|
+
return;
|
|
211
242
|
}
|
|
212
243
|
catch (error) {
|
|
213
244
|
console.error(`Attempt ${i + 1} to click manage button failed: ${error}`);
|
|
245
|
+
await (0, sleep_1.sleep)(10000);
|
|
214
246
|
}
|
|
215
247
|
}
|
|
216
|
-
throw new Error(`Failed to click
|
|
248
|
+
throw new Error(`Failed to click manage button after ${retries} retries`);
|
|
217
249
|
}
|
|
218
250
|
async clickUploadFilesButton() {
|
|
219
251
|
await this.uploadFilesButton.click({ timeout: 60000 });
|
|
@@ -45,12 +45,10 @@ class PlayPage {
|
|
|
45
45
|
let attempts = 0;
|
|
46
46
|
while (attempts < maxRetries) {
|
|
47
47
|
try {
|
|
48
|
-
await (0, test_1.expect)(this.page.getByText(/process instance key/i)).toBeVisible({
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
timeout: maxWaitTimeSeconds,
|
|
53
|
-
});
|
|
48
|
+
await (0, test_1.expect)(this.page.getByText(/process instance key|instance key/i).first()).toBeVisible({ timeout: maxWaitTimeSeconds });
|
|
49
|
+
await (0, test_1.expect)(this.page
|
|
50
|
+
.getByText(/This process instance has no variables|No variables/i)
|
|
51
|
+
.first()).toBeVisible({ timeout: maxWaitTimeSeconds });
|
|
54
52
|
return;
|
|
55
53
|
}
|
|
56
54
|
catch (error) {
|
|
@@ -13,12 +13,15 @@ class SettingsPage {
|
|
|
13
13
|
async clickOpenSettingsButton(retries = 3) {
|
|
14
14
|
for (let i = 0; i < retries; i++) {
|
|
15
15
|
try {
|
|
16
|
-
await this.openSettingsButton.click({ timeout:
|
|
16
|
+
await this.openSettingsButton.click({ timeout: 60000 });
|
|
17
17
|
return; // If successful, exit the function
|
|
18
18
|
}
|
|
19
19
|
catch (error) {
|
|
20
20
|
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
21
|
-
await sleep(
|
|
21
|
+
await sleep(5000);
|
|
22
|
+
// If the button isn't visible, navigate to root and try again
|
|
23
|
+
await this.page.goto('/').catch(() => { });
|
|
24
|
+
await sleep(5000);
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
27
|
throw new Error(`Failed to click button after ${retries} retries`);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SignUpPage = void 0;
|
|
4
|
-
const test_1 = require("@playwright/test");
|
|
5
4
|
class SignUpPage {
|
|
6
5
|
page;
|
|
7
6
|
firstNameInput;
|
|
@@ -74,36 +73,27 @@ class SignUpPage {
|
|
|
74
73
|
name: 'thank you for signing up for camunda',
|
|
75
74
|
});
|
|
76
75
|
this.runProcessRadioButton = page.getByRole('radio', { name: 'yes' });
|
|
77
|
-
this.verifyEmailText = page.getByText(
|
|
76
|
+
this.verifyEmailText = page.getByText(/Verify your email|Check your email|Confirm your email/i);
|
|
78
77
|
}
|
|
79
78
|
async signupToC8(emailAddress, password) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await this.clickPasswordInput();
|
|
91
|
-
await this.fillPasswordInput(password);
|
|
92
|
-
await this.clickSignupButton();
|
|
93
|
-
await (0, test_1.expect)(this.verifyEmailText.first()).toBeVisible({
|
|
94
|
-
timeout: 180000,
|
|
95
|
-
});
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
if (attempt < maxRetries - 1) {
|
|
100
|
-
console.warn(`Signup attempt ${attempt + 1} failed. Retrying...`);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
throw error;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
79
|
+
await this.page.goto('https://accounts.ultrawombat.com/signup');
|
|
80
|
+
await this.clickFirstNameInput();
|
|
81
|
+
await this.fillFirstNameInput('QA');
|
|
82
|
+
await this.clickLastNameInput();
|
|
83
|
+
await this.fillLastNameInput('Camunda');
|
|
84
|
+
await this.clickEmailInput();
|
|
85
|
+
await this.fillEmailInput(emailAddress);
|
|
86
|
+
// Fill Company field if the form now requires it
|
|
87
|
+
if (await this.companyInput.isVisible({ timeout: 3000 }).catch(() => false)) {
|
|
88
|
+
await this.companyInput.fill('QA Camunda');
|
|
106
89
|
}
|
|
90
|
+
await this.clickPasswordInput();
|
|
91
|
+
await this.fillPasswordInput(password);
|
|
92
|
+
await this.clickSignupButton();
|
|
93
|
+
// Detect completion: URL leaves /signup OR the submit button disappears.
|
|
94
|
+
// waitForFunction handles any Auth0 post-signup page variant.
|
|
95
|
+
await this.page.waitForFunction(() => window.location.pathname !== '/signup' ||
|
|
96
|
+
!document.querySelector('button.signUpButton'), undefined, { timeout: 180000 });
|
|
107
97
|
}
|
|
108
98
|
async clickFirstNameInput() {
|
|
109
99
|
await this.firstNameInput.click({ timeout: 30000 });
|
|
@@ -12,21 +12,30 @@ async function loginWithRetry(page, loginPage, testUser, timeout, maxRetries = 3
|
|
|
12
12
|
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
13
13
|
try {
|
|
14
14
|
await page.goto('/');
|
|
15
|
-
// Wait for the auth redirect to leave the Console hostname before login.
|
|
16
|
-
// Console embeds a hidden invite-user email input also labeled "Email
|
|
17
|
-
// address" that would otherwise satisfy the locator inside login() before
|
|
18
|
-
// auth0 has had a chance to load.
|
|
19
|
-
await page
|
|
20
|
-
.waitForURL((url) => !url.hostname.includes('console'), {
|
|
21
|
-
timeout: 60000,
|
|
22
|
-
})
|
|
23
|
-
.catch(() => { });
|
|
24
15
|
await (0, sleep_1.sleep)(timeout);
|
|
16
|
+
// Always detect SSO re-auth: after a logout + clearCookies, Auth0 may
|
|
17
|
+
// silently log the previous user back in without showing the login form.
|
|
18
|
+
// Force logout until the Auth0 email input appears.
|
|
19
|
+
const settingsBtn = page.getByLabel('Open Settings');
|
|
20
|
+
const logoutBtn = page.getByRole('button', { name: 'Log out' });
|
|
21
|
+
for (let i = 0; i < 3; i++) {
|
|
22
|
+
const onAuth0 = await loginPage.usernameInput
|
|
23
|
+
.waitFor({ state: 'visible', timeout: 15000 })
|
|
24
|
+
.then(() => true)
|
|
25
|
+
.catch(() => false);
|
|
26
|
+
if (onAuth0)
|
|
27
|
+
break;
|
|
28
|
+
if (await settingsBtn.isVisible({ timeout: 3000 })) {
|
|
29
|
+
await settingsBtn.click({ timeout: 30000 });
|
|
30
|
+
await logoutBtn.click({ timeout: 30000 });
|
|
31
|
+
await page.waitForLoadState('domcontentloaded', { timeout: 30000 });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
25
34
|
if (skipOrgAssertion) {
|
|
26
35
|
await loginPage.loginWithoutOrgAssertion(testUser);
|
|
27
36
|
}
|
|
28
37
|
else {
|
|
29
|
-
await loginPage.
|
|
38
|
+
await loginPage.loginWithTestUser(testUser);
|
|
30
39
|
}
|
|
31
40
|
return;
|
|
32
41
|
}
|
|
@@ -136,7 +136,7 @@ declare class ModelerCreatePage {
|
|
|
136
136
|
clickDeploySubButton(): Promise<void>;
|
|
137
137
|
clickCancelButton(): Promise<void>;
|
|
138
138
|
private recoverModelerSession;
|
|
139
|
-
clickRestConnectorOption(): Promise<void>;
|
|
139
|
+
clickRestConnectorOption(recoverSession?: () => Promise<void>): Promise<void>;
|
|
140
140
|
clickMarketPlaceButton(): Promise<void>;
|
|
141
141
|
completeDeploymentEndpointConfiguration(): Promise<void>;
|
|
142
142
|
completePlayConfiguration(): Promise<void>;
|
|
@@ -615,21 +615,33 @@ class ModelerCreatePage {
|
|
|
615
615
|
async clickCancelButton() {
|
|
616
616
|
await this.cancelButton.click();
|
|
617
617
|
}
|
|
618
|
-
async recoverModelerSession() {
|
|
619
|
-
const
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
await loginInput.fill(username);
|
|
627
|
-
await this.page.locator('#password').fill(password);
|
|
628
|
-
await this.page.locator('#kc-login').click();
|
|
618
|
+
async recoverModelerSession(recoverSession) {
|
|
619
|
+
const rawUrl = this.page.url();
|
|
620
|
+
let url;
|
|
621
|
+
if (rawUrl.includes('client_id=web-modeler')) {
|
|
622
|
+
const match = rawUrl.match(/redirect_uri=([^&]+)/);
|
|
623
|
+
url = match
|
|
624
|
+
? decodeURIComponent(match[1]).split('?')[0]
|
|
625
|
+
: rawUrl.split('?')[0];
|
|
629
626
|
}
|
|
627
|
+
else {
|
|
628
|
+
url = rawUrl.split('?')[0];
|
|
629
|
+
}
|
|
630
|
+
if (recoverSession) {
|
|
631
|
+
// Caller-provided function handles auth + navigation (e.g. navigationPage.goToModeler).
|
|
632
|
+
// It retries internally; after it returns the session is valid on Modeler home.
|
|
633
|
+
await recoverSession();
|
|
634
|
+
}
|
|
635
|
+
// Navigate to the diagram URL directly — goToModeler lands on Modeler home, and
|
|
636
|
+
// after a pod restart Modeler also loses OIDC state and redirects home, so we go
|
|
637
|
+
// to the diagram explicitly while the session is valid.
|
|
638
|
+
await this.page.goto(url, {
|
|
639
|
+
timeout: 30000,
|
|
640
|
+
waitUntil: 'domcontentloaded',
|
|
641
|
+
});
|
|
630
642
|
await (0, test_1.expect)(this.secondElement).toBeVisible({ timeout: 60000 });
|
|
631
643
|
}
|
|
632
|
-
async clickRestConnectorOption() {
|
|
644
|
+
async clickRestConnectorOption(recoverSession) {
|
|
633
645
|
const maxRetries = 4;
|
|
634
646
|
for (let retries = 0; retries < maxRetries; retries++) {
|
|
635
647
|
try {
|
|
@@ -640,7 +652,7 @@ class ModelerCreatePage {
|
|
|
640
652
|
}
|
|
641
653
|
else if (retries === 1 || retries === 2) {
|
|
642
654
|
// Recover session cleanly instead of page.reload()
|
|
643
|
-
await this.recoverModelerSession();
|
|
655
|
+
await this.recoverModelerSession(recoverSession);
|
|
644
656
|
await this.secondElement.click({ timeout: 60000 });
|
|
645
657
|
await this.changeTypeButton.click({ force: true, timeout: 60000 });
|
|
646
658
|
await (0, test_1.expect)(this.restConnectorOption).toBeVisible({ timeout: 90000 });
|
|
@@ -648,7 +660,7 @@ class ModelerCreatePage {
|
|
|
648
660
|
}
|
|
649
661
|
else {
|
|
650
662
|
// Fourth attempt: install via marketplace (real product flow)
|
|
651
|
-
await this.recoverModelerSession();
|
|
663
|
+
await this.recoverModelerSession(recoverSession);
|
|
652
664
|
await this.secondElement.click({ timeout: 60000 });
|
|
653
665
|
await this.changeTypeButton.click({ force: true, timeout: 60000 });
|
|
654
666
|
await this.clickMarketPlaceButton();
|
|
@@ -20,9 +20,13 @@ export declare function createUserAndAssignToRole(page: Page, navigationPage: Na
|
|
|
20
20
|
export declare function assignMappingToRole(page: Page, ocIdentityHomePage: OCIdentityHomePage, ocIdentityRolesPage: OCIdentityRolesPage, role: string, mappingRuleId: string, testMappings?: Serializable): Promise<void>;
|
|
21
21
|
export declare function createAndRunProcess(page: Page, modelerHomePage: ModelerHomePage, modelerCreatePage: ModelerCreatePage, processName: string, processId?: string, tenant?: string): Promise<void>;
|
|
22
22
|
export declare function completeTaskWithRetry(page: Page, taskPanelPage: TaskPanelPage, taskDetailsPage: TaskDetailsPage, taskName: string, taskPriority: string, maxRetries?: number): Promise<void>;
|
|
23
|
-
export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, resultVariable
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, { resultVariable, basicAuthCredentials, recoverSession, }?: {
|
|
24
|
+
resultVariable?: string;
|
|
25
|
+
basicAuthCredentials?: {
|
|
26
|
+
username: string;
|
|
27
|
+
password: string;
|
|
28
|
+
};
|
|
29
|
+
recoverSession?: () => Promise<void>;
|
|
26
30
|
}): Promise<void>;
|
|
27
31
|
export declare function assertLocatorVisibleWithPaginated(page: Page, locator: Locator, text: string): Promise<void>;
|
|
28
32
|
export declare function assertLocatorVisibleWithRetry(page: Page, locator: Locator, text: string, timeout?: number, notVisible?: boolean, maxRetries?: number, clickLocator?: Locator): Promise<void>;
|
|
@@ -139,10 +139,7 @@ async function completeTaskWithRetry(page, taskPanelPage, taskDetailsPage, taskN
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
exports.completeTaskWithRetry = completeTaskWithRetry;
|
|
142
|
-
async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, resultVariable = '', basicAuthCredentials = {
|
|
143
|
-
username: '',
|
|
144
|
-
password: '',
|
|
145
|
-
}) {
|
|
142
|
+
async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, { resultVariable = '', basicAuthCredentials = { username: '', password: '' }, recoverSession, } = {}) {
|
|
146
143
|
await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
|
|
147
144
|
timeout: 120000,
|
|
148
145
|
});
|
|
@@ -178,7 +175,7 @@ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, conn
|
|
|
178
175
|
await connectorMarketplacePage.waitForConnectorSearchResults();
|
|
179
176
|
await connectorMarketplacePage.downloadConnectorToProject();
|
|
180
177
|
}
|
|
181
|
-
await modelerCreatePage.clickRestConnectorOption();
|
|
178
|
+
await modelerCreatePage.clickRestConnectorOption(recoverSession);
|
|
182
179
|
await connectorSettingsPage.clickAuthenticationTab();
|
|
183
180
|
await connectorSettingsPage.clickHTTPEndpointTab();
|
|
184
181
|
if (auth == 'bearer') {
|
|
@@ -137,7 +137,7 @@ declare class ModelerCreatePage {
|
|
|
137
137
|
clickDeploySubButton(): Promise<void>;
|
|
138
138
|
clickCancelButton(): Promise<void>;
|
|
139
139
|
private recoverModelerSession;
|
|
140
|
-
clickRestConnectorOption(): Promise<void>;
|
|
140
|
+
clickRestConnectorOption(recoverSession?: () => Promise<void>): Promise<void>;
|
|
141
141
|
clickMarketPlaceButton(): Promise<void>;
|
|
142
142
|
completeDeploymentEndpointConfiguration(): Promise<void>;
|
|
143
143
|
completePlayConfiguration(): Promise<void>;
|
|
@@ -629,21 +629,33 @@ class ModelerCreatePage {
|
|
|
629
629
|
async clickCancelButton() {
|
|
630
630
|
await this.cancelButton.click();
|
|
631
631
|
}
|
|
632
|
-
async recoverModelerSession() {
|
|
633
|
-
const
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
await loginInput.fill(username);
|
|
641
|
-
await this.page.locator('#password').fill(password);
|
|
642
|
-
await this.page.locator('#kc-login').click();
|
|
632
|
+
async recoverModelerSession(recoverSession) {
|
|
633
|
+
const rawUrl = this.page.url();
|
|
634
|
+
let url;
|
|
635
|
+
if (rawUrl.includes('client_id=web-modeler')) {
|
|
636
|
+
const match = rawUrl.match(/redirect_uri=([^&]+)/);
|
|
637
|
+
url = match
|
|
638
|
+
? decodeURIComponent(match[1]).split('?')[0]
|
|
639
|
+
: rawUrl.split('?')[0];
|
|
643
640
|
}
|
|
641
|
+
else {
|
|
642
|
+
url = rawUrl.split('?')[0];
|
|
643
|
+
}
|
|
644
|
+
if (recoverSession) {
|
|
645
|
+
// Caller-provided function handles auth + navigation (e.g. navigationPage.goToModeler).
|
|
646
|
+
// It retries internally; after it returns the session is valid on Modeler home.
|
|
647
|
+
await recoverSession();
|
|
648
|
+
}
|
|
649
|
+
// Navigate to the diagram URL directly — goToModeler lands on Modeler home, and
|
|
650
|
+
// after a pod restart Modeler also loses OIDC state and redirects home, so we go
|
|
651
|
+
// to the diagram explicitly while the session is valid.
|
|
652
|
+
await this.page.goto(url, {
|
|
653
|
+
timeout: 30000,
|
|
654
|
+
waitUntil: 'domcontentloaded',
|
|
655
|
+
});
|
|
644
656
|
await (0, test_1.expect)(this.secondElement).toBeVisible({ timeout: 60000 });
|
|
645
657
|
}
|
|
646
|
-
async clickRestConnectorOption() {
|
|
658
|
+
async clickRestConnectorOption(recoverSession) {
|
|
647
659
|
const maxRetries = 4;
|
|
648
660
|
for (let retries = 0; retries < maxRetries; retries++) {
|
|
649
661
|
try {
|
|
@@ -654,7 +666,7 @@ class ModelerCreatePage {
|
|
|
654
666
|
}
|
|
655
667
|
else {
|
|
656
668
|
// Recover session cleanly instead of page.reload()
|
|
657
|
-
await this.recoverModelerSession();
|
|
669
|
+
await this.recoverModelerSession(recoverSession);
|
|
658
670
|
await this.secondElement.click({ force: true, timeout: 60000 });
|
|
659
671
|
await this.changeTypeButton.click({ force: true, timeout: 60000 });
|
|
660
672
|
await (0, test_1.expect)(this.restConnectorOption).toBeVisible({ timeout: 90000 });
|
|
@@ -20,10 +20,16 @@ export declare function createUserAndAssignToRole(page: Page, navigationPage: Na
|
|
|
20
20
|
export declare function assignMappingToRole(page: Page, ocIdentityHomePage: OCIdentityHomePage, ocIdentityRolesPage: OCIdentityRolesPage, role: string, mappingRuleId: string, testMappings?: Serializable): Promise<void>;
|
|
21
21
|
export declare function createAndRunProcess(page: Page, modelerHomePage: ModelerHomePage, modelerCreatePage: ModelerCreatePage, processName: string, processId?: string): Promise<void>;
|
|
22
22
|
export declare function completeTaskWithRetry(page: Page, taskPanelPage: TaskPanelPage, taskDetailsPage: TaskDetailsPage, taskName: string, taskPriority: string): Promise<void>;
|
|
23
|
-
export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, resultVariable
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, { resultVariable, basicAuthCredentials, page, modelerHomePage, recoverSession, }?: {
|
|
24
|
+
resultVariable?: string;
|
|
25
|
+
basicAuthCredentials?: {
|
|
26
|
+
username: string;
|
|
27
|
+
password: string;
|
|
28
|
+
};
|
|
29
|
+
page?: Page;
|
|
30
|
+
modelerHomePage?: ModelerHomePage;
|
|
31
|
+
recoverSession?: () => Promise<void>;
|
|
32
|
+
}): Promise<void>;
|
|
27
33
|
export declare function assertLocatorVisibleWithPaginated(page: Page, locator: Locator, text: string): Promise<void>;
|
|
28
34
|
export declare function assertLocatorVisibleWithRetry(page: Page, locator: Locator, text: string, timeout?: number, notVisible?: boolean, maxRetries?: number, clickLocator?: Locator): Promise<void>;
|
|
29
35
|
export declare function assertPageTextWithRetry(page: Page, text: string, notVisible?: boolean, timeout?: number, maxRetries?: number): Promise<void>;
|
|
@@ -112,10 +112,7 @@ async function completeTaskWithRetry(page, taskPanelPage, taskDetailsPage, taskN
|
|
|
112
112
|
throw new Error(`Completion of task ${taskName} failed after ${attempt} attempts (${TOTAL_TIMEOUT_MS / 1000}s timeout)`);
|
|
113
113
|
}
|
|
114
114
|
exports.completeTaskWithRetry = completeTaskWithRetry;
|
|
115
|
-
async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, resultVariable = '', basicAuthCredentials = {
|
|
116
|
-
username: '',
|
|
117
|
-
password: '',
|
|
118
|
-
}, page, modelerHomePage) {
|
|
115
|
+
async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, { resultVariable = '', basicAuthCredentials = { username: '', password: '' }, page, modelerHomePage, recoverSession, } = {}) {
|
|
119
116
|
await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
|
|
120
117
|
timeout: 120000,
|
|
121
118
|
});
|
|
@@ -179,7 +176,7 @@ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, conn
|
|
|
179
176
|
}
|
|
180
177
|
}
|
|
181
178
|
}
|
|
182
|
-
await modelerCreatePage.clickRestConnectorOption();
|
|
179
|
+
await modelerCreatePage.clickRestConnectorOption(recoverSession);
|
|
183
180
|
await connectorSettingsPage.clickAuthenticationTab();
|
|
184
181
|
await connectorSettingsPage.clickHTTPEndpointTab();
|
|
185
182
|
if (auth == 'bearer') {
|
|
@@ -225,10 +225,12 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
|
|
|
225
225
|
});
|
|
226
226
|
await settingsPage.clickOpenSettingsButton();
|
|
227
227
|
await settingsPage.clickLogoutButton();
|
|
228
|
-
await
|
|
228
|
+
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, 1000);
|
|
229
229
|
await (0, sleep_1.sleep)(20000);
|
|
230
|
+
await appsPage.clickCamundaApps();
|
|
231
|
+
await appsPage.clickModeler();
|
|
230
232
|
await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
|
|
231
|
-
timeout:
|
|
233
|
+
timeout: 90000,
|
|
232
234
|
});
|
|
233
235
|
await modelerHomePage.clickMessageBanner();
|
|
234
236
|
await (0, test_1.expect)(modelerHomePage.openOrganizationsButton).toBeVisible({
|
|
@@ -237,7 +239,6 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
|
|
|
237
239
|
await modelerHomePage.clickOpenOrganizationsButton();
|
|
238
240
|
await modelerHomePage.clickManageButton();
|
|
239
241
|
await consoleOrganizationsPage.clickUsersTab();
|
|
240
|
-
await page.reload();
|
|
241
242
|
await consoleOrganizationsPage.filterTable([
|
|
242
243
|
process.env.C8_USERNAME_TEST_3,
|
|
243
244
|
]);
|
|
@@ -447,8 +448,29 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
|
|
|
447
448
|
await homePage.clickSkipCustomization();
|
|
448
449
|
});
|
|
449
450
|
await _8_7_1.test.step('Navigate to Console', async () => {
|
|
450
|
-
|
|
451
|
-
|
|
451
|
+
// After clickSkipCustomization the browser is already on Console at
|
|
452
|
+
// /org/<uuid>/... – avoid triggering a redundant app-switcher navigation
|
|
453
|
+
// which can cause Auth0 to re-authenticate new users (taking >120 s).
|
|
454
|
+
const alreadyOnOrg = await page
|
|
455
|
+
.waitForURL(/\/org\//, { timeout: 10000 })
|
|
456
|
+
.then(() => true)
|
|
457
|
+
.catch(() => false);
|
|
458
|
+
if (!alreadyOnOrg) {
|
|
459
|
+
await appsPage.clickCamundaApps();
|
|
460
|
+
await appsPage.clickConsoleLink();
|
|
461
|
+
}
|
|
462
|
+
// If Auth0 re-auth was triggered (new-user first Console visit), log back in.
|
|
463
|
+
const onAuth0 = await loginPage.usernameInput
|
|
464
|
+
.waitFor({ state: 'visible', timeout: 10000 })
|
|
465
|
+
.then(() => true)
|
|
466
|
+
.catch(() => false);
|
|
467
|
+
if (onAuth0) {
|
|
468
|
+
await loginPage.fillUsername(emailAddress);
|
|
469
|
+
await loginPage.clickContinueButton();
|
|
470
|
+
await loginPage.fillPassword(password);
|
|
471
|
+
await loginPage.clickLoginButton();
|
|
472
|
+
await page.waitForURL(/\/org\//, { timeout: 90000 });
|
|
473
|
+
}
|
|
452
474
|
await (0, test_1.expect)(homePage.consoleBanner).toBeVisible({
|
|
453
475
|
timeout: 120000,
|
|
454
476
|
});
|
|
@@ -143,7 +143,13 @@ SM_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
143
143
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
144
144
|
});
|
|
145
145
|
await SM_8_10_1.test.step('Create BPMN Diagram with REST Connector using secrets and Start Process Instance', async () => {
|
|
146
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}',
|
|
146
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
|
|
147
|
+
resultVariable: 'result',
|
|
148
|
+
basicAuthCredentials: {
|
|
149
|
+
username: '{{secrets.username}}',
|
|
150
|
+
password: '{{secrets.password}}',
|
|
151
|
+
},
|
|
152
|
+
});
|
|
147
153
|
await modelerCreatePage.runProcessInstance('', mtTenant);
|
|
148
154
|
await (0, sleep_1.sleep)(20000);
|
|
149
155
|
});
|
|
@@ -301,7 +301,9 @@ if (process.env.IS_MT === 'true') {
|
|
|
301
301
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
302
302
|
});
|
|
303
303
|
await SM_8_10_1.test.step('Create A Diagram with a REST Connector and Start Process Instance', async () => {
|
|
304
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body'
|
|
304
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', {
|
|
305
|
+
recoverSession: () => navigationPage.goToModeler(undefined, credentials),
|
|
306
|
+
});
|
|
305
307
|
await modelerCreatePage.runProcessInstance('', tenantName); //Identity bug https://github.com/camunda/camunda/issues/35834
|
|
306
308
|
});
|
|
307
309
|
await SM_8_10_1.test.step('View Process Instance in Operate & assert process is complete', async () => {
|
|
@@ -142,7 +142,10 @@ SM_8_10_1.test.describe.parallel('Smoke Tests', () => {
|
|
|
142
142
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
143
143
|
});
|
|
144
144
|
await SM_8_10_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
|
|
145
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}',
|
|
145
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
|
|
146
|
+
resultVariable: 'result',
|
|
147
|
+
basicAuthCredentials: { username: 'username', password: 'password' },
|
|
148
|
+
});
|
|
146
149
|
await modelerCreatePage.runProcessInstance();
|
|
147
150
|
});
|
|
148
151
|
await SM_8_10_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
|
|
@@ -24,7 +24,7 @@ SM_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
24
24
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
25
25
|
});
|
|
26
26
|
await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector and Start Process Instance', async () => {
|
|
27
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body',
|
|
27
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
|
|
28
28
|
await modelerCreatePage.runProcessInstance();
|
|
29
29
|
await (0, sleep_1.sleep)(20000);
|
|
30
30
|
});
|
|
@@ -54,7 +54,7 @@ SM_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
54
54
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
55
55
|
});
|
|
56
56
|
await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
|
|
57
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/bearer-auth-test', 'bearer', '{message:response.body.status}',
|
|
57
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/bearer-auth-test', 'bearer', '{message:response.body.status}', { page, modelerHomePage });
|
|
58
58
|
await modelerCreatePage.runProcessInstance();
|
|
59
59
|
await (0, _setup_1.performBearerTokenAuthPostRequest)('https://camunda.proxy.beeceptor.com/pre-prod/bearer-auth-test', 'thisisabearertoken');
|
|
60
60
|
await (0, sleep_1.sleep)(20000);
|
|
@@ -145,7 +145,15 @@ SM_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
145
145
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
146
146
|
});
|
|
147
147
|
await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector using secrets and Start Process Instance', async () => {
|
|
148
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}',
|
|
148
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
|
|
149
|
+
resultVariable: 'result',
|
|
150
|
+
basicAuthCredentials: {
|
|
151
|
+
username: '{{secrets.username}}',
|
|
152
|
+
password: '{{secrets.password}}',
|
|
153
|
+
},
|
|
154
|
+
page,
|
|
155
|
+
modelerHomePage,
|
|
156
|
+
});
|
|
149
157
|
await modelerCreatePage.runProcessInstance();
|
|
150
158
|
await (0, sleep_1.sleep)(20000);
|
|
151
159
|
});
|
|
@@ -157,7 +157,7 @@ if (process.env.IS_MT === 'true') {
|
|
|
157
157
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
158
158
|
});
|
|
159
159
|
await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance', async () => {
|
|
160
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body',
|
|
160
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
|
|
161
161
|
await modelerCreatePage.runProcessInstance('', tenantName); //Identity bug https://github.com/camunda/camunda/issues/35834
|
|
162
162
|
});
|
|
163
163
|
await SM_8_8_1.test.step('View Process Instance in Operate & assert process is complete', async () => {
|
|
@@ -302,7 +302,11 @@ if (process.env.IS_MT === 'true') {
|
|
|
302
302
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
303
303
|
});
|
|
304
304
|
await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance', async () => {
|
|
305
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body',
|
|
305
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', {
|
|
306
|
+
page,
|
|
307
|
+
modelerHomePage,
|
|
308
|
+
recoverSession: () => navigationPage.goToModeler(undefined, credentials),
|
|
309
|
+
});
|
|
306
310
|
await modelerCreatePage.runProcessInstance('', tenantName); //Identity bug https://github.com/camunda/camunda/issues/35834
|
|
307
311
|
});
|
|
308
312
|
await SM_8_8_1.test.step('View Process Instance in Operate & assert process is complete', async () => {
|
|
@@ -436,14 +440,14 @@ if (process.env.IS_MT === 'true') {
|
|
|
436
440
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
437
441
|
});
|
|
438
442
|
await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance With Tenant 1', async () => {
|
|
439
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName1, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body',
|
|
443
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName1, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
|
|
440
444
|
await modelerCreatePage.runProcessInstance('', tenantName1); //Identity bug https://github.com/camunda/camunda/issues/35834
|
|
441
445
|
});
|
|
442
446
|
await SM_8_8_1.test.step('Create A Diagram with a REST Connector and Start Process Instance With Tenant 2', async () => {
|
|
443
447
|
await modelerHomePage.clickProjectBreadcrumb();
|
|
444
448
|
await modelerHomePage.clickDiagramTypeDropdown();
|
|
445
449
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
446
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName2, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body',
|
|
450
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName2, 'https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test', 'noAuth', 'body', { page, modelerHomePage });
|
|
447
451
|
await modelerCreatePage.runProcessInstance('', tenantName2);
|
|
448
452
|
});
|
|
449
453
|
await SM_8_8_1.test.step('View Process Instances in Operate, and Assert Process Complete in Operate with Correct Tenant', async () => {
|
|
@@ -147,7 +147,12 @@ SM_8_8_1.test.describe.parallel('Smoke Tests', () => {
|
|
|
147
147
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
148
148
|
});
|
|
149
149
|
await SM_8_8_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
|
|
150
|
-
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}',
|
|
150
|
+
await (0, UtilitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', {
|
|
151
|
+
resultVariable: 'result',
|
|
152
|
+
basicAuthCredentials: { username: 'username', password: 'password' },
|
|
153
|
+
page,
|
|
154
|
+
modelerHomePage,
|
|
155
|
+
});
|
|
151
156
|
await modelerCreatePage.runProcessInstance();
|
|
152
157
|
});
|
|
153
158
|
await SM_8_8_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
|