@camunda/e2e-test-suite 0.0.811 → 0.0.813
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.10/OptimizeCollectionsPage.d.ts +13 -0
- package/dist/pages/8.10/OptimizeCollectionsPage.js +105 -0
- package/dist/pages/8.8/FormJsPage.d.ts +2 -0
- package/dist/pages/8.8/FormJsPage.js +9 -0
- package/dist/tests/8.10/optimize-collections-ui.spec.d.ts +1 -0
- package/dist/tests/8.10/optimize-collections-ui.spec.js +46 -0
- package/dist/tests/8.8/web-modeler-user-flows.spec.js +34 -31
- package/package.json +1 -1
|
@@ -4,14 +4,27 @@ declare class OptimizeCollectionsPage {
|
|
|
4
4
|
readonly collectionsPageHeader: Locator;
|
|
5
5
|
readonly createNewButton: Locator;
|
|
6
6
|
readonly reportOption: Locator;
|
|
7
|
+
readonly collectionOption: Locator;
|
|
7
8
|
readonly modalCloseButton: Locator;
|
|
8
9
|
readonly processReport: Locator;
|
|
9
10
|
readonly collectionsLink: Locator;
|
|
11
|
+
readonly collectionNameInput: Locator;
|
|
12
|
+
readonly createCollectionConfirmButton: Locator;
|
|
13
|
+
readonly collectionContextMenuButton: Locator;
|
|
14
|
+
readonly editContextMenuOption: Locator;
|
|
15
|
+
readonly deleteContextMenuOption: Locator;
|
|
16
|
+
readonly confirmDeleteButton: Locator;
|
|
10
17
|
constructor(page: Page);
|
|
11
18
|
clickCollectionsLink(): Promise<void>;
|
|
12
19
|
clickCreateNewButton(): Promise<void>;
|
|
13
20
|
clickCreateNewButtonWithRetry(): Promise<void>;
|
|
14
21
|
clickReportOption(): Promise<void>;
|
|
15
22
|
clickMostRecentProcessReport(reportName: string): Promise<void>;
|
|
23
|
+
createCollection(name: string): Promise<void>;
|
|
24
|
+
finalizeCollectionCreationIfNeeded(): Promise<void>;
|
|
25
|
+
assertCollectionVisible(name: string): Promise<void>;
|
|
26
|
+
renameCollection(newName: string): Promise<void>;
|
|
27
|
+
deleteCollection(): Promise<void>;
|
|
28
|
+
assertCollectionNotVisible(name: string): Promise<void>;
|
|
16
29
|
}
|
|
17
30
|
export { OptimizeCollectionsPage };
|
|
@@ -8,9 +8,16 @@ class OptimizeCollectionsPage {
|
|
|
8
8
|
collectionsPageHeader;
|
|
9
9
|
createNewButton;
|
|
10
10
|
reportOption;
|
|
11
|
+
collectionOption;
|
|
11
12
|
modalCloseButton;
|
|
12
13
|
processReport;
|
|
13
14
|
collectionsLink;
|
|
15
|
+
collectionNameInput;
|
|
16
|
+
createCollectionConfirmButton;
|
|
17
|
+
collectionContextMenuButton;
|
|
18
|
+
editContextMenuOption;
|
|
19
|
+
deleteContextMenuOption;
|
|
20
|
+
confirmDeleteButton;
|
|
14
21
|
constructor(page) {
|
|
15
22
|
this.page = page;
|
|
16
23
|
this.collectionsPageHeader = page.getByRole('heading', {
|
|
@@ -21,11 +28,48 @@ class OptimizeCollectionsPage {
|
|
|
21
28
|
exact: true,
|
|
22
29
|
});
|
|
23
30
|
this.reportOption = page.getByText('Report', { exact: true });
|
|
31
|
+
this.collectionOption = page
|
|
32
|
+
.getByRole('menuitem', { name: 'Collection', exact: true })
|
|
33
|
+
.or(page.getByRole('button', { name: 'Collection', exact: true }));
|
|
24
34
|
this.modalCloseButton = page.locator('button').filter({ hasText: /^Close$/ });
|
|
25
35
|
this.processReport = page.getByText('Process Report').first();
|
|
26
36
|
this.collectionsLink = page
|
|
27
37
|
.getByRole('banner')
|
|
28
38
|
.getByRole('link', { name: 'Collections' });
|
|
39
|
+
this.collectionNameInput = page
|
|
40
|
+
.getByRole('dialog')
|
|
41
|
+
.getByRole('textbox')
|
|
42
|
+
.first();
|
|
43
|
+
this.createCollectionConfirmButton = page
|
|
44
|
+
.getByRole('dialog')
|
|
45
|
+
.getByRole('button', { name: /add data sources|create collection|save/i })
|
|
46
|
+
.or(page.locator('.cds--modal button.confirm.cds--btn--primary'))
|
|
47
|
+
.first();
|
|
48
|
+
this.collectionContextMenuButton = page
|
|
49
|
+
.locator('button.cds--overflow-menu')
|
|
50
|
+
.or(page.getByRole('button', {
|
|
51
|
+
name: /options|context menu|open menu|more|actions/i,
|
|
52
|
+
}))
|
|
53
|
+
.first();
|
|
54
|
+
this.editContextMenuOption = page
|
|
55
|
+
.getByRole('menuitem', { name: /edit/i })
|
|
56
|
+
.or(page.getByRole('button', { name: /edit/i }))
|
|
57
|
+
.or(page.locator('button.cds--overflow-menu-options__btn', {
|
|
58
|
+
hasText: /edit/i,
|
|
59
|
+
}))
|
|
60
|
+
.first();
|
|
61
|
+
this.deleteContextMenuOption = page
|
|
62
|
+
.getByRole('menuitem', { name: /delete/i })
|
|
63
|
+
.or(page.getByRole('button', { name: /delete/i }))
|
|
64
|
+
.or(page.locator('button.cds--overflow-menu-options__btn', {
|
|
65
|
+
hasText: /delete/i,
|
|
66
|
+
}))
|
|
67
|
+
.first();
|
|
68
|
+
this.confirmDeleteButton = page
|
|
69
|
+
.locator('.cds--modal button.confirm')
|
|
70
|
+
.or(page.locator('.Deleter button.confirm'))
|
|
71
|
+
.or(page.getByRole('dialog').getByRole('button', { name: /delete/i }))
|
|
72
|
+
.first();
|
|
29
73
|
}
|
|
30
74
|
async clickCollectionsLink() {
|
|
31
75
|
await (0, test_1.expect)(this.collectionsLink).toBeVisible({ timeout: 60000 });
|
|
@@ -64,5 +108,66 @@ class OptimizeCollectionsPage {
|
|
|
64
108
|
async clickMostRecentProcessReport(reportName) {
|
|
65
109
|
await this.page.getByText(reportName).click({ timeout: 60000 });
|
|
66
110
|
}
|
|
111
|
+
async createCollection(name) {
|
|
112
|
+
await this.clickCreateNewButton();
|
|
113
|
+
await (0, test_1.expect)(this.collectionOption).toBeVisible({ timeout: 30000 });
|
|
114
|
+
await this.collectionOption.click({ timeout: 30000 });
|
|
115
|
+
await (0, test_1.expect)(this.collectionNameInput).toBeVisible({ timeout: 30000 });
|
|
116
|
+
await this.collectionNameInput.click();
|
|
117
|
+
await this.collectionNameInput.fill(name);
|
|
118
|
+
await (0, test_1.expect)(this.createCollectionConfirmButton).toBeVisible({
|
|
119
|
+
timeout: 30000,
|
|
120
|
+
});
|
|
121
|
+
await this.createCollectionConfirmButton.click({ timeout: 30000 });
|
|
122
|
+
await this.finalizeCollectionCreationIfNeeded();
|
|
123
|
+
}
|
|
124
|
+
async finalizeCollectionCreationIfNeeded() {
|
|
125
|
+
const addSourceModal = this.page.getByRole('dialog', {
|
|
126
|
+
name: /add source/i,
|
|
127
|
+
});
|
|
128
|
+
if (await addSourceModal.isVisible({ timeout: 15000 }).catch(() => false)) {
|
|
129
|
+
const createCollectionButton = addSourceModal.getByRole('button', {
|
|
130
|
+
name: /^create collection$/i,
|
|
131
|
+
});
|
|
132
|
+
await (0, test_1.expect)(createCollectionButton).toBeVisible({ timeout: 30000 });
|
|
133
|
+
await createCollectionButton.click({ timeout: 30000 });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async assertCollectionVisible(name) {
|
|
137
|
+
await (0, test_1.expect)(this.page
|
|
138
|
+
.getByRole('heading', { name })
|
|
139
|
+
.or(this.page.getByText(name))
|
|
140
|
+
.first()).toBeVisible({ timeout: 60000 });
|
|
141
|
+
}
|
|
142
|
+
async renameCollection(newName) {
|
|
143
|
+
await (0, test_1.expect)(this.collectionContextMenuButton).toBeVisible({
|
|
144
|
+
timeout: 30000,
|
|
145
|
+
});
|
|
146
|
+
await this.collectionContextMenuButton.click({ timeout: 30000 });
|
|
147
|
+
await (0, test_1.expect)(this.editContextMenuOption).toBeVisible({ timeout: 30000 });
|
|
148
|
+
await this.editContextMenuOption.click({ timeout: 30000 });
|
|
149
|
+
await (0, test_1.expect)(this.collectionNameInput).toBeVisible({ timeout: 30000 });
|
|
150
|
+
await this.collectionNameInput.click();
|
|
151
|
+
await this.collectionNameInput.fill(newName);
|
|
152
|
+
await (0, test_1.expect)(this.createCollectionConfirmButton).toBeVisible({
|
|
153
|
+
timeout: 30000,
|
|
154
|
+
});
|
|
155
|
+
await this.createCollectionConfirmButton.click({ timeout: 30000 });
|
|
156
|
+
}
|
|
157
|
+
async deleteCollection() {
|
|
158
|
+
await (0, test_1.expect)(this.collectionContextMenuButton).toBeVisible({
|
|
159
|
+
timeout: 30000,
|
|
160
|
+
});
|
|
161
|
+
await this.collectionContextMenuButton.click({ timeout: 30000 });
|
|
162
|
+
await (0, test_1.expect)(this.deleteContextMenuOption).toBeVisible({ timeout: 30000 });
|
|
163
|
+
await this.deleteContextMenuOption.click({ timeout: 30000 });
|
|
164
|
+
await (0, test_1.expect)(this.confirmDeleteButton).toBeVisible({ timeout: 30000 });
|
|
165
|
+
await this.confirmDeleteButton.click({ timeout: 30000 });
|
|
166
|
+
}
|
|
167
|
+
async assertCollectionNotVisible(name) {
|
|
168
|
+
await (0, test_1.expect)(this.page.getByText(name).first()).toBeHidden({
|
|
169
|
+
timeout: 60000,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
67
172
|
}
|
|
68
173
|
exports.OptimizeCollectionsPage = OptimizeCollectionsPage;
|
|
@@ -9,6 +9,7 @@ declare class FormJsPage {
|
|
|
9
9
|
readonly textField: Locator;
|
|
10
10
|
readonly documentPreview: Locator;
|
|
11
11
|
readonly keyInput: Locator;
|
|
12
|
+
readonly fieldLabelInput: Locator;
|
|
12
13
|
readonly uploadMultipleFilesToggle: Locator;
|
|
13
14
|
readonly documentReferenceInput: Locator;
|
|
14
15
|
readonly generalPanel: Locator;
|
|
@@ -26,6 +27,7 @@ declare class FormJsPage {
|
|
|
26
27
|
clickGenerateFormButton(): Promise<void>;
|
|
27
28
|
dragAndDrop(source: Locator, target: Locator): Promise<void>;
|
|
28
29
|
fillKeyInput(key: string): Promise<void>;
|
|
30
|
+
fillFieldLabel(label: string): Promise<void>;
|
|
29
31
|
enableUploadMultipleFiles(): Promise<void>;
|
|
30
32
|
filldocumentReferenceInput(key: string): Promise<void>;
|
|
31
33
|
clickGeneralPropertiesPanel(): Promise<void>;
|
|
@@ -13,6 +13,7 @@ class FormJsPage {
|
|
|
13
13
|
textField;
|
|
14
14
|
documentPreview;
|
|
15
15
|
keyInput;
|
|
16
|
+
fieldLabelInput;
|
|
16
17
|
uploadMultipleFilesToggle;
|
|
17
18
|
documentReferenceInput;
|
|
18
19
|
generalPanel;
|
|
@@ -33,6 +34,7 @@ class FormJsPage {
|
|
|
33
34
|
this.documentPreview = page.locator('button[data-field-type="documentPreview"]');
|
|
34
35
|
this.filePicker = page.locator('button[data-field-type="filepicker"]');
|
|
35
36
|
this.keyInput = page.getByRole('textbox', { name: 'key' });
|
|
37
|
+
this.fieldLabelInput = page.locator('#bio-properties-panel-label');
|
|
36
38
|
this.uploadMultipleFilesToggle = page.locator('div[data-entry-id="multiple"] .bio-properties-panel-toggle-switch__switcher');
|
|
37
39
|
this.documentReferenceInput = page.getByRole('textbox', {
|
|
38
40
|
name: 'document reference',
|
|
@@ -91,6 +93,13 @@ class FormJsPage {
|
|
|
91
93
|
await (0, test_1.expect)(this.keyInput).toHaveValue(key, { timeout: 20000 });
|
|
92
94
|
await (0, sleep_1.sleep)(1000);
|
|
93
95
|
}
|
|
96
|
+
async fillFieldLabel(label) {
|
|
97
|
+
// "Field label" is a contenteditable (FEEL-capable) editor, not an <input>,
|
|
98
|
+
// so assert its text content rather than a form value.
|
|
99
|
+
await this.fieldLabelInput.fill(label, { timeout: 60000 });
|
|
100
|
+
await (0, test_1.expect)(this.fieldLabelInput).toContainText(label, { timeout: 20000 });
|
|
101
|
+
await (0, sleep_1.sleep)(1000);
|
|
102
|
+
}
|
|
94
103
|
async enableUploadMultipleFiles() {
|
|
95
104
|
await this.uploadMultipleFilesToggle.click({ timeout: 60000 });
|
|
96
105
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const test_1 = require("@playwright/test");
|
|
4
|
+
const _8_10_1 = require("../../fixtures/8.10");
|
|
5
|
+
const _setup_1 = require("../../test-setup.js");
|
|
6
|
+
const UtilitiesPage_1 = require("../../pages/8.10/UtilitiesPage");
|
|
7
|
+
const users_1 = require("../../utils/users");
|
|
8
|
+
const testUser = (0, users_1.getTestUser)('twentySecondUser');
|
|
9
|
+
const clusterName = 'Test Cluster';
|
|
10
|
+
_8_10_1.test.describe.configure({ mode: 'parallel' });
|
|
11
|
+
_8_10_1.test.describe('Optimize Collections Lifecycle UI Tests @optimize-collections-ui @8.10', () => {
|
|
12
|
+
_8_10_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
|
|
13
|
+
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
|
|
14
|
+
});
|
|
15
|
+
_8_10_1.test.afterEach(async ({ page }, testInfo) => {
|
|
16
|
+
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
17
|
+
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
18
|
+
});
|
|
19
|
+
(0, _8_10_1.test)('Create, rename and delete a collection', async ({ appsPage, optimizeHomePage, optimizeCollectionsPage, }) => {
|
|
20
|
+
_8_10_1.test.slow();
|
|
21
|
+
const collectionName = 'E2E Collection ' + (await (0, _setup_1.generateRandomStringAsync)(5));
|
|
22
|
+
const renamedCollectionName = 'E2E Collection Renamed ' + (await (0, _setup_1.generateRandomStringAsync)(5));
|
|
23
|
+
await _8_10_1.test.step('Navigate to Optimize from the Camunda apps menu', async () => {
|
|
24
|
+
await appsPage.clickCamundaApps();
|
|
25
|
+
await appsPage.clickOptimize(clusterName);
|
|
26
|
+
await test_1.expect
|
|
27
|
+
.poll(async () => optimizeHomePage.optimizeBanner.isVisible({ timeout: 5000 }), { timeout: 120000 })
|
|
28
|
+
.toBe(true);
|
|
29
|
+
});
|
|
30
|
+
await _8_10_1.test.step('Open the Collections page', async () => {
|
|
31
|
+
await optimizeHomePage.clickCollectionsLink();
|
|
32
|
+
});
|
|
33
|
+
await _8_10_1.test.step('Create a new collection and verify it is created', async () => {
|
|
34
|
+
await optimizeCollectionsPage.createCollection(collectionName);
|
|
35
|
+
await optimizeCollectionsPage.assertCollectionVisible(collectionName);
|
|
36
|
+
});
|
|
37
|
+
await _8_10_1.test.step('Rename the collection and verify the new name', async () => {
|
|
38
|
+
await optimizeCollectionsPage.renameCollection(renamedCollectionName);
|
|
39
|
+
await optimizeCollectionsPage.assertCollectionVisible(renamedCollectionName);
|
|
40
|
+
});
|
|
41
|
+
await _8_10_1.test.step('Delete the collection and verify it is removed', async () => {
|
|
42
|
+
await optimizeCollectionsPage.deleteCollection();
|
|
43
|
+
await optimizeCollectionsPage.assertCollectionNotVisible(renamedCollectionName);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -11,7 +11,6 @@ const UtilitiesPage_1 = require("../../pages/8.8/UtilitiesPage");
|
|
|
11
11
|
const deleteOrg_1 = require("../../utils/deleteOrg");
|
|
12
12
|
const sleep_1 = require("../../utils/sleep");
|
|
13
13
|
const mailSlurpClient_1 = require("../../utils/mailSlurpClient");
|
|
14
|
-
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
15
14
|
const users_1 = require("../../utils/users");
|
|
16
15
|
const testUser = (0, users_1.getTestUser)('eleventhUser');
|
|
17
16
|
_8_8_1.test.describe.configure({ mode: 'parallel' });
|
|
@@ -407,10 +406,13 @@ _8_8_1.test.describe('Web Modeler User Flow Tests', () => {
|
|
|
407
406
|
});
|
|
408
407
|
});
|
|
409
408
|
//Skipped due to bug 22577: https://github.com/camunda/camunda-hub/issues/22577
|
|
410
|
-
_8_8_1.test
|
|
409
|
+
(0, _8_8_1.test)('Public Start Form @tasklistV1', async ({ page, homePage, modelerHomePage, appsPage, modelerCreatePage, formJsPage, taskDetailsPage, taskPanelPage, operateHomePage, operateProcessesPage, operateProcessInstancePage, browser, }) => {
|
|
411
410
|
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
412
411
|
const processName = 'User_Task_Process_With_Public_Form' + randomString;
|
|
413
412
|
const formName = 'Public form' + randomString;
|
|
413
|
+
// Unique per run so repeated runs in the shared project never collide.
|
|
414
|
+
const publicFormFieldKey = 'Public_Form_Text_Field_' + randomString;
|
|
415
|
+
const publicFormSubmission = 'Public Form Test Value';
|
|
414
416
|
await _8_8_1.test.step('Navigate to Web Modeler', async () => {
|
|
415
417
|
await (0, test_1.expect)(homePage.camundaComponentsButton).toBeVisible({
|
|
416
418
|
timeout: 120000,
|
|
@@ -431,7 +433,8 @@ _8_8_1.test.describe('Web Modeler User Flow Tests', () => {
|
|
|
431
433
|
await formJsPage.dragAndDrop(formJsPage.textField, formJsPage.formEditor);
|
|
432
434
|
await (0, test_1.expect)(formJsPage.textFieldInForm).toBeVisible();
|
|
433
435
|
await formJsPage.clickGeneralPropertiesPanel();
|
|
434
|
-
await formJsPage.
|
|
436
|
+
await formJsPage.fillFieldLabel(publicFormFieldKey);
|
|
437
|
+
await formJsPage.fillKeyInput(publicFormFieldKey);
|
|
435
438
|
await formJsPage.deployForm(clusterName);
|
|
436
439
|
});
|
|
437
440
|
await _8_8_1.test.step('Add A BPMN Template To The Project', async () => {
|
|
@@ -451,39 +454,39 @@ _8_8_1.test.describe('Web Modeler User Flow Tests', () => {
|
|
|
451
454
|
publicFormLink = await modelerCreatePage.getPublicationLink();
|
|
452
455
|
await (0, sleep_1.sleep)(1000);
|
|
453
456
|
});
|
|
454
|
-
await _8_8_1.test.step('
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
});
|
|
462
|
-
await _8_8_1.test.step('Access Public Form After Session Reset and Submit the Form', async () => {
|
|
457
|
+
await _8_8_1.test.step('Access public form anonymously and submit', async () => {
|
|
458
|
+
// A public start form must be reachable without authentication, so open
|
|
459
|
+
// it in a fresh context; the main session stays logged in for the task
|
|
460
|
+
// completion step below.
|
|
461
|
+
const anonContext = await browser.newContext();
|
|
462
|
+
const anonPage = await anonContext.newPage();
|
|
463
|
+
const anonTaskDetailsPage = new TaskDetailsPage_1.TaskDetailsPage(anonPage);
|
|
463
464
|
console.log('Navigating to public form:', publicFormLink);
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
await
|
|
473
|
-
|
|
474
|
-
});
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
465
|
+
// Re-navigate until the form renders to absorb brief Tasklist import lag
|
|
466
|
+
// after deploy.
|
|
467
|
+
await (0, test_1.expect)(async () => {
|
|
468
|
+
await anonPage.goto(publicFormLink, { waitUntil: 'domcontentloaded' });
|
|
469
|
+
await (0, test_1.expect)(anonTaskDetailsPage.textInput).toBeVisible({
|
|
470
|
+
timeout: 15000,
|
|
471
|
+
});
|
|
472
|
+
}).toPass({ timeout: 120000, intervals: [5000, 10000, 15000] });
|
|
473
|
+
await anonTaskDetailsPage.fillTextInput(publicFormSubmission);
|
|
474
|
+
await anonTaskDetailsPage.clickSubmitButton();
|
|
475
|
+
await (0, test_1.expect)(anonPage.getByRole('heading', { name: 'Success!' })).toBeVisible({ timeout: 30000 });
|
|
476
|
+
await anonContext.close();
|
|
477
|
+
});
|
|
478
|
+
await _8_8_1.test.step('Complete User Task in Tasklist', async () => {
|
|
479
|
+
// The main session is still authenticated, so go straight to Tasklist.
|
|
478
480
|
await appsPage.clickCamundaApps();
|
|
479
481
|
await appsPage.clickTasklist(clusterName);
|
|
480
|
-
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, taskPanelPage.taskListPageBanner, 'Tasklist banner');
|
|
481
482
|
await taskPanelPage.openTask(processName);
|
|
482
|
-
await (0, test_1.expect)(page
|
|
483
|
-
.getByRole('row')
|
|
484
|
-
.filter({ hasText: 'Public_Form_Text_Field' })
|
|
485
|
-
.getByText('"Public Form Test Value"')).toBeVisible({ timeout: 30000 });
|
|
486
483
|
await taskDetailsPage.clickAssignToMeButton();
|
|
484
|
+
await (0, test_1.expect)(taskDetailsPage.assignedToMeText).toBeVisible({
|
|
485
|
+
timeout: 60000,
|
|
486
|
+
});
|
|
487
|
+
// The value submitted via the public form is carried into the task
|
|
488
|
+
// variable as a JSON string, so it is wrapped in quotes.
|
|
489
|
+
await (0, test_1.expect)(page.getByTitle(`${publicFormFieldKey} Value`)).toHaveValue(`"${publicFormSubmission}"`, { timeout: 30000 });
|
|
487
490
|
await taskDetailsPage.clickCompleteTaskButton();
|
|
488
491
|
});
|
|
489
492
|
await _8_8_1.test.step('Assert Process Instance is Completed in Operate', async () => {
|