@digital-ai/devops-page-object-deploy 0.0.0-snapshot-20251104102306
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/CHANGELOG.md +57 -0
- package/LICENSE.md +1 -0
- package/README.md +7 -0
- package/dist/main.js +409 -0
- package/dist/main.js.map +1 -0
- package/dist/module.js +405 -0
- package/dist/module.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +47 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# @digital-ai/devops-page-object-deploy
|
|
2
|
+
|
|
3
|
+
## 0.0.0-snapshot-20251104102306
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- fc2cbb0: Cmd App Deployment workflow
|
|
8
|
+
|
|
9
|
+
## 0.0.7
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- d85951c: Page objects for Deploy Playwright
|
|
14
|
+
|
|
15
|
+
## 0.0.6
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 95c5229: Pages updated with parentLocators and with dataGrid class
|
|
20
|
+
This PR holds revamp of the pages with its parentLocator.
|
|
21
|
+
- 512af21: Added Move-Ci function, optimized application util methods
|
|
22
|
+
|
|
23
|
+
## 0.0.5
|
|
24
|
+
|
|
25
|
+
### Patch Changes
|
|
26
|
+
|
|
27
|
+
- e68ca43: Created methods for validating duplicate context-menu
|
|
28
|
+
inlineRename() method is created to rename CI's
|
|
29
|
+
duplicate() method is created to duplicate the CI's
|
|
30
|
+
Fixed the conditional check on expanding node path which was not working with isVisible method.
|
|
31
|
+
- 518605e: Fixed pages for context-menu delete ci scenario's
|
|
32
|
+
Pages to work with delete context-menu is created newly.
|
|
33
|
+
Methods for tab verification is added in Tab page file.
|
|
34
|
+
|
|
35
|
+
## 0.0.4
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- 52b8a07: Re-structuring explorer pages
|
|
40
|
+
- 713c5ef: Created page objects for create-ci-scenario test cases.
|
|
41
|
+
Re-structured page object to avoid duplication of code structure.
|
|
42
|
+
Commonly used methods, code is described under explorer directory structure.
|
|
43
|
+
|
|
44
|
+
S 94677
|
|
45
|
+
|
|
46
|
+
## 0.0.3
|
|
47
|
+
|
|
48
|
+
### Patch Changes
|
|
49
|
+
|
|
50
|
+
- 44ba67e: Created page files for add-new-ci-scenario test suite migration
|
|
51
|
+
- 2930770: Method created to handle multiple contextual menu clicks
|
|
52
|
+
|
|
53
|
+
## 0.0.2
|
|
54
|
+
|
|
55
|
+
### Patch Changes
|
|
56
|
+
|
|
57
|
+
- d47a9be: [S-94130] Initialize Page Objects for Deploy
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
All materials included in this package are subject to your existing commercial license or subscription agreement terms with Digital.ai Software Inc. or its Affiliates.
|
package/README.md
ADDED
package/dist/main.js
ADDED
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
var $1UEKj$playwrighttest = require("@playwright/test");
|
|
2
|
+
|
|
3
|
+
function $parcel$export(e, n, v, s) {
|
|
4
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
$parcel$export(module.exports, "test", () => $3352700e95ddc19e$export$e0969da9b8fb378d);
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class $ae23b16684112d0b$export$2b65d1d97338f32b {
|
|
11
|
+
constructor(page){
|
|
12
|
+
this.page = page;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class $f280624787ceceed$export$36d69433c4f81145 extends (0, $ae23b16684112d0b$export$2b65d1d97338f32b) {
|
|
18
|
+
async clickUserManagement() {
|
|
19
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
20
|
+
hasText: "User management"
|
|
21
|
+
}).click();
|
|
22
|
+
await this.page.getByRole("link", {
|
|
23
|
+
name: "Users"
|
|
24
|
+
}).click();
|
|
25
|
+
}
|
|
26
|
+
async verifyDeployLogoIsPresent() {
|
|
27
|
+
const logo = this.page.getByAltText("Deploy");
|
|
28
|
+
await (0, $1UEKj$playwrighttest.expect)(logo).toBeVisible();
|
|
29
|
+
}
|
|
30
|
+
async verifyDeployTextIsPresent() {
|
|
31
|
+
const title = this.page.getByTitle("digital.ai");
|
|
32
|
+
await (0, $1UEKj$playwrighttest.expect)(title).toBeVisible();
|
|
33
|
+
}
|
|
34
|
+
async clickReports() {
|
|
35
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
36
|
+
hasText: "Reports"
|
|
37
|
+
}).click();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class $c949c453826379e3$export$ecdc3cf9d1cfe143 extends (0, $ae23b16684112d0b$export$2b65d1d97338f32b) {
|
|
45
|
+
/**
|
|
46
|
+
* Login with username and password
|
|
47
|
+
* @param userName
|
|
48
|
+
* @param password
|
|
49
|
+
*/ // this should be refactored to take an object and not disable the rule!!
|
|
50
|
+
// eslint-disable-next-line max-params
|
|
51
|
+
async createNewUser(username, fullName, email, password, confirmPassword) {
|
|
52
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
53
|
+
hasText: "Users"
|
|
54
|
+
}).click();
|
|
55
|
+
await this.page.getByRole("button", {
|
|
56
|
+
name: "Add user"
|
|
57
|
+
}).click();
|
|
58
|
+
await this.page.locator('input[name="username"]').fill(username);
|
|
59
|
+
await this.page.locator('input[name="fullName"]').fill(fullName);
|
|
60
|
+
await this.page.locator('input[name="email"]').fill(email);
|
|
61
|
+
const passwordInput = this.page.locator('input[name="password"]');
|
|
62
|
+
await passwordInput.click({
|
|
63
|
+
force: true
|
|
64
|
+
});
|
|
65
|
+
await passwordInput.fill(password);
|
|
66
|
+
await this.page.locator('input[name="confirmPassword"]').fill(confirmPassword);
|
|
67
|
+
await this.page.getByRole("button", {
|
|
68
|
+
name: "Save"
|
|
69
|
+
}).click();
|
|
70
|
+
}
|
|
71
|
+
async verifySuccessMessage() {
|
|
72
|
+
const SuccessMessage = this.page.getByRole("alertdialog");
|
|
73
|
+
await (0, $1UEKj$playwrighttest.expect)(SuccessMessage).toBeVisible();
|
|
74
|
+
await (0, $1UEKj$playwrighttest.expect)(SuccessMessage).toHaveText(/User ".*" created/i);
|
|
75
|
+
}
|
|
76
|
+
async verifyUserErrorMessage() {
|
|
77
|
+
await (0, $1UEKj$playwrighttest.expect)(this.page.locator('.rrt-middle-container[role="alertdialog"]').nth(1)).toContainText(/already in use/i);
|
|
78
|
+
}
|
|
79
|
+
async deleteTheUserAndVerifyItIsDeleted(username) {
|
|
80
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
81
|
+
hasText: "Users"
|
|
82
|
+
}).click();
|
|
83
|
+
await this.page.waitForTimeout(10000);
|
|
84
|
+
await this.page.getByPlaceholder("Filter...").fill(username);
|
|
85
|
+
await this.page.waitForTimeout(10000);
|
|
86
|
+
await this.page.locator("td.users-table-actions button.delete.xl-icon.table-action").click();
|
|
87
|
+
await this.page.getByRole("button", {
|
|
88
|
+
name: "Delete",
|
|
89
|
+
exact: true
|
|
90
|
+
}).click();
|
|
91
|
+
const DeleteMessage = this.page.getByRole("alertdialog");
|
|
92
|
+
await (0, $1UEKj$playwrighttest.expect)(DeleteMessage).toBeVisible();
|
|
93
|
+
await (0, $1UEKj$playwrighttest.expect)(DeleteMessage).toHaveText(/User ".*" deleted/i);
|
|
94
|
+
}
|
|
95
|
+
async editUserAndVerify(username, editfullname) {
|
|
96
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
97
|
+
hasText: "Users"
|
|
98
|
+
}).click();
|
|
99
|
+
await this.page.waitForTimeout(10000);
|
|
100
|
+
await this.page.getByPlaceholder("Filter...").fill(username);
|
|
101
|
+
await this.page.waitForTimeout(10000);
|
|
102
|
+
await this.page.locator("i.icon-edit.dot-i").first().click();
|
|
103
|
+
await this.page.locator('input[name="fullName"]').fill(editfullname);
|
|
104
|
+
await this.page.getByRole("button", {
|
|
105
|
+
name: "Save",
|
|
106
|
+
exact: true
|
|
107
|
+
}).click();
|
|
108
|
+
const EditMessage = this.page.getByRole("alertdialog");
|
|
109
|
+
await (0, $1UEKj$playwrighttest.expect)(EditMessage).toBeVisible();
|
|
110
|
+
const editedUsername = this.page.locator("td.users-table-fullName div").textContent();
|
|
111
|
+
// eslint-disable-next-line no-console
|
|
112
|
+
console.log(editedUsername);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class $8506c0ab2b7a06f6$export$c88e1d16f82516d extends (0, $ae23b16684112d0b$export$2b65d1d97338f32b) {
|
|
119
|
+
/* Helps to navigate to the Overthere LocalHost page */ async navigateToOverthereLocalHostPage() {
|
|
120
|
+
const configNode = this.page.locator('span[data-id="Infrastructure"]');
|
|
121
|
+
await configNode.hover();
|
|
122
|
+
await this.page.waitForTimeout(500); // small delay for hover animation
|
|
123
|
+
const menuButton = this.page.locator('i.context-menu-button[data-id="Infrastructure"]');
|
|
124
|
+
await menuButton.click();
|
|
125
|
+
await this.page.getByTitle("New").click();
|
|
126
|
+
await this.page.getByText("overthere").click();
|
|
127
|
+
await this.page.getByText("LocalHost").click();
|
|
128
|
+
}
|
|
129
|
+
/* Helps to create a LocalHost of type UNIX */ async createLocalHostForUnixType(name) {
|
|
130
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
131
|
+
await this.page.locator('input[type="text"]').nth(7).click();
|
|
132
|
+
await this.page.getByTitle("UNIX").click();
|
|
133
|
+
await this.page.getByRole("button", {
|
|
134
|
+
name: "Save and close"
|
|
135
|
+
}).click();
|
|
136
|
+
}
|
|
137
|
+
/* Helps to create a LocalHost of type WINDOWS */ async createLocalHostForWindowsType(name) {
|
|
138
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
139
|
+
await this.page.locator('input[type="text"]').nth(7).click();
|
|
140
|
+
await this.page.getByTitle("WINDOWS").click();
|
|
141
|
+
await this.page.getByRole("button", {
|
|
142
|
+
name: "Save and close"
|
|
143
|
+
}).click();
|
|
144
|
+
}
|
|
145
|
+
/* Helps to create a LocalHost of type ZOS */ async createLocalHostForZosType(name) {
|
|
146
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
147
|
+
await this.page.locator('input[type="text"]').nth(7).click();
|
|
148
|
+
await this.page.getByTitle("ZOS").click();
|
|
149
|
+
await this.page.getByRole("button", {
|
|
150
|
+
name: "Save and close"
|
|
151
|
+
}).click();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class $64bc587a017c1e89$export$12530425267834a9 extends (0, $ae23b16684112d0b$export$2b65d1d97338f32b) {
|
|
158
|
+
/* Helps to navigate to the Environments page */ async navigateToEnvironmentsPage() {
|
|
159
|
+
const configNode = this.page.locator('span[data-id="Environments"]');
|
|
160
|
+
await configNode.hover();
|
|
161
|
+
await this.page.waitForTimeout(500); // small delay for hover animation
|
|
162
|
+
const menuButton = this.page.locator('i.context-menu-button[data-id="Environments"]');
|
|
163
|
+
await menuButton.click();
|
|
164
|
+
await this.page.getByTitle("New").click();
|
|
165
|
+
await this.page.getByTitle("udm.Environment").click();
|
|
166
|
+
}
|
|
167
|
+
/* Helps to create a new Environment */ async createEnvironment(name) {
|
|
168
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
169
|
+
await this.page.locator("i.xl-icon.arrow-down-icon.show-all").nth(0).click();
|
|
170
|
+
await this.page.getByTitle("Infrastructure/UnixHost").click();
|
|
171
|
+
await this.page.getByRole("button", {
|
|
172
|
+
name: "Save and close"
|
|
173
|
+
}).click();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class $29f18122ec27b03a$export$1533b625ec0c75e2 extends (0, $ae23b16684112d0b$export$2b65d1d97338f32b) {
|
|
181
|
+
taskId = "";
|
|
182
|
+
executedText = "";
|
|
183
|
+
/* Helps to navigate to the Applications page */ async navigateToApplicationsPage() {
|
|
184
|
+
const configNode = this.page.locator('span[data-id="Applications"]');
|
|
185
|
+
await configNode.hover();
|
|
186
|
+
await this.page.waitForTimeout(500); // small delay for hover animation
|
|
187
|
+
await this.page.locator('i.context-menu-button[data-id="Applications"]').click();
|
|
188
|
+
await this.page.getByTitle("New").click();
|
|
189
|
+
await this.page.getByTitle("udm.Application").click();
|
|
190
|
+
}
|
|
191
|
+
/*Create a New Application and Deployment Package */ async createNewDeploymentPackage(applicationName, packageName, cmdAppName, cmdAppCommand) {
|
|
192
|
+
await this.page.locator('input[name="name"]').fill(applicationName);
|
|
193
|
+
await this.page.getByRole("button", {
|
|
194
|
+
name: "Save and close"
|
|
195
|
+
}).click();
|
|
196
|
+
await this.page.locator('div[data-id="Applications"] .infinite-tree-node > a').click();
|
|
197
|
+
const configNode = this.page.locator('span[data-id="Applications/Test Application"]');
|
|
198
|
+
await configNode.hover();
|
|
199
|
+
await this.page.waitForTimeout(500);
|
|
200
|
+
await this.page.locator('i.context-menu-button[data-id="Applications/Test Application"]').click();
|
|
201
|
+
await this.page.getByTitle("New").click();
|
|
202
|
+
await this.page.getByTitle("udm.DeploymentPackage").click();
|
|
203
|
+
await this.page.locator('input[name="name"]').fill(packageName);
|
|
204
|
+
await this.page.getByRole("button", {
|
|
205
|
+
name: "Save and close"
|
|
206
|
+
}).click();
|
|
207
|
+
await this.page.waitForTimeout(1000);
|
|
208
|
+
await this.page.locator('div[data-id="Applications/Test Application"] .infinite-tree-node > a').click();
|
|
209
|
+
await this.page.waitForTimeout(500);
|
|
210
|
+
await this.page.locator('span[data-id="Applications/Test Application/1.0.0"]').click();
|
|
211
|
+
await this.page.locator('i.context-menu-button[data-id="Applications/Test Application/1.0.0"]').click();
|
|
212
|
+
await this.page.getByTitle("New").click();
|
|
213
|
+
await this.page.getByTitle("cmd", {
|
|
214
|
+
exact: true
|
|
215
|
+
}).click();
|
|
216
|
+
await this.page.getByTitle("cmd.Command", {
|
|
217
|
+
exact: true
|
|
218
|
+
}).click();
|
|
219
|
+
await this.page.locator('input[name="name"]').fill(cmdAppName);
|
|
220
|
+
await this.page.locator('textarea[name="commandLine"]').fill(cmdAppCommand);
|
|
221
|
+
await this.page.waitForTimeout(500);
|
|
222
|
+
await this.page.locator("button", {
|
|
223
|
+
hasText: /^Save$/
|
|
224
|
+
}).first().click();
|
|
225
|
+
await this.page.waitForTimeout(1000);
|
|
226
|
+
await this.page.locator("i.xl-icon.close-icon").first().click();
|
|
227
|
+
}
|
|
228
|
+
/*Deploy the application*/ async deployApp() {
|
|
229
|
+
/* await this.page.locator('span[data-id="Applications"]').click();
|
|
230
|
+
await this.page.waitForTimeout(1000);
|
|
231
|
+
await this.page.locator('div[data-id="Applications"] .infinite-tree-toggler').click({ force: true });
|
|
232
|
+
//await this.page.locator('div[data-id="Applications"] .infinite-tree-node > a').click({ force: true });
|
|
233
|
+
await this.page.waitForTimeout(1000);
|
|
234
|
+
await this.page.locator('div[data-id="Applications/Test Application"] .infinite-tree-node > a').click();
|
|
235
|
+
await this.page.locator('span[data-id="Applications/Test Application/1.0.0"]').click(); */ await this.page.waitForTimeout(3000);
|
|
236
|
+
await this.page.locator('i.context-menu-button[data-id="Applications/Test Application/1.0.0"]').click();
|
|
237
|
+
await this.page.locator('a[title="Deploy"]').click();
|
|
238
|
+
await this.page.locator('input[name="selections"][value="Environments/Test Environment"]').click();
|
|
239
|
+
await this.page.getByRole("button", {
|
|
240
|
+
name: "Continue"
|
|
241
|
+
}).click();
|
|
242
|
+
await this.page.waitForTimeout(1000);
|
|
243
|
+
await this.page.locator("button.deploy.xl-primary").click();
|
|
244
|
+
await this.page.waitForTimeout(5000);
|
|
245
|
+
//Get the task id
|
|
246
|
+
this.taskId = await this.page.locator("div.task-id").textContent() || "";
|
|
247
|
+
console.log(`Deployment Task ID in applications page: ${this.taskId}`);
|
|
248
|
+
//Verify no failure and all are done
|
|
249
|
+
const labels = this.page.locator("span.label");
|
|
250
|
+
await (0, $1UEKj$playwrighttest.expect)(labels).toHaveCount(3);
|
|
251
|
+
await (0, $1UEKj$playwrighttest.expect)(labels).toHaveText([
|
|
252
|
+
"EXECUTED",
|
|
253
|
+
"DONE",
|
|
254
|
+
"DONE"
|
|
255
|
+
]);
|
|
256
|
+
//Get the text executed
|
|
257
|
+
await this.page.locator('div[data-id="0_1_1"] .infinite-tree-node > a').click();
|
|
258
|
+
await this.page.getByTitle("Execute Test Command").click();
|
|
259
|
+
this.executedText = await this.page.locator("div.step-log-body pre").nth(1).innerText();
|
|
260
|
+
console.log(`Executed Text in applications page: ${this.executedText}`);
|
|
261
|
+
//Verify in monitoring tab searching with the task id
|
|
262
|
+
await this.page.locator('div[data-id="TASK_MONITOR"] .infinite-tree-node > a').click();
|
|
263
|
+
await this.page.locator('span[data-id="DEPLOYMENT_TASKS"]').dblclick();
|
|
264
|
+
await this.page.waitForTimeout(5000);
|
|
265
|
+
await this.page.locator('div.deployment-task-filter-task-id input[placeholder="Search"]').first().fill(this.taskId);
|
|
266
|
+
const stateText = await this.page.locator("td.tasks-table-state").first().innerText();
|
|
267
|
+
console.log(`Task state: ${stateText}`);
|
|
268
|
+
(0, $1UEKj$playwrighttest.expect)(stateText.trim()).toBe("Executed");
|
|
269
|
+
//Click the row to go to deployment screen
|
|
270
|
+
await this.page.locator("table.table.table-striped tbody tr").first().dblclick();
|
|
271
|
+
await this.page.waitForTimeout(5000);
|
|
272
|
+
await this.page.locator("button.finish.xl-primary").click();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
class $fea68740c371df96$export$b8a443164510a1b4 extends (0, $ae23b16684112d0b$export$2b65d1d97338f32b) {
|
|
280
|
+
async clickDeploymentTasks() {
|
|
281
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
282
|
+
hasText: "Deployments"
|
|
283
|
+
}).click();
|
|
284
|
+
}
|
|
285
|
+
async verifyTheRowValues() {
|
|
286
|
+
const firstRow = this.page.locator("tbody tr").first();
|
|
287
|
+
await (0, $1UEKj$playwrighttest.expect)(firstRow.locator(".report-table-package")).toHaveText("Test Application/1.0.0");
|
|
288
|
+
await (0, $1UEKj$playwrighttest.expect)(firstRow.locator(".report-table-originalType")).toHaveText(/Initial/i); // Regex ignores case
|
|
289
|
+
await (0, $1UEKj$playwrighttest.expect)(firstRow.locator(".report-table-user")).toHaveText("admin");
|
|
290
|
+
}
|
|
291
|
+
async verifyTheDeploymentValues(taskID, executedText) {
|
|
292
|
+
/*const searchInput = this.page.locator('div.deployment-task-filter-task-id input[placeholder="Search"]').first();
|
|
293
|
+
await searchInput.waitFor({ state: 'visible' });
|
|
294
|
+
await searchInput.scrollIntoViewIfNeeded();
|
|
295
|
+
await searchInput.click({ force: true });
|
|
296
|
+
await searchInput.fill(taskID);*/ await this.page.locator('div.deployment-task-filter-task-id input[placeholder="Search"]:visible').first().fill(taskID);
|
|
297
|
+
await this.page.waitForTimeout(5000);
|
|
298
|
+
// await this.page.waitForSelector('table.table.table-striped tbody tr', { timeout: 60000 });
|
|
299
|
+
//await this.page.locator('table.table.table-striped tbody tr').first().waitFor();
|
|
300
|
+
//await expect(this.page.locator('table.table.table-striped tbody tr').first().locator('td.report-table-package .deployment-report-package')).toHaveText('Test Application/1.0.0');
|
|
301
|
+
await this.page.waitForSelector("td.report-table-package .deployment-report-package", {
|
|
302
|
+
timeout: 30000
|
|
303
|
+
});
|
|
304
|
+
await (0, $1UEKj$playwrighttest.expect)(this.page.locator("td.report-table-package .deployment-report-package")).toHaveText(/Test Application\/1\.0\.0/i);
|
|
305
|
+
await (0, $1UEKj$playwrighttest.expect)(this.page.locator("td.report-table-originalType .deployment-report-task-type")).toHaveText(/Initial/i); // Regex ignores case
|
|
306
|
+
await (0, $1UEKj$playwrighttest.expect)(this.page.locator("td.report-table-user .deployment-report-user")).toHaveText("admin");
|
|
307
|
+
//Click the row
|
|
308
|
+
await this.page.locator("td.report-table-package .deployment-report-package").dblclick();
|
|
309
|
+
await this.page.locator('div[data-id="0_1_1"] .infinite-tree-node > a').click();
|
|
310
|
+
await this.page.getByTitle("Execute Test Command").click();
|
|
311
|
+
//Get the log text
|
|
312
|
+
const text = await this.page.locator("div.step-log-body pre").nth(1).innerText();
|
|
313
|
+
console.log(`Executed Text in Reports page: ${text}`);
|
|
314
|
+
//Verify both the log text are same
|
|
315
|
+
(0, $1UEKj$playwrighttest.expect)(text).toContain(executedText);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
class $28788a34e6bbbe3d$export$b8a61e5c71402559 {
|
|
321
|
+
constructor(page){
|
|
322
|
+
this.page = page;
|
|
323
|
+
this.homePage = new (0, $f280624787ceceed$export$36d69433c4f81145)(page);
|
|
324
|
+
this.userPage = new (0, $c949c453826379e3$export$ecdc3cf9d1cfe143)(page);
|
|
325
|
+
this.overthereLocalHostPage = new (0, $8506c0ab2b7a06f6$export$c88e1d16f82516d)(page);
|
|
326
|
+
this.environmentsPage = new (0, $64bc587a017c1e89$export$12530425267834a9)(page);
|
|
327
|
+
this.applicationsPage = new (0, $29f18122ec27b03a$export$1533b625ec0c75e2)(page);
|
|
328
|
+
this.reportsPage = new (0, $fea68740c371df96$export$b8a443164510a1b4)(page);
|
|
329
|
+
}
|
|
330
|
+
async navigateToHomePage() {
|
|
331
|
+
await this.page.goto("/home");
|
|
332
|
+
}
|
|
333
|
+
async navigateToUserPage() {
|
|
334
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
335
|
+
hasText: "User management"
|
|
336
|
+
}).click();
|
|
337
|
+
}
|
|
338
|
+
async clickCollapseSideView() {
|
|
339
|
+
const collapseButton = this.page.getByTestId("back-button");
|
|
340
|
+
await collapseButton.click();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
class $365fc3920b0d055f$export$f14c0e3f98d164c0 extends (0, $ae23b16684112d0b$export$2b65d1d97338f32b) {
|
|
348
|
+
/**
|
|
349
|
+
* Login with username and password
|
|
350
|
+
* @param userName
|
|
351
|
+
* @param password
|
|
352
|
+
*/ async login(userName, password) {
|
|
353
|
+
await this.page.goto("/#/login");
|
|
354
|
+
await (0, $1UEKj$playwrighttest.expect)(this.page).toHaveTitle("Digital.ai Deploy");
|
|
355
|
+
await this.page.getByPlaceholder("user").fill(userName, {
|
|
356
|
+
timeout: 1000
|
|
357
|
+
});
|
|
358
|
+
await this.page.getByPlaceholder("Password").fill(password, {
|
|
359
|
+
timeout: 10000
|
|
360
|
+
});
|
|
361
|
+
await this.page.getByRole("button", {
|
|
362
|
+
name: "Log in"
|
|
363
|
+
}).click({
|
|
364
|
+
timeout: 10000
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
async verifyInvalidPasswordMessage() {
|
|
368
|
+
const errorMessage = this.page.getByText("The username and/or password you have entered is incorrect.");
|
|
369
|
+
await (0, $1UEKj$playwrighttest.expect)(errorMessage).toBeVisible();
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Logout as authenticated user
|
|
373
|
+
*/ async logout() {
|
|
374
|
+
await this.page.locator("button.dot-avatar").click();
|
|
375
|
+
await this.page.getByText("Log out", {
|
|
376
|
+
exact: true
|
|
377
|
+
}).click();
|
|
378
|
+
await (0, $1UEKj$playwrighttest.expect)(this.page.getByText("Log in").first()).toBeVisible();
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
const $3352700e95ddc19e$export$e0969da9b8fb378d = (0, $1UEKj$playwrighttest.test).extend({
|
|
384
|
+
fixtures: async ({ page: page }, use)=>{
|
|
385
|
+
const fixtures = new $3352700e95ddc19e$var$Fixtures(page);
|
|
386
|
+
await use(fixtures);
|
|
387
|
+
return fixtures;
|
|
388
|
+
},
|
|
389
|
+
loginPage: async ({ page: page }, use)=>{
|
|
390
|
+
const loginPage = new (0, $365fc3920b0d055f$export$f14c0e3f98d164c0)(page);
|
|
391
|
+
await use(loginPage);
|
|
392
|
+
return loginPage;
|
|
393
|
+
},
|
|
394
|
+
navigation: async ({ page: page }, use)=>{
|
|
395
|
+
const navigationPage = new (0, $28788a34e6bbbe3d$export$b8a61e5c71402559)(page);
|
|
396
|
+
await use(navigationPage);
|
|
397
|
+
return navigationPage;
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
class $3352700e95ddc19e$var$Fixtures {
|
|
401
|
+
constructor(page){
|
|
402
|
+
this.page = page;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["apps/deploy/index.ts","apps/deploy/fixtures/index.ts","apps/deploy/pages/index.ts","apps/deploy/pages/homePage.ts","apps/deploy/pages/withPage.ts","apps/deploy/pages/usersPage.ts","apps/deploy/pages/overthereLocaHostPage.ts","apps/deploy/pages/environmentsPage.ts","apps/deploy/pages/applicationsPage.ts","apps/deploy/pages/reportsPage.ts","apps/deploy/pages/loginPage.ts"],"sourcesContent":["export { test } from './fixtures';\n","import { test as base, Page } from '@playwright/test';\nimport { Navigation } from '../pages';\nimport { LoginPage } from '../pages/loginPage';\n\ntype DeployFixtures = {\n fixtures: Fixtures;\n loginPage: LoginPage;\n navigation: Navigation;\n};\n\nexport const test = base.extend<DeployFixtures>({\n fixtures: async ({ page }, use) => {\n const fixtures = new Fixtures(page);\n await use(fixtures);\n return fixtures;\n },\n loginPage: async ({ page }, use) => {\n const loginPage = new LoginPage(page);\n await use(loginPage);\n return loginPage;\n },\n navigation: async ({ page }, use) => {\n const navigationPage = new Navigation(page);\n await use(navigationPage);\n return navigationPage;\n },\n});\n\nclass Fixtures {\n private readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { Page } from '@playwright/test';\nimport { HomePage } from './homePage';\nimport { UserPage } from './usersPage';\nimport { OverthereLocalHostPage } from './overthereLocaHostPage';\nimport { EnvironmentsPage } from './environmentsPage';\nimport { ApplicationsPage } from './applicationsPage';\nimport { ReportsPage } from './reportsPage';\n\nexport class Navigation {\n private readonly page: Page;\n homePage: HomePage;\n userPage: UserPage;\n overthereLocalHostPage: OverthereLocalHostPage;\n environmentsPage: EnvironmentsPage;\n applicationsPage: ApplicationsPage;\n reportsPage: ReportsPage;\n\n constructor(page: Page) {\n this.page = page;\n this.homePage = new HomePage(page);\n this.userPage = new UserPage(page);\n this.overthereLocalHostPage = new OverthereLocalHostPage(page);\n this.environmentsPage = new EnvironmentsPage(page);\n this.applicationsPage = new ApplicationsPage(page);\n this.reportsPage = new ReportsPage(page);\n }\n\n async navigateToHomePage(): Promise<void> {\n await this.page.goto('/home');\n }\n\n async navigateToUserPage(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n }\n\n async clickCollapseSideView(): Promise<void> {\n const collapseButton = this.page.getByTestId('back-button');\n await collapseButton.click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class HomePage extends WithPage {\n async clickUserManagement(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n await this.page.getByRole('link', { name: 'Users' }).click();\n }\n\n async verifyDeployLogoIsPresent(): Promise<void> {\n const logo = this.page.getByAltText('Deploy');\n await expect(logo).toBeVisible();\n }\n\n async verifyDeployTextIsPresent(): Promise<void> {\n const title = this.page.getByTitle('digital.ai');\n await expect(title).toBeVisible();\n }\n\n async clickReports(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Reports' }).click();\n }\n}\n","import { Page } from '@playwright/test';\n\nexport class WithPage {\n protected readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class UserPage extends WithPage {\n /**\n * Login with username and password\n * @param userName\n * @param password\n */\n // this should be refactored to take an object and not disable the rule!!\n // eslint-disable-next-line max-params\n async createNewUser(\n username: string,\n fullName: string,\n email: string,\n password: string,\n confirmPassword: string,\n ): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.getByRole('button', { name: 'Add user' }).click();\n await this.page.locator('input[name=\"username\"]').fill(username);\n await this.page.locator('input[name=\"fullName\"]').fill(fullName);\n await this.page.locator('input[name=\"email\"]').fill(email);\n const passwordInput = this.page.locator('input[name=\"password\"]');\n await passwordInput.click({ force: true });\n await passwordInput.fill(password);\n await this.page.locator('input[name=\"confirmPassword\"]').fill(confirmPassword);\n await this.page.getByRole('button', { name: 'Save' }).click();\n }\n\n async verifySuccessMessage(): Promise<void> {\n const SuccessMessage = this.page.getByRole('alertdialog');\n await expect(SuccessMessage).toBeVisible();\n await expect(SuccessMessage).toHaveText(/User \".*\" created/i);\n }\n\n async verifyUserErrorMessage(): Promise<void> {\n await expect(this.page.locator('.rrt-middle-container[role=\"alertdialog\"]').nth(1)).toContainText(\n /already in use/i,\n );\n }\n\n async deleteTheUserAndVerifyItIsDeleted(username: string): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.waitForTimeout(10000);\n await this.page.getByPlaceholder('Filter...').fill(username);\n await this.page.waitForTimeout(10000);\n await this.page.locator('td.users-table-actions button.delete.xl-icon.table-action').click();\n await this.page.getByRole('button', { name: 'Delete', exact: true }).click();\n const DeleteMessage = this.page.getByRole('alertdialog');\n await expect(DeleteMessage).toBeVisible();\n await expect(DeleteMessage).toHaveText(/User \".*\" deleted/i);\n }\n\n async editUserAndVerify(username: string, editfullname: string): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.waitForTimeout(10000);\n await this.page.getByPlaceholder('Filter...').fill(username);\n await this.page.waitForTimeout(10000);\n await this.page.locator('i.icon-edit.dot-i').first().click();\n await this.page.locator('input[name=\"fullName\"]').fill(editfullname);\n await this.page.getByRole('button', { name: 'Save', exact: true }).click();\n const EditMessage = this.page.getByRole('alertdialog');\n await expect(EditMessage).toBeVisible();\n const editedUsername = this.page.locator('td.users-table-fullName div').textContent();\n // eslint-disable-next-line no-console\n console.log(editedUsername);\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class OverthereLocalHostPage extends WithPage {\n /* Helps to navigate to the Overthere LocalHost page */\n async navigateToOverthereLocalHostPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Infrastructure\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n const menuButton = this.page.locator('i.context-menu-button[data-id=\"Infrastructure\"]');\n await menuButton.click();\n await this.page.getByTitle('New').click();\n await this.page.getByText('overthere').click();\n await this.page.getByText('LocalHost').click();\n }\n\n /* Helps to create a LocalHost of type UNIX */\n async createLocalHostForUnixType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('UNIX').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n\n /* Helps to create a LocalHost of type WINDOWS */\n async createLocalHostForWindowsType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('WINDOWS').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n\n /* Helps to create a LocalHost of type ZOS */\n async createLocalHostForZosType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('ZOS').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class EnvironmentsPage extends WithPage {\n /* Helps to navigate to the Environments page */\n async navigateToEnvironmentsPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Environments\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n const menuButton = this.page.locator('i.context-menu-button[data-id=\"Environments\"]');\n await menuButton.click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.Environment').click();\n }\n\n /* Helps to create a new Environment */\n async createEnvironment(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('i.xl-icon.arrow-down-icon.show-all').nth(0).click();\n await this.page.getByTitle('Infrastructure/UnixHost').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ApplicationsPage extends WithPage {\n taskId: string = '';\n executedText: string = '';\n\n /* Helps to navigate to the Applications page */\n async navigateToApplicationsPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Applications\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n await this.page.locator('i.context-menu-button[data-id=\"Applications\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.Application').click();\n }\n\n /*Create a New Application and Deployment Package */\n async createNewDeploymentPackage(\n applicationName: string,\n packageName: string,\n cmdAppName: string,\n cmdAppCommand: string,\n ): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(applicationName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a').click();\n const configNode = this.page.locator('span[data-id=\"Applications/Test Application\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500);\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.DeploymentPackage').click();\n await this.page.locator('input[name=\"name\"]').fill(packageName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications/Test Application\"] .infinite-tree-node > a').click();\n await this.page.waitForTimeout(500);\n await this.page.locator('span[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('cmd', { exact: true }).click();\n await this.page.getByTitle('cmd.Command', { exact: true }).click();\n await this.page.locator('input[name=\"name\"]').fill(cmdAppName);\n await this.page.locator('textarea[name=\"commandLine\"]').fill(cmdAppCommand);\n await this.page.waitForTimeout(500);\n await this.page\n .locator('button', { hasText: /^Save$/ })\n .first()\n .click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('i.xl-icon.close-icon').first().click();\n }\n\n /*Deploy the application*/\n async deployApp(): Promise<void> {\n /* await this.page.locator('span[data-id=\"Applications\"]').click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-toggler').click({ force: true }); \n //await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a').click({ force: true }); \n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications/Test Application\"] .infinite-tree-node > a').click(); \n await this.page.locator('span[data-id=\"Applications/Test Application/1.0.0\"]').click(); */\n await this.page.waitForTimeout(3000);\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.locator('a[title=\"Deploy\"]').click();\n await this.page.locator('input[name=\"selections\"][value=\"Environments/Test Environment\"]').click();\n await this.page.getByRole('button', { name: 'Continue' }).click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('button.deploy.xl-primary').click();\n await this.page.waitForTimeout(5000);\n\n //Get the task id\n this.taskId = (await this.page.locator('div.task-id').textContent()) || '';\n console.log(`Deployment Task ID in applications page: ${this.taskId}`);\n\n //Verify no failure and all are done\n const labels = this.page.locator('span.label');\n await expect(labels).toHaveCount(3);\n await expect(labels).toHaveText(['EXECUTED', 'DONE', 'DONE']);\n\n //Get the text executed\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n this.executedText = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n console.log(`Executed Text in applications page: ${this.executedText}`);\n\n //Verify in monitoring tab searching with the task id\n await this.page.locator('div[data-id=\"TASK_MONITOR\"] .infinite-tree-node > a').click();\n await this.page.locator('span[data-id=\"DEPLOYMENT_TASKS\"]').dblclick();\n await this.page.waitForTimeout(5000);\n await this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first().fill(this.taskId);\n const stateText = await this.page.locator('td.tasks-table-state').first().innerText();\n console.log(`Task state: ${stateText}`);\n expect(stateText.trim()).toBe('Executed');\n\n //Click the row to go to deployment screen\n await this.page.locator('table.table.table-striped tbody tr').first().dblclick();\n await this.page.waitForTimeout(5000);\n\n await this.page.locator('button.finish.xl-primary').click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ReportsPage extends WithPage {\n async clickDeploymentTasks(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Deployments' }).click();\n }\n\n async verifyTheRowValues(): Promise<void> {\n const firstRow = this.page.locator('tbody tr').first();\n await expect(firstRow.locator('.report-table-package')).toHaveText('Test Application/1.0.0');\n await expect(firstRow.locator('.report-table-originalType')).toHaveText(/Initial/i); // Regex ignores case\n await expect(firstRow.locator('.report-table-user')).toHaveText('admin');\n }\n\n async verifyTheDeploymentValues(taskID: string, executedText: string): Promise<void> {\n /*const searchInput = this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first();\n await searchInput.waitFor({ state: 'visible' });\n await searchInput.scrollIntoViewIfNeeded();\n await searchInput.click({ force: true });\n await searchInput.fill(taskID);*/\n await this.page\n .locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]:visible')\n .first()\n .fill(taskID!);\n await this.page.waitForTimeout(5000);\n // await this.page.waitForSelector('table.table.table-striped tbody tr', { timeout: 60000 });\n //await this.page.locator('table.table.table-striped tbody tr').first().waitFor();\n //await expect(this.page.locator('table.table.table-striped tbody tr').first().locator('td.report-table-package .deployment-report-package')).toHaveText('Test Application/1.0.0');\n await this.page.waitForSelector('td.report-table-package .deployment-report-package', { timeout: 30000 });\n await expect(this.page.locator('td.report-table-package .deployment-report-package')).toHaveText(\n /Test Application\\/1\\.0\\.0/i,\n );\n await expect(this.page.locator('td.report-table-originalType .deployment-report-task-type')).toHaveText(/Initial/i); // Regex ignores case\n await expect(this.page.locator('td.report-table-user .deployment-report-user')).toHaveText('admin');\n\n //Click the row\n await this.page.locator('td.report-table-package .deployment-report-package').dblclick();\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n\n //Get the log text\n const text = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n console.log(`Executed Text in Reports page: ${text}`);\n\n //Verify both the log text are same\n expect(text).toContain(executedText);\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class LoginPage extends WithPage {\n /**\n * Login with username and password\n * @param userName\n * @param password\n */\n async login(userName: string, password: string): Promise<void> {\n await this.page.goto('/#/login');\n await expect(this.page).toHaveTitle('Digital.ai Deploy');\n await this.page.getByPlaceholder('user').fill(userName, { timeout: 1000 });\n await this.page.getByPlaceholder('Password').fill(password, { timeout: 10000 });\n await this.page.getByRole('button', { name: 'Log in' }).click({ timeout: 10000 });\n }\n\n async verifyInvalidPasswordMessage(): Promise<void> {\n const errorMessage = this.page.getByText('The username and/or password you have entered is incorrect.');\n await expect(errorMessage).toBeVisible();\n }\n\n /**\n * Logout as authenticated user\n */\n async logout(): Promise<void> {\n await this.page.locator('button.dot-avatar').click();\n await this.page.getByText('Log out', { exact: true }).click();\n await expect(this.page.getByText('Log in').first()).toBeVisible();\n }\n}\n"],"names":[],"version":3,"file":"main.js.map"}
|
package/dist/module.js
ADDED
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
import {test as $lE6ZQ$test, expect as $lE6ZQ$expect} from "@playwright/test";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class $7d546dcaafadc158$export$2b65d1d97338f32b {
|
|
6
|
+
constructor(page){
|
|
7
|
+
this.page = page;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class $e18c8d3707c8c74c$export$36d69433c4f81145 extends (0, $7d546dcaafadc158$export$2b65d1d97338f32b) {
|
|
13
|
+
async clickUserManagement() {
|
|
14
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
15
|
+
hasText: "User management"
|
|
16
|
+
}).click();
|
|
17
|
+
await this.page.getByRole("link", {
|
|
18
|
+
name: "Users"
|
|
19
|
+
}).click();
|
|
20
|
+
}
|
|
21
|
+
async verifyDeployLogoIsPresent() {
|
|
22
|
+
const logo = this.page.getByAltText("Deploy");
|
|
23
|
+
await (0, $lE6ZQ$expect)(logo).toBeVisible();
|
|
24
|
+
}
|
|
25
|
+
async verifyDeployTextIsPresent() {
|
|
26
|
+
const title = this.page.getByTitle("digital.ai");
|
|
27
|
+
await (0, $lE6ZQ$expect)(title).toBeVisible();
|
|
28
|
+
}
|
|
29
|
+
async clickReports() {
|
|
30
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
31
|
+
hasText: "Reports"
|
|
32
|
+
}).click();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class $ca2721b1aeb903c5$export$ecdc3cf9d1cfe143 extends (0, $7d546dcaafadc158$export$2b65d1d97338f32b) {
|
|
40
|
+
/**
|
|
41
|
+
* Login with username and password
|
|
42
|
+
* @param userName
|
|
43
|
+
* @param password
|
|
44
|
+
*/ // this should be refactored to take an object and not disable the rule!!
|
|
45
|
+
// eslint-disable-next-line max-params
|
|
46
|
+
async createNewUser(username, fullName, email, password, confirmPassword) {
|
|
47
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
48
|
+
hasText: "Users"
|
|
49
|
+
}).click();
|
|
50
|
+
await this.page.getByRole("button", {
|
|
51
|
+
name: "Add user"
|
|
52
|
+
}).click();
|
|
53
|
+
await this.page.locator('input[name="username"]').fill(username);
|
|
54
|
+
await this.page.locator('input[name="fullName"]').fill(fullName);
|
|
55
|
+
await this.page.locator('input[name="email"]').fill(email);
|
|
56
|
+
const passwordInput = this.page.locator('input[name="password"]');
|
|
57
|
+
await passwordInput.click({
|
|
58
|
+
force: true
|
|
59
|
+
});
|
|
60
|
+
await passwordInput.fill(password);
|
|
61
|
+
await this.page.locator('input[name="confirmPassword"]').fill(confirmPassword);
|
|
62
|
+
await this.page.getByRole("button", {
|
|
63
|
+
name: "Save"
|
|
64
|
+
}).click();
|
|
65
|
+
}
|
|
66
|
+
async verifySuccessMessage() {
|
|
67
|
+
const SuccessMessage = this.page.getByRole("alertdialog");
|
|
68
|
+
await (0, $lE6ZQ$expect)(SuccessMessage).toBeVisible();
|
|
69
|
+
await (0, $lE6ZQ$expect)(SuccessMessage).toHaveText(/User ".*" created/i);
|
|
70
|
+
}
|
|
71
|
+
async verifyUserErrorMessage() {
|
|
72
|
+
await (0, $lE6ZQ$expect)(this.page.locator('.rrt-middle-container[role="alertdialog"]').nth(1)).toContainText(/already in use/i);
|
|
73
|
+
}
|
|
74
|
+
async deleteTheUserAndVerifyItIsDeleted(username) {
|
|
75
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
76
|
+
hasText: "Users"
|
|
77
|
+
}).click();
|
|
78
|
+
await this.page.waitForTimeout(10000);
|
|
79
|
+
await this.page.getByPlaceholder("Filter...").fill(username);
|
|
80
|
+
await this.page.waitForTimeout(10000);
|
|
81
|
+
await this.page.locator("td.users-table-actions button.delete.xl-icon.table-action").click();
|
|
82
|
+
await this.page.getByRole("button", {
|
|
83
|
+
name: "Delete",
|
|
84
|
+
exact: true
|
|
85
|
+
}).click();
|
|
86
|
+
const DeleteMessage = this.page.getByRole("alertdialog");
|
|
87
|
+
await (0, $lE6ZQ$expect)(DeleteMessage).toBeVisible();
|
|
88
|
+
await (0, $lE6ZQ$expect)(DeleteMessage).toHaveText(/User ".*" deleted/i);
|
|
89
|
+
}
|
|
90
|
+
async editUserAndVerify(username, editfullname) {
|
|
91
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
92
|
+
hasText: "Users"
|
|
93
|
+
}).click();
|
|
94
|
+
await this.page.waitForTimeout(10000);
|
|
95
|
+
await this.page.getByPlaceholder("Filter...").fill(username);
|
|
96
|
+
await this.page.waitForTimeout(10000);
|
|
97
|
+
await this.page.locator("i.icon-edit.dot-i").first().click();
|
|
98
|
+
await this.page.locator('input[name="fullName"]').fill(editfullname);
|
|
99
|
+
await this.page.getByRole("button", {
|
|
100
|
+
name: "Save",
|
|
101
|
+
exact: true
|
|
102
|
+
}).click();
|
|
103
|
+
const EditMessage = this.page.getByRole("alertdialog");
|
|
104
|
+
await (0, $lE6ZQ$expect)(EditMessage).toBeVisible();
|
|
105
|
+
const editedUsername = this.page.locator("td.users-table-fullName div").textContent();
|
|
106
|
+
// eslint-disable-next-line no-console
|
|
107
|
+
console.log(editedUsername);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class $a5210fff9cad7e1b$export$c88e1d16f82516d extends (0, $7d546dcaafadc158$export$2b65d1d97338f32b) {
|
|
114
|
+
/* Helps to navigate to the Overthere LocalHost page */ async navigateToOverthereLocalHostPage() {
|
|
115
|
+
const configNode = this.page.locator('span[data-id="Infrastructure"]');
|
|
116
|
+
await configNode.hover();
|
|
117
|
+
await this.page.waitForTimeout(500); // small delay for hover animation
|
|
118
|
+
const menuButton = this.page.locator('i.context-menu-button[data-id="Infrastructure"]');
|
|
119
|
+
await menuButton.click();
|
|
120
|
+
await this.page.getByTitle("New").click();
|
|
121
|
+
await this.page.getByText("overthere").click();
|
|
122
|
+
await this.page.getByText("LocalHost").click();
|
|
123
|
+
}
|
|
124
|
+
/* Helps to create a LocalHost of type UNIX */ async createLocalHostForUnixType(name) {
|
|
125
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
126
|
+
await this.page.locator('input[type="text"]').nth(7).click();
|
|
127
|
+
await this.page.getByTitle("UNIX").click();
|
|
128
|
+
await this.page.getByRole("button", {
|
|
129
|
+
name: "Save and close"
|
|
130
|
+
}).click();
|
|
131
|
+
}
|
|
132
|
+
/* Helps to create a LocalHost of type WINDOWS */ async createLocalHostForWindowsType(name) {
|
|
133
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
134
|
+
await this.page.locator('input[type="text"]').nth(7).click();
|
|
135
|
+
await this.page.getByTitle("WINDOWS").click();
|
|
136
|
+
await this.page.getByRole("button", {
|
|
137
|
+
name: "Save and close"
|
|
138
|
+
}).click();
|
|
139
|
+
}
|
|
140
|
+
/* Helps to create a LocalHost of type ZOS */ async createLocalHostForZosType(name) {
|
|
141
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
142
|
+
await this.page.locator('input[type="text"]').nth(7).click();
|
|
143
|
+
await this.page.getByTitle("ZOS").click();
|
|
144
|
+
await this.page.getByRole("button", {
|
|
145
|
+
name: "Save and close"
|
|
146
|
+
}).click();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class $8f7dd2349a88e8b2$export$12530425267834a9 extends (0, $7d546dcaafadc158$export$2b65d1d97338f32b) {
|
|
153
|
+
/* Helps to navigate to the Environments page */ async navigateToEnvironmentsPage() {
|
|
154
|
+
const configNode = this.page.locator('span[data-id="Environments"]');
|
|
155
|
+
await configNode.hover();
|
|
156
|
+
await this.page.waitForTimeout(500); // small delay for hover animation
|
|
157
|
+
const menuButton = this.page.locator('i.context-menu-button[data-id="Environments"]');
|
|
158
|
+
await menuButton.click();
|
|
159
|
+
await this.page.getByTitle("New").click();
|
|
160
|
+
await this.page.getByTitle("udm.Environment").click();
|
|
161
|
+
}
|
|
162
|
+
/* Helps to create a new Environment */ async createEnvironment(name) {
|
|
163
|
+
await this.page.locator('input[name="name"]').fill(name);
|
|
164
|
+
await this.page.locator("i.xl-icon.arrow-down-icon.show-all").nth(0).click();
|
|
165
|
+
await this.page.getByTitle("Infrastructure/UnixHost").click();
|
|
166
|
+
await this.page.getByRole("button", {
|
|
167
|
+
name: "Save and close"
|
|
168
|
+
}).click();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class $821992227d07c10c$export$1533b625ec0c75e2 extends (0, $7d546dcaafadc158$export$2b65d1d97338f32b) {
|
|
176
|
+
taskId = "";
|
|
177
|
+
executedText = "";
|
|
178
|
+
/* Helps to navigate to the Applications page */ async navigateToApplicationsPage() {
|
|
179
|
+
const configNode = this.page.locator('span[data-id="Applications"]');
|
|
180
|
+
await configNode.hover();
|
|
181
|
+
await this.page.waitForTimeout(500); // small delay for hover animation
|
|
182
|
+
await this.page.locator('i.context-menu-button[data-id="Applications"]').click();
|
|
183
|
+
await this.page.getByTitle("New").click();
|
|
184
|
+
await this.page.getByTitle("udm.Application").click();
|
|
185
|
+
}
|
|
186
|
+
/*Create a New Application and Deployment Package */ async createNewDeploymentPackage(applicationName, packageName, cmdAppName, cmdAppCommand) {
|
|
187
|
+
await this.page.locator('input[name="name"]').fill(applicationName);
|
|
188
|
+
await this.page.getByRole("button", {
|
|
189
|
+
name: "Save and close"
|
|
190
|
+
}).click();
|
|
191
|
+
await this.page.locator('div[data-id="Applications"] .infinite-tree-node > a').click();
|
|
192
|
+
const configNode = this.page.locator('span[data-id="Applications/Test Application"]');
|
|
193
|
+
await configNode.hover();
|
|
194
|
+
await this.page.waitForTimeout(500);
|
|
195
|
+
await this.page.locator('i.context-menu-button[data-id="Applications/Test Application"]').click();
|
|
196
|
+
await this.page.getByTitle("New").click();
|
|
197
|
+
await this.page.getByTitle("udm.DeploymentPackage").click();
|
|
198
|
+
await this.page.locator('input[name="name"]').fill(packageName);
|
|
199
|
+
await this.page.getByRole("button", {
|
|
200
|
+
name: "Save and close"
|
|
201
|
+
}).click();
|
|
202
|
+
await this.page.waitForTimeout(1000);
|
|
203
|
+
await this.page.locator('div[data-id="Applications/Test Application"] .infinite-tree-node > a').click();
|
|
204
|
+
await this.page.waitForTimeout(500);
|
|
205
|
+
await this.page.locator('span[data-id="Applications/Test Application/1.0.0"]').click();
|
|
206
|
+
await this.page.locator('i.context-menu-button[data-id="Applications/Test Application/1.0.0"]').click();
|
|
207
|
+
await this.page.getByTitle("New").click();
|
|
208
|
+
await this.page.getByTitle("cmd", {
|
|
209
|
+
exact: true
|
|
210
|
+
}).click();
|
|
211
|
+
await this.page.getByTitle("cmd.Command", {
|
|
212
|
+
exact: true
|
|
213
|
+
}).click();
|
|
214
|
+
await this.page.locator('input[name="name"]').fill(cmdAppName);
|
|
215
|
+
await this.page.locator('textarea[name="commandLine"]').fill(cmdAppCommand);
|
|
216
|
+
await this.page.waitForTimeout(500);
|
|
217
|
+
await this.page.locator("button", {
|
|
218
|
+
hasText: /^Save$/
|
|
219
|
+
}).first().click();
|
|
220
|
+
await this.page.waitForTimeout(1000);
|
|
221
|
+
await this.page.locator("i.xl-icon.close-icon").first().click();
|
|
222
|
+
}
|
|
223
|
+
/*Deploy the application*/ async deployApp() {
|
|
224
|
+
/* await this.page.locator('span[data-id="Applications"]').click();
|
|
225
|
+
await this.page.waitForTimeout(1000);
|
|
226
|
+
await this.page.locator('div[data-id="Applications"] .infinite-tree-toggler').click({ force: true });
|
|
227
|
+
//await this.page.locator('div[data-id="Applications"] .infinite-tree-node > a').click({ force: true });
|
|
228
|
+
await this.page.waitForTimeout(1000);
|
|
229
|
+
await this.page.locator('div[data-id="Applications/Test Application"] .infinite-tree-node > a').click();
|
|
230
|
+
await this.page.locator('span[data-id="Applications/Test Application/1.0.0"]').click(); */ await this.page.waitForTimeout(3000);
|
|
231
|
+
await this.page.locator('i.context-menu-button[data-id="Applications/Test Application/1.0.0"]').click();
|
|
232
|
+
await this.page.locator('a[title="Deploy"]').click();
|
|
233
|
+
await this.page.locator('input[name="selections"][value="Environments/Test Environment"]').click();
|
|
234
|
+
await this.page.getByRole("button", {
|
|
235
|
+
name: "Continue"
|
|
236
|
+
}).click();
|
|
237
|
+
await this.page.waitForTimeout(1000);
|
|
238
|
+
await this.page.locator("button.deploy.xl-primary").click();
|
|
239
|
+
await this.page.waitForTimeout(5000);
|
|
240
|
+
//Get the task id
|
|
241
|
+
this.taskId = await this.page.locator("div.task-id").textContent() || "";
|
|
242
|
+
console.log(`Deployment Task ID in applications page: ${this.taskId}`);
|
|
243
|
+
//Verify no failure and all are done
|
|
244
|
+
const labels = this.page.locator("span.label");
|
|
245
|
+
await (0, $lE6ZQ$expect)(labels).toHaveCount(3);
|
|
246
|
+
await (0, $lE6ZQ$expect)(labels).toHaveText([
|
|
247
|
+
"EXECUTED",
|
|
248
|
+
"DONE",
|
|
249
|
+
"DONE"
|
|
250
|
+
]);
|
|
251
|
+
//Get the text executed
|
|
252
|
+
await this.page.locator('div[data-id="0_1_1"] .infinite-tree-node > a').click();
|
|
253
|
+
await this.page.getByTitle("Execute Test Command").click();
|
|
254
|
+
this.executedText = await this.page.locator("div.step-log-body pre").nth(1).innerText();
|
|
255
|
+
console.log(`Executed Text in applications page: ${this.executedText}`);
|
|
256
|
+
//Verify in monitoring tab searching with the task id
|
|
257
|
+
await this.page.locator('div[data-id="TASK_MONITOR"] .infinite-tree-node > a').click();
|
|
258
|
+
await this.page.locator('span[data-id="DEPLOYMENT_TASKS"]').dblclick();
|
|
259
|
+
await this.page.waitForTimeout(5000);
|
|
260
|
+
await this.page.locator('div.deployment-task-filter-task-id input[placeholder="Search"]').first().fill(this.taskId);
|
|
261
|
+
const stateText = await this.page.locator("td.tasks-table-state").first().innerText();
|
|
262
|
+
console.log(`Task state: ${stateText}`);
|
|
263
|
+
(0, $lE6ZQ$expect)(stateText.trim()).toBe("Executed");
|
|
264
|
+
//Click the row to go to deployment screen
|
|
265
|
+
await this.page.locator("table.table.table-striped tbody tr").first().dblclick();
|
|
266
|
+
await this.page.waitForTimeout(5000);
|
|
267
|
+
await this.page.locator("button.finish.xl-primary").click();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
class $76bad9b9e6741f37$export$b8a443164510a1b4 extends (0, $7d546dcaafadc158$export$2b65d1d97338f32b) {
|
|
275
|
+
async clickDeploymentTasks() {
|
|
276
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
277
|
+
hasText: "Deployments"
|
|
278
|
+
}).click();
|
|
279
|
+
}
|
|
280
|
+
async verifyTheRowValues() {
|
|
281
|
+
const firstRow = this.page.locator("tbody tr").first();
|
|
282
|
+
await (0, $lE6ZQ$expect)(firstRow.locator(".report-table-package")).toHaveText("Test Application/1.0.0");
|
|
283
|
+
await (0, $lE6ZQ$expect)(firstRow.locator(".report-table-originalType")).toHaveText(/Initial/i); // Regex ignores case
|
|
284
|
+
await (0, $lE6ZQ$expect)(firstRow.locator(".report-table-user")).toHaveText("admin");
|
|
285
|
+
}
|
|
286
|
+
async verifyTheDeploymentValues(taskID, executedText) {
|
|
287
|
+
/*const searchInput = this.page.locator('div.deployment-task-filter-task-id input[placeholder="Search"]').first();
|
|
288
|
+
await searchInput.waitFor({ state: 'visible' });
|
|
289
|
+
await searchInput.scrollIntoViewIfNeeded();
|
|
290
|
+
await searchInput.click({ force: true });
|
|
291
|
+
await searchInput.fill(taskID);*/ await this.page.locator('div.deployment-task-filter-task-id input[placeholder="Search"]:visible').first().fill(taskID);
|
|
292
|
+
await this.page.waitForTimeout(5000);
|
|
293
|
+
// await this.page.waitForSelector('table.table.table-striped tbody tr', { timeout: 60000 });
|
|
294
|
+
//await this.page.locator('table.table.table-striped tbody tr').first().waitFor();
|
|
295
|
+
//await expect(this.page.locator('table.table.table-striped tbody tr').first().locator('td.report-table-package .deployment-report-package')).toHaveText('Test Application/1.0.0');
|
|
296
|
+
await this.page.waitForSelector("td.report-table-package .deployment-report-package", {
|
|
297
|
+
timeout: 30000
|
|
298
|
+
});
|
|
299
|
+
await (0, $lE6ZQ$expect)(this.page.locator("td.report-table-package .deployment-report-package")).toHaveText(/Test Application\/1\.0\.0/i);
|
|
300
|
+
await (0, $lE6ZQ$expect)(this.page.locator("td.report-table-originalType .deployment-report-task-type")).toHaveText(/Initial/i); // Regex ignores case
|
|
301
|
+
await (0, $lE6ZQ$expect)(this.page.locator("td.report-table-user .deployment-report-user")).toHaveText("admin");
|
|
302
|
+
//Click the row
|
|
303
|
+
await this.page.locator("td.report-table-package .deployment-report-package").dblclick();
|
|
304
|
+
await this.page.locator('div[data-id="0_1_1"] .infinite-tree-node > a').click();
|
|
305
|
+
await this.page.getByTitle("Execute Test Command").click();
|
|
306
|
+
//Get the log text
|
|
307
|
+
const text = await this.page.locator("div.step-log-body pre").nth(1).innerText();
|
|
308
|
+
console.log(`Executed Text in Reports page: ${text}`);
|
|
309
|
+
//Verify both the log text are same
|
|
310
|
+
(0, $lE6ZQ$expect)(text).toContain(executedText);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
class $95d5ebc9765b570f$export$b8a61e5c71402559 {
|
|
316
|
+
constructor(page){
|
|
317
|
+
this.page = page;
|
|
318
|
+
this.homePage = new (0, $e18c8d3707c8c74c$export$36d69433c4f81145)(page);
|
|
319
|
+
this.userPage = new (0, $ca2721b1aeb903c5$export$ecdc3cf9d1cfe143)(page);
|
|
320
|
+
this.overthereLocalHostPage = new (0, $a5210fff9cad7e1b$export$c88e1d16f82516d)(page);
|
|
321
|
+
this.environmentsPage = new (0, $8f7dd2349a88e8b2$export$12530425267834a9)(page);
|
|
322
|
+
this.applicationsPage = new (0, $821992227d07c10c$export$1533b625ec0c75e2)(page);
|
|
323
|
+
this.reportsPage = new (0, $76bad9b9e6741f37$export$b8a443164510a1b4)(page);
|
|
324
|
+
}
|
|
325
|
+
async navigateToHomePage() {
|
|
326
|
+
await this.page.goto("/home");
|
|
327
|
+
}
|
|
328
|
+
async navigateToUserPage() {
|
|
329
|
+
await this.page.locator("p.MuiTypography-root", {
|
|
330
|
+
hasText: "User management"
|
|
331
|
+
}).click();
|
|
332
|
+
}
|
|
333
|
+
async clickCollapseSideView() {
|
|
334
|
+
const collapseButton = this.page.getByTestId("back-button");
|
|
335
|
+
await collapseButton.click();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
class $c5e912d43cd579b2$export$f14c0e3f98d164c0 extends (0, $7d546dcaafadc158$export$2b65d1d97338f32b) {
|
|
343
|
+
/**
|
|
344
|
+
* Login with username and password
|
|
345
|
+
* @param userName
|
|
346
|
+
* @param password
|
|
347
|
+
*/ async login(userName, password) {
|
|
348
|
+
await this.page.goto("/#/login");
|
|
349
|
+
await (0, $lE6ZQ$expect)(this.page).toHaveTitle("Digital.ai Deploy");
|
|
350
|
+
await this.page.getByPlaceholder("user").fill(userName, {
|
|
351
|
+
timeout: 1000
|
|
352
|
+
});
|
|
353
|
+
await this.page.getByPlaceholder("Password").fill(password, {
|
|
354
|
+
timeout: 10000
|
|
355
|
+
});
|
|
356
|
+
await this.page.getByRole("button", {
|
|
357
|
+
name: "Log in"
|
|
358
|
+
}).click({
|
|
359
|
+
timeout: 10000
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
async verifyInvalidPasswordMessage() {
|
|
363
|
+
const errorMessage = this.page.getByText("The username and/or password you have entered is incorrect.");
|
|
364
|
+
await (0, $lE6ZQ$expect)(errorMessage).toBeVisible();
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Logout as authenticated user
|
|
368
|
+
*/ async logout() {
|
|
369
|
+
await this.page.locator("button.dot-avatar").click();
|
|
370
|
+
await this.page.getByText("Log out", {
|
|
371
|
+
exact: true
|
|
372
|
+
}).click();
|
|
373
|
+
await (0, $lE6ZQ$expect)(this.page.getByText("Log in").first()).toBeVisible();
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
const $114b0b206b8d644f$export$e0969da9b8fb378d = (0, $lE6ZQ$test).extend({
|
|
379
|
+
fixtures: async ({ page: page }, use)=>{
|
|
380
|
+
const fixtures = new $114b0b206b8d644f$var$Fixtures(page);
|
|
381
|
+
await use(fixtures);
|
|
382
|
+
return fixtures;
|
|
383
|
+
},
|
|
384
|
+
loginPage: async ({ page: page }, use)=>{
|
|
385
|
+
const loginPage = new (0, $c5e912d43cd579b2$export$f14c0e3f98d164c0)(page);
|
|
386
|
+
await use(loginPage);
|
|
387
|
+
return loginPage;
|
|
388
|
+
},
|
|
389
|
+
navigation: async ({ page: page }, use)=>{
|
|
390
|
+
const navigationPage = new (0, $95d5ebc9765b570f$export$b8a61e5c71402559)(page);
|
|
391
|
+
await use(navigationPage);
|
|
392
|
+
return navigationPage;
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
class $114b0b206b8d644f$var$Fixtures {
|
|
396
|
+
constructor(page){
|
|
397
|
+
this.page = page;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
export {$114b0b206b8d644f$export$e0969da9b8fb378d as test};
|
|
405
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["apps/deploy/index.ts","apps/deploy/fixtures/index.ts","apps/deploy/pages/index.ts","apps/deploy/pages/homePage.ts","apps/deploy/pages/withPage.ts","apps/deploy/pages/usersPage.ts","apps/deploy/pages/overthereLocaHostPage.ts","apps/deploy/pages/environmentsPage.ts","apps/deploy/pages/applicationsPage.ts","apps/deploy/pages/reportsPage.ts","apps/deploy/pages/loginPage.ts"],"sourcesContent":["export { test } from './fixtures';\n","import { test as base, Page } from '@playwright/test';\nimport { Navigation } from '../pages';\nimport { LoginPage } from '../pages/loginPage';\n\ntype DeployFixtures = {\n fixtures: Fixtures;\n loginPage: LoginPage;\n navigation: Navigation;\n};\n\nexport const test = base.extend<DeployFixtures>({\n fixtures: async ({ page }, use) => {\n const fixtures = new Fixtures(page);\n await use(fixtures);\n return fixtures;\n },\n loginPage: async ({ page }, use) => {\n const loginPage = new LoginPage(page);\n await use(loginPage);\n return loginPage;\n },\n navigation: async ({ page }, use) => {\n const navigationPage = new Navigation(page);\n await use(navigationPage);\n return navigationPage;\n },\n});\n\nclass Fixtures {\n private readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { Page } from '@playwright/test';\nimport { HomePage } from './homePage';\nimport { UserPage } from './usersPage';\nimport { OverthereLocalHostPage } from './overthereLocaHostPage';\nimport { EnvironmentsPage } from './environmentsPage';\nimport { ApplicationsPage } from './applicationsPage';\nimport { ReportsPage } from './reportsPage';\n\nexport class Navigation {\n private readonly page: Page;\n homePage: HomePage;\n userPage: UserPage;\n overthereLocalHostPage: OverthereLocalHostPage;\n environmentsPage: EnvironmentsPage;\n applicationsPage: ApplicationsPage;\n reportsPage: ReportsPage;\n\n constructor(page: Page) {\n this.page = page;\n this.homePage = new HomePage(page);\n this.userPage = new UserPage(page);\n this.overthereLocalHostPage = new OverthereLocalHostPage(page);\n this.environmentsPage = new EnvironmentsPage(page);\n this.applicationsPage = new ApplicationsPage(page);\n this.reportsPage = new ReportsPage(page);\n }\n\n async navigateToHomePage(): Promise<void> {\n await this.page.goto('/home');\n }\n\n async navigateToUserPage(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n }\n\n async clickCollapseSideView(): Promise<void> {\n const collapseButton = this.page.getByTestId('back-button');\n await collapseButton.click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class HomePage extends WithPage {\n async clickUserManagement(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n await this.page.getByRole('link', { name: 'Users' }).click();\n }\n\n async verifyDeployLogoIsPresent(): Promise<void> {\n const logo = this.page.getByAltText('Deploy');\n await expect(logo).toBeVisible();\n }\n\n async verifyDeployTextIsPresent(): Promise<void> {\n const title = this.page.getByTitle('digital.ai');\n await expect(title).toBeVisible();\n }\n\n async clickReports(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Reports' }).click();\n }\n}\n","import { Page } from '@playwright/test';\n\nexport class WithPage {\n protected readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class UserPage extends WithPage {\n /**\n * Login with username and password\n * @param userName\n * @param password\n */\n // this should be refactored to take an object and not disable the rule!!\n // eslint-disable-next-line max-params\n async createNewUser(\n username: string,\n fullName: string,\n email: string,\n password: string,\n confirmPassword: string,\n ): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.getByRole('button', { name: 'Add user' }).click();\n await this.page.locator('input[name=\"username\"]').fill(username);\n await this.page.locator('input[name=\"fullName\"]').fill(fullName);\n await this.page.locator('input[name=\"email\"]').fill(email);\n const passwordInput = this.page.locator('input[name=\"password\"]');\n await passwordInput.click({ force: true });\n await passwordInput.fill(password);\n await this.page.locator('input[name=\"confirmPassword\"]').fill(confirmPassword);\n await this.page.getByRole('button', { name: 'Save' }).click();\n }\n\n async verifySuccessMessage(): Promise<void> {\n const SuccessMessage = this.page.getByRole('alertdialog');\n await expect(SuccessMessage).toBeVisible();\n await expect(SuccessMessage).toHaveText(/User \".*\" created/i);\n }\n\n async verifyUserErrorMessage(): Promise<void> {\n await expect(this.page.locator('.rrt-middle-container[role=\"alertdialog\"]').nth(1)).toContainText(\n /already in use/i,\n );\n }\n\n async deleteTheUserAndVerifyItIsDeleted(username: string): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.waitForTimeout(10000);\n await this.page.getByPlaceholder('Filter...').fill(username);\n await this.page.waitForTimeout(10000);\n await this.page.locator('td.users-table-actions button.delete.xl-icon.table-action').click();\n await this.page.getByRole('button', { name: 'Delete', exact: true }).click();\n const DeleteMessage = this.page.getByRole('alertdialog');\n await expect(DeleteMessage).toBeVisible();\n await expect(DeleteMessage).toHaveText(/User \".*\" deleted/i);\n }\n\n async editUserAndVerify(username: string, editfullname: string): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.waitForTimeout(10000);\n await this.page.getByPlaceholder('Filter...').fill(username);\n await this.page.waitForTimeout(10000);\n await this.page.locator('i.icon-edit.dot-i').first().click();\n await this.page.locator('input[name=\"fullName\"]').fill(editfullname);\n await this.page.getByRole('button', { name: 'Save', exact: true }).click();\n const EditMessage = this.page.getByRole('alertdialog');\n await expect(EditMessage).toBeVisible();\n const editedUsername = this.page.locator('td.users-table-fullName div').textContent();\n // eslint-disable-next-line no-console\n console.log(editedUsername);\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class OverthereLocalHostPage extends WithPage {\n /* Helps to navigate to the Overthere LocalHost page */\n async navigateToOverthereLocalHostPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Infrastructure\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n const menuButton = this.page.locator('i.context-menu-button[data-id=\"Infrastructure\"]');\n await menuButton.click();\n await this.page.getByTitle('New').click();\n await this.page.getByText('overthere').click();\n await this.page.getByText('LocalHost').click();\n }\n\n /* Helps to create a LocalHost of type UNIX */\n async createLocalHostForUnixType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('UNIX').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n\n /* Helps to create a LocalHost of type WINDOWS */\n async createLocalHostForWindowsType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('WINDOWS').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n\n /* Helps to create a LocalHost of type ZOS */\n async createLocalHostForZosType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('ZOS').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class EnvironmentsPage extends WithPage {\n /* Helps to navigate to the Environments page */\n async navigateToEnvironmentsPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Environments\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n const menuButton = this.page.locator('i.context-menu-button[data-id=\"Environments\"]');\n await menuButton.click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.Environment').click();\n }\n\n /* Helps to create a new Environment */\n async createEnvironment(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('i.xl-icon.arrow-down-icon.show-all').nth(0).click();\n await this.page.getByTitle('Infrastructure/UnixHost').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ApplicationsPage extends WithPage {\n taskId: string = '';\n executedText: string = '';\n\n /* Helps to navigate to the Applications page */\n async navigateToApplicationsPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Applications\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n await this.page.locator('i.context-menu-button[data-id=\"Applications\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.Application').click();\n }\n\n /*Create a New Application and Deployment Package */\n async createNewDeploymentPackage(\n applicationName: string,\n packageName: string,\n cmdAppName: string,\n cmdAppCommand: string,\n ): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(applicationName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a').click();\n const configNode = this.page.locator('span[data-id=\"Applications/Test Application\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500);\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.DeploymentPackage').click();\n await this.page.locator('input[name=\"name\"]').fill(packageName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications/Test Application\"] .infinite-tree-node > a').click();\n await this.page.waitForTimeout(500);\n await this.page.locator('span[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('cmd', { exact: true }).click();\n await this.page.getByTitle('cmd.Command', { exact: true }).click();\n await this.page.locator('input[name=\"name\"]').fill(cmdAppName);\n await this.page.locator('textarea[name=\"commandLine\"]').fill(cmdAppCommand);\n await this.page.waitForTimeout(500);\n await this.page\n .locator('button', { hasText: /^Save$/ })\n .first()\n .click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('i.xl-icon.close-icon').first().click();\n }\n\n /*Deploy the application*/\n async deployApp(): Promise<void> {\n /* await this.page.locator('span[data-id=\"Applications\"]').click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-toggler').click({ force: true }); \n //await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a').click({ force: true }); \n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications/Test Application\"] .infinite-tree-node > a').click(); \n await this.page.locator('span[data-id=\"Applications/Test Application/1.0.0\"]').click(); */\n await this.page.waitForTimeout(3000);\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.locator('a[title=\"Deploy\"]').click();\n await this.page.locator('input[name=\"selections\"][value=\"Environments/Test Environment\"]').click();\n await this.page.getByRole('button', { name: 'Continue' }).click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('button.deploy.xl-primary').click();\n await this.page.waitForTimeout(5000);\n\n //Get the task id\n this.taskId = (await this.page.locator('div.task-id').textContent()) || '';\n console.log(`Deployment Task ID in applications page: ${this.taskId}`);\n\n //Verify no failure and all are done\n const labels = this.page.locator('span.label');\n await expect(labels).toHaveCount(3);\n await expect(labels).toHaveText(['EXECUTED', 'DONE', 'DONE']);\n\n //Get the text executed\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n this.executedText = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n console.log(`Executed Text in applications page: ${this.executedText}`);\n\n //Verify in monitoring tab searching with the task id\n await this.page.locator('div[data-id=\"TASK_MONITOR\"] .infinite-tree-node > a').click();\n await this.page.locator('span[data-id=\"DEPLOYMENT_TASKS\"]').dblclick();\n await this.page.waitForTimeout(5000);\n await this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first().fill(this.taskId);\n const stateText = await this.page.locator('td.tasks-table-state').first().innerText();\n console.log(`Task state: ${stateText}`);\n expect(stateText.trim()).toBe('Executed');\n\n //Click the row to go to deployment screen\n await this.page.locator('table.table.table-striped tbody tr').first().dblclick();\n await this.page.waitForTimeout(5000);\n\n await this.page.locator('button.finish.xl-primary').click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ReportsPage extends WithPage {\n async clickDeploymentTasks(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Deployments' }).click();\n }\n\n async verifyTheRowValues(): Promise<void> {\n const firstRow = this.page.locator('tbody tr').first();\n await expect(firstRow.locator('.report-table-package')).toHaveText('Test Application/1.0.0');\n await expect(firstRow.locator('.report-table-originalType')).toHaveText(/Initial/i); // Regex ignores case\n await expect(firstRow.locator('.report-table-user')).toHaveText('admin');\n }\n\n async verifyTheDeploymentValues(taskID: string, executedText: string): Promise<void> {\n /*const searchInput = this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first();\n await searchInput.waitFor({ state: 'visible' });\n await searchInput.scrollIntoViewIfNeeded();\n await searchInput.click({ force: true });\n await searchInput.fill(taskID);*/\n await this.page\n .locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]:visible')\n .first()\n .fill(taskID!);\n await this.page.waitForTimeout(5000);\n // await this.page.waitForSelector('table.table.table-striped tbody tr', { timeout: 60000 });\n //await this.page.locator('table.table.table-striped tbody tr').first().waitFor();\n //await expect(this.page.locator('table.table.table-striped tbody tr').first().locator('td.report-table-package .deployment-report-package')).toHaveText('Test Application/1.0.0');\n await this.page.waitForSelector('td.report-table-package .deployment-report-package', { timeout: 30000 });\n await expect(this.page.locator('td.report-table-package .deployment-report-package')).toHaveText(\n /Test Application\\/1\\.0\\.0/i,\n );\n await expect(this.page.locator('td.report-table-originalType .deployment-report-task-type')).toHaveText(/Initial/i); // Regex ignores case\n await expect(this.page.locator('td.report-table-user .deployment-report-user')).toHaveText('admin');\n\n //Click the row\n await this.page.locator('td.report-table-package .deployment-report-package').dblclick();\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n\n //Get the log text\n const text = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n console.log(`Executed Text in Reports page: ${text}`);\n\n //Verify both the log text are same\n expect(text).toContain(executedText);\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class LoginPage extends WithPage {\n /**\n * Login with username and password\n * @param userName\n * @param password\n */\n async login(userName: string, password: string): Promise<void> {\n await this.page.goto('/#/login');\n await expect(this.page).toHaveTitle('Digital.ai Deploy');\n await this.page.getByPlaceholder('user').fill(userName, { timeout: 1000 });\n await this.page.getByPlaceholder('Password').fill(password, { timeout: 10000 });\n await this.page.getByRole('button', { name: 'Log in' }).click({ timeout: 10000 });\n }\n\n async verifyInvalidPasswordMessage(): Promise<void> {\n const errorMessage = this.page.getByText('The username and/or password you have entered is incorrect.');\n await expect(errorMessage).toBeVisible();\n }\n\n /**\n * Logout as authenticated user\n */\n async logout(): Promise<void> {\n await this.page.locator('button.dot-avatar').click();\n await this.page.getByText('Log out', { exact: true }).click();\n await expect(this.page.getByText('Log in').first()).toBeVisible();\n }\n}\n"],"names":[],"version":3,"file":"module.js.map"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Page } from "@playwright/test";
|
|
2
|
+
declare class WithPage {
|
|
3
|
+
protected readonly page: Page;
|
|
4
|
+
constructor(page: Page);
|
|
5
|
+
}
|
|
6
|
+
declare class HomePage extends WithPage {
|
|
7
|
+
clickUserManagement(): Promise<void>;
|
|
8
|
+
verifyDeployLogoIsPresent(): Promise<void>;
|
|
9
|
+
verifyDeployTextIsPresent(): Promise<void>;
|
|
10
|
+
clickReports(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
declare class UserPage extends WithPage {
|
|
13
|
+
/**
|
|
14
|
+
* Login with username and password
|
|
15
|
+
* @param userName
|
|
16
|
+
* @param password
|
|
17
|
+
*/
|
|
18
|
+
createNewUser(username: string, fullName: string, email: string, password: string, confirmPassword: string): Promise<void>;
|
|
19
|
+
verifySuccessMessage(): Promise<void>;
|
|
20
|
+
verifyUserErrorMessage(): Promise<void>;
|
|
21
|
+
deleteTheUserAndVerifyItIsDeleted(username: string): Promise<void>;
|
|
22
|
+
editUserAndVerify(username: string, editfullname: string): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
declare class OverthereLocalHostPage extends WithPage {
|
|
25
|
+
navigateToOverthereLocalHostPage(): Promise<void>;
|
|
26
|
+
createLocalHostForUnixType(name: string): Promise<void>;
|
|
27
|
+
createLocalHostForWindowsType(name: string): Promise<void>;
|
|
28
|
+
createLocalHostForZosType(name: string): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
declare class EnvironmentsPage extends WithPage {
|
|
31
|
+
navigateToEnvironmentsPage(): Promise<void>;
|
|
32
|
+
createEnvironment(name: string): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
declare class ApplicationsPage extends WithPage {
|
|
35
|
+
taskId: string;
|
|
36
|
+
executedText: string;
|
|
37
|
+
navigateToApplicationsPage(): Promise<void>;
|
|
38
|
+
createNewDeploymentPackage(applicationName: string, packageName: string, cmdAppName: string, cmdAppCommand: string): Promise<void>;
|
|
39
|
+
deployApp(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
declare class ReportsPage extends WithPage {
|
|
42
|
+
clickDeploymentTasks(): Promise<void>;
|
|
43
|
+
verifyTheRowValues(): Promise<void>;
|
|
44
|
+
verifyTheDeploymentValues(taskID: string, executedText: string): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
declare class Navigation {
|
|
47
|
+
homePage: HomePage;
|
|
48
|
+
userPage: UserPage;
|
|
49
|
+
overthereLocalHostPage: OverthereLocalHostPage;
|
|
50
|
+
environmentsPage: EnvironmentsPage;
|
|
51
|
+
applicationsPage: ApplicationsPage;
|
|
52
|
+
reportsPage: ReportsPage;
|
|
53
|
+
constructor(page: Page);
|
|
54
|
+
navigateToHomePage(): Promise<void>;
|
|
55
|
+
navigateToUserPage(): Promise<void>;
|
|
56
|
+
clickCollapseSideView(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
declare class LoginPage extends WithPage {
|
|
59
|
+
/**
|
|
60
|
+
* Login with username and password
|
|
61
|
+
* @param userName
|
|
62
|
+
* @param password
|
|
63
|
+
*/
|
|
64
|
+
login(userName: string, password: string): Promise<void>;
|
|
65
|
+
verifyInvalidPasswordMessage(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Logout as authenticated user
|
|
68
|
+
*/
|
|
69
|
+
logout(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
type DeployFixtures = {
|
|
72
|
+
fixtures: Fixtures;
|
|
73
|
+
loginPage: LoginPage;
|
|
74
|
+
navigation: Navigation;
|
|
75
|
+
};
|
|
76
|
+
export const test: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & DeployFixtures, import("@playwright/test").PlaywrightWorkerArgs & import("@playwright/test").PlaywrightWorkerOptions>;
|
|
77
|
+
declare class Fixtures {
|
|
78
|
+
constructor(page: Page);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["apps/deploy/pages/withPage.ts","apps/deploy/pages/homePage.ts","apps/deploy/pages/usersPage.ts","apps/deploy/pages/overthereLocaHostPage.ts","apps/deploy/pages/environmentsPage.ts","apps/deploy/pages/applicationsPage.ts","apps/deploy/pages/reportsPage.ts","apps/deploy/pages/index.ts","apps/deploy/pages/loginPage.ts","apps/deploy/fixtures/index.ts","apps/deploy/index.ts"],"sourcesContent":["import { Page } from '@playwright/test';\n\nexport class WithPage {\n protected readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class HomePage extends WithPage {\n async clickUserManagement(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n await this.page.getByRole('link', { name: 'Users' }).click();\n }\n\n async verifyDeployLogoIsPresent(): Promise<void> {\n const logo = this.page.getByAltText('Deploy');\n await expect(logo).toBeVisible();\n }\n\n async verifyDeployTextIsPresent(): Promise<void> {\n const title = this.page.getByTitle('digital.ai');\n await expect(title).toBeVisible();\n }\n\n async clickReports(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Reports' }).click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class UserPage extends WithPage {\n /**\n * Login with username and password\n * @param userName\n * @param password\n */\n // this should be refactored to take an object and not disable the rule!!\n // eslint-disable-next-line max-params\n async createNewUser(\n username: string,\n fullName: string,\n email: string,\n password: string,\n confirmPassword: string,\n ): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.getByRole('button', { name: 'Add user' }).click();\n await this.page.locator('input[name=\"username\"]').fill(username);\n await this.page.locator('input[name=\"fullName\"]').fill(fullName);\n await this.page.locator('input[name=\"email\"]').fill(email);\n const passwordInput = this.page.locator('input[name=\"password\"]');\n await passwordInput.click({ force: true });\n await passwordInput.fill(password);\n await this.page.locator('input[name=\"confirmPassword\"]').fill(confirmPassword);\n await this.page.getByRole('button', { name: 'Save' }).click();\n }\n\n async verifySuccessMessage(): Promise<void> {\n const SuccessMessage = this.page.getByRole('alertdialog');\n await expect(SuccessMessage).toBeVisible();\n await expect(SuccessMessage).toHaveText(/User \".*\" created/i);\n }\n\n async verifyUserErrorMessage(): Promise<void> {\n await expect(this.page.locator('.rrt-middle-container[role=\"alertdialog\"]').nth(1)).toContainText(\n /already in use/i,\n );\n }\n\n async deleteTheUserAndVerifyItIsDeleted(username: string): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.waitForTimeout(10000);\n await this.page.getByPlaceholder('Filter...').fill(username);\n await this.page.waitForTimeout(10000);\n await this.page.locator('td.users-table-actions button.delete.xl-icon.table-action').click();\n await this.page.getByRole('button', { name: 'Delete', exact: true }).click();\n const DeleteMessage = this.page.getByRole('alertdialog');\n await expect(DeleteMessage).toBeVisible();\n await expect(DeleteMessage).toHaveText(/User \".*\" deleted/i);\n }\n\n async editUserAndVerify(username: string, editfullname: string): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n await this.page.waitForTimeout(10000);\n await this.page.getByPlaceholder('Filter...').fill(username);\n await this.page.waitForTimeout(10000);\n await this.page.locator('i.icon-edit.dot-i').first().click();\n await this.page.locator('input[name=\"fullName\"]').fill(editfullname);\n await this.page.getByRole('button', { name: 'Save', exact: true }).click();\n const EditMessage = this.page.getByRole('alertdialog');\n await expect(EditMessage).toBeVisible();\n const editedUsername = this.page.locator('td.users-table-fullName div').textContent();\n // eslint-disable-next-line no-console\n console.log(editedUsername);\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class OverthereLocalHostPage extends WithPage {\n /* Helps to navigate to the Overthere LocalHost page */\n async navigateToOverthereLocalHostPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Infrastructure\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n const menuButton = this.page.locator('i.context-menu-button[data-id=\"Infrastructure\"]');\n await menuButton.click();\n await this.page.getByTitle('New').click();\n await this.page.getByText('overthere').click();\n await this.page.getByText('LocalHost').click();\n }\n\n /* Helps to create a LocalHost of type UNIX */\n async createLocalHostForUnixType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('UNIX').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n\n /* Helps to create a LocalHost of type WINDOWS */\n async createLocalHostForWindowsType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('WINDOWS').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n\n /* Helps to create a LocalHost of type ZOS */\n async createLocalHostForZosType(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('input[type=\"text\"]').nth(7).click();\n await this.page.getByTitle('ZOS').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class EnvironmentsPage extends WithPage {\n /* Helps to navigate to the Environments page */\n async navigateToEnvironmentsPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Environments\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n const menuButton = this.page.locator('i.context-menu-button[data-id=\"Environments\"]');\n await menuButton.click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.Environment').click();\n }\n\n /* Helps to create a new Environment */\n async createEnvironment(name: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('i.xl-icon.arrow-down-icon.show-all').nth(0).click();\n await this.page.getByTitle('Infrastructure/UnixHost').click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ApplicationsPage extends WithPage {\n taskId: string = '';\n executedText: string = '';\n\n /* Helps to navigate to the Applications page */\n async navigateToApplicationsPage(): Promise<void> {\n const configNode = this.page.locator('span[data-id=\"Applications\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500); // small delay for hover animation\n await this.page.locator('i.context-menu-button[data-id=\"Applications\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.Application').click();\n }\n\n /*Create a New Application and Deployment Package */\n async createNewDeploymentPackage(\n applicationName: string,\n packageName: string,\n cmdAppName: string,\n cmdAppCommand: string,\n ): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(applicationName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a').click();\n const configNode = this.page.locator('span[data-id=\"Applications/Test Application\"]');\n await configNode.hover();\n await this.page.waitForTimeout(500);\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('udm.DeploymentPackage').click();\n await this.page.locator('input[name=\"name\"]').fill(packageName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications/Test Application\"] .infinite-tree-node > a').click();\n await this.page.waitForTimeout(500);\n await this.page.locator('span[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.getByTitle('New').click();\n await this.page.getByTitle('cmd', { exact: true }).click();\n await this.page.getByTitle('cmd.Command', { exact: true }).click();\n await this.page.locator('input[name=\"name\"]').fill(cmdAppName);\n await this.page.locator('textarea[name=\"commandLine\"]').fill(cmdAppCommand);\n await this.page.waitForTimeout(500);\n await this.page\n .locator('button', { hasText: /^Save$/ })\n .first()\n .click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('i.xl-icon.close-icon').first().click();\n }\n\n /*Deploy the application*/\n async deployApp(): Promise<void> {\n /* await this.page.locator('span[data-id=\"Applications\"]').click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-toggler').click({ force: true }); \n //await this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a').click({ force: true }); \n await this.page.waitForTimeout(1000);\n await this.page.locator('div[data-id=\"Applications/Test Application\"] .infinite-tree-node > a').click(); \n await this.page.locator('span[data-id=\"Applications/Test Application/1.0.0\"]').click(); */\n await this.page.waitForTimeout(3000);\n await this.page.locator('i.context-menu-button[data-id=\"Applications/Test Application/1.0.0\"]').click();\n await this.page.locator('a[title=\"Deploy\"]').click();\n await this.page.locator('input[name=\"selections\"][value=\"Environments/Test Environment\"]').click();\n await this.page.getByRole('button', { name: 'Continue' }).click();\n await this.page.waitForTimeout(1000);\n await this.page.locator('button.deploy.xl-primary').click();\n await this.page.waitForTimeout(5000);\n\n //Get the task id\n this.taskId = (await this.page.locator('div.task-id').textContent()) || '';\n console.log(`Deployment Task ID in applications page: ${this.taskId}`);\n\n //Verify no failure and all are done\n const labels = this.page.locator('span.label');\n await expect(labels).toHaveCount(3);\n await expect(labels).toHaveText(['EXECUTED', 'DONE', 'DONE']);\n\n //Get the text executed\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n this.executedText = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n console.log(`Executed Text in applications page: ${this.executedText}`);\n\n //Verify in monitoring tab searching with the task id\n await this.page.locator('div[data-id=\"TASK_MONITOR\"] .infinite-tree-node > a').click();\n await this.page.locator('span[data-id=\"DEPLOYMENT_TASKS\"]').dblclick();\n await this.page.waitForTimeout(5000);\n await this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first().fill(this.taskId);\n const stateText = await this.page.locator('td.tasks-table-state').first().innerText();\n console.log(`Task state: ${stateText}`);\n expect(stateText.trim()).toBe('Executed');\n\n //Click the row to go to deployment screen\n await this.page.locator('table.table.table-striped tbody tr').first().dblclick();\n await this.page.waitForTimeout(5000);\n\n await this.page.locator('button.finish.xl-primary').click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ReportsPage extends WithPage {\n async clickDeploymentTasks(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Deployments' }).click();\n }\n\n async verifyTheRowValues(): Promise<void> {\n const firstRow = this.page.locator('tbody tr').first();\n await expect(firstRow.locator('.report-table-package')).toHaveText('Test Application/1.0.0');\n await expect(firstRow.locator('.report-table-originalType')).toHaveText(/Initial/i); // Regex ignores case\n await expect(firstRow.locator('.report-table-user')).toHaveText('admin');\n }\n\n async verifyTheDeploymentValues(taskID: string, executedText: string): Promise<void> {\n /*const searchInput = this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first();\n await searchInput.waitFor({ state: 'visible' });\n await searchInput.scrollIntoViewIfNeeded();\n await searchInput.click({ force: true });\n await searchInput.fill(taskID);*/\n await this.page\n .locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]:visible')\n .first()\n .fill(taskID!);\n await this.page.waitForTimeout(5000);\n // await this.page.waitForSelector('table.table.table-striped tbody tr', { timeout: 60000 });\n //await this.page.locator('table.table.table-striped tbody tr').first().waitFor();\n //await expect(this.page.locator('table.table.table-striped tbody tr').first().locator('td.report-table-package .deployment-report-package')).toHaveText('Test Application/1.0.0');\n await this.page.waitForSelector('td.report-table-package .deployment-report-package', { timeout: 30000 });\n await expect(this.page.locator('td.report-table-package .deployment-report-package')).toHaveText(\n /Test Application\\/1\\.0\\.0/i,\n );\n await expect(this.page.locator('td.report-table-originalType .deployment-report-task-type')).toHaveText(/Initial/i); // Regex ignores case\n await expect(this.page.locator('td.report-table-user .deployment-report-user')).toHaveText('admin');\n\n //Click the row\n await this.page.locator('td.report-table-package .deployment-report-package').dblclick();\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n\n //Get the log text\n const text = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n console.log(`Executed Text in Reports page: ${text}`);\n\n //Verify both the log text are same\n expect(text).toContain(executedText);\n }\n}\n","import { Page } from '@playwright/test';\nimport { HomePage } from './homePage';\nimport { UserPage } from './usersPage';\nimport { OverthereLocalHostPage } from './overthereLocaHostPage';\nimport { EnvironmentsPage } from './environmentsPage';\nimport { ApplicationsPage } from './applicationsPage';\nimport { ReportsPage } from './reportsPage';\n\nexport class Navigation {\n private readonly page: Page;\n homePage: HomePage;\n userPage: UserPage;\n overthereLocalHostPage: OverthereLocalHostPage;\n environmentsPage: EnvironmentsPage;\n applicationsPage: ApplicationsPage;\n reportsPage: ReportsPage;\n\n constructor(page: Page) {\n this.page = page;\n this.homePage = new HomePage(page);\n this.userPage = new UserPage(page);\n this.overthereLocalHostPage = new OverthereLocalHostPage(page);\n this.environmentsPage = new EnvironmentsPage(page);\n this.applicationsPage = new ApplicationsPage(page);\n this.reportsPage = new ReportsPage(page);\n }\n\n async navigateToHomePage(): Promise<void> {\n await this.page.goto('/home');\n }\n\n async navigateToUserPage(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n }\n\n async clickCollapseSideView(): Promise<void> {\n const collapseButton = this.page.getByTestId('back-button');\n await collapseButton.click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class LoginPage extends WithPage {\n /**\n * Login with username and password\n * @param userName\n * @param password\n */\n async login(userName: string, password: string): Promise<void> {\n await this.page.goto('/#/login');\n await expect(this.page).toHaveTitle('Digital.ai Deploy');\n await this.page.getByPlaceholder('user').fill(userName, { timeout: 1000 });\n await this.page.getByPlaceholder('Password').fill(password, { timeout: 10000 });\n await this.page.getByRole('button', { name: 'Log in' }).click({ timeout: 10000 });\n }\n\n async verifyInvalidPasswordMessage(): Promise<void> {\n const errorMessage = this.page.getByText('The username and/or password you have entered is incorrect.');\n await expect(errorMessage).toBeVisible();\n }\n\n /**\n * Logout as authenticated user\n */\n async logout(): Promise<void> {\n await this.page.locator('button.dot-avatar').click();\n await this.page.getByText('Log out', { exact: true }).click();\n await expect(this.page.getByText('Log in').first()).toBeVisible();\n }\n}\n","import { test as base, Page } from '@playwright/test';\nimport { Navigation } from '../pages';\nimport { LoginPage } from '../pages/loginPage';\n\ntype DeployFixtures = {\n fixtures: Fixtures;\n loginPage: LoginPage;\n navigation: Navigation;\n};\n\nexport const test = base.extend<DeployFixtures>({\n fixtures: async ({ page }, use) => {\n const fixtures = new Fixtures(page);\n await use(fixtures);\n return fixtures;\n },\n loginPage: async ({ page }, use) => {\n const loginPage = new LoginPage(page);\n await use(loginPage);\n return loginPage;\n },\n navigation: async ({ page }, use) => {\n const navigationPage = new Navigation(page);\n await use(navigationPage);\n return navigationPage;\n },\n});\n\nclass Fixtures {\n private readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","export { test } from './fixtures';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@digital-ai/devops-page-object-deploy",
|
|
3
|
+
"version": "0.0.0-snapshot-20251104102306",
|
|
4
|
+
"source": "index.ts",
|
|
5
|
+
"main": "dist/main.js",
|
|
6
|
+
"module": "dist/module.js",
|
|
7
|
+
"types": "dist/types.d.ts",
|
|
8
|
+
"license": "SEE LICENSE IN <LICENSE.md>",
|
|
9
|
+
"private": false,
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git@github.com:digital-ai/devops-page-objects.git"
|
|
13
|
+
},
|
|
14
|
+
"description": "This is a collection of page objects for Playwright that can be used to automate actions on Digital.ai Deploy",
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"lodash": "4.17.21",
|
|
17
|
+
"rambda": "^8.2.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@parcel/packager-ts": "2.8.3",
|
|
21
|
+
"@parcel/transformer-typescript-types": "^2.8.3",
|
|
22
|
+
"@types/lodash": "4.14.192",
|
|
23
|
+
"parcel": "2.8.3",
|
|
24
|
+
"typescript": "4.5.3",
|
|
25
|
+
"eslint-config-custom": "0.0.0",
|
|
26
|
+
"tsconfig": "0.0.0"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@playwright/test": "^1.34.3"
|
|
30
|
+
},
|
|
31
|
+
"targets": {
|
|
32
|
+
"main": {
|
|
33
|
+
"includeNodeModules": [
|
|
34
|
+
"lodash"
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
|
|
43
|
+
"tsc": "tsc --noEmit",
|
|
44
|
+
"build": "parcel build --cache-dir .parcel-cache",
|
|
45
|
+
"e2e": "e2e-test"
|
|
46
|
+
}
|
|
47
|
+
}
|