Skip to content

Commit e994f5d

Browse files
authored
🎨 [e2e-frontend] Check study browser (#6635)
1 parent c0b276a commit e994f5d

File tree

13 files changed

+180
-31
lines changed

13 files changed

+180
-31
lines changed

services/static-webserver/client/source/class/osparc/dashboard/ResourceFilter.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ qx.Class.define("osparc.dashboard.ResourceFilter", {
6565
/* WORKSPACES AND FOLDERS */
6666
__createWorkspacesAndFoldersTree: function() {
6767
const workspacesAndFoldersTree = this.__workspacesAndFoldersTree = new osparc.dashboard.WorkspacesAndFoldersTree();
68+
osparc.utils.Utils.setIdToWidget(workspacesAndFoldersTree, "contextTree");
6869
// Height needs to be calculated manually to make it flexible
6970
workspacesAndFoldersTree.set({
7071
minHeight: 60,
@@ -137,6 +138,7 @@ qx.Class.define("osparc.dashboard.ResourceFilter", {
137138
/* TAGS */
138139
__createTagsFilterLayout: function() {
139140
const layout = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
141+
osparc.utils.Utils.setIdToWidget(layout, "tagsFilter");
140142

141143
this.__populateTags(layout, []);
142144
osparc.store.Store.getInstance().addListener("changeTags", () => {
@@ -157,6 +159,7 @@ qx.Class.define("osparc.dashboard.ResourceFilter", {
157159
layout.removeAll();
158160
osparc.store.Store.getInstance().getTags().forEach((tag, idx) => {
159161
const button = new qx.ui.form.ToggleButton(tag.name, "@FontAwesome5Solid/tag/18");
162+
osparc.utils.Utils.setIdToWidget(button, "tagFilterItem");
160163
button.id = tag.id;
161164
button.set({
162165
appearance: "filter-toggle-button",

services/static-webserver/client/source/class/osparc/dashboard/WorkspacesAndFoldersTreeItem.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ qx.Class.define("osparc.dashboard.WorkspacesAndFoldersTreeItem", {
3232

3333
this.setNotHoveredStyle();
3434
this.__attachEventHandlers();
35+
36+
osparc.utils.Utils.setIdToWidget(this, "workspacesAndFoldersTreeItem");
3537
},
3638

3739
members: {

services/static-webserver/client/source/class/osparc/navigation/UserMenu.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ qx.Class.define("osparc.navigation.UserMenu", {
116116
}
117117
case "license":
118118
control = new qx.ui.menu.Button(this.tr("License"));
119+
osparc.utils.Utils.setIdToWidget(control, "userMenuLicenseBtn");
119120
osparc.store.Support.getLicenseURL()
120121
.then(licenseURL => control.addListener("execute", () => window.open(licenseURL)));
121122
this.add(control);

services/static-webserver/client/source/class/osparc/utils/Utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,9 +1033,9 @@ qx.Class.define("osparc.utils.Utils", {
10331033
return null;
10341034
},
10351035

1036-
setMoreToWidget: (qWidget, id) => {
1036+
setKeyToWidget: (qWidget, id) => {
10371037
if (qWidget.getContentElement) {
1038-
qWidget.getContentElement().setAttribute("osparc-test-more", id);
1038+
qWidget.getContentElement().setAttribute("osparc-test-key", id);
10391039
}
10401040
},
10411041

services/static-webserver/client/source/class/osparc/widget/NodeTreeItem.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ qx.Class.define("osparc.widget.NodeTreeItem", {
107107

108108
__applyStudy: function(study) {
109109
const label = this.getChildControl("label");
110-
osparc.utils.Utils.setMoreToWidget(label, "root");
110+
osparc.utils.Utils.setKeyToWidget(label, "root");
111111

112112
study.bind("name", this, "toolTipText");
113113

@@ -116,7 +116,7 @@ qx.Class.define("osparc.widget.NodeTreeItem", {
116116

117117
__applyNode: function(node) {
118118
const label = this.getChildControl("label");
119-
osparc.utils.Utils.setMoreToWidget(label, node.getNodeId());
119+
osparc.utils.Utils.setKeyToWidget(label, node.getNodeId());
120120

121121
node.bind("label", this, "toolTipText");
122122

tests/e2e-frontend/tests/fixtures/loginPage.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,19 @@ export class LoginPage {
1717
* @param {string} password
1818
*/
1919
async login(email, password) {
20+
await this.page.goto(this.productUrl);
21+
2022
const usernameField = this.page.getByTestId("loginUserEmailFld");
2123
const passwordField = this.page.getByTestId("loginPasswordFld");
2224
const submitButton = this.page.getByTestId("loginSubmitBtn");
2325

2426
await usernameField.fill(email);
2527
await passwordField.fill(password);
2628
await submitButton.click();
29+
30+
const response = await this.page.waitForResponse('**/me');
31+
const meData = await response.json();
32+
return meData["data"]["role"];
2733
}
2834

2935
async logout() {

tests/e2e-frontend/tests/navigationBar/navigationBar.spec.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,9 @@ for (const product in products) {
153153

154154
test.beforeAll(async ({ browser }) => {
155155
page = await browser.newPage();
156-
157156
loginPageFixture = new LoginPage(page, productUrl);
158-
await loginPageFixture.goto();
159-
160-
await loginPageFixture.login(user.email, user.password);
161-
162-
const response = await page.waitForResponse('**/me');
163-
const meData = await response.json();
164-
expect(meData["data"]["role"]).toBe(role);
157+
const role = await loginPageFixture.login(user.email, user.password);
158+
expect(role).toBe(user.role);
165159
});
166160

167161
test.afterAll(async ({ browser }) => {
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/* eslint-disable no-undef */
2+
3+
const { test, expect } = require('@playwright/test');
4+
5+
import { LoginPage } from '../fixtures/loginPage';
6+
7+
import products from '../products.json';
8+
import users from '../users.json';
9+
10+
const product = "osparc";
11+
const productUrl = products[product];
12+
const user = users[product][0];
13+
14+
test.describe.serial(`Left Filters:`, () => {
15+
let page = null;
16+
let loginPageFixture = null;
17+
18+
test.beforeAll(async ({ browser }) => {
19+
page = await browser.newPage();
20+
loginPageFixture = new LoginPage(page, productUrl);
21+
const role = await loginPageFixture.login(user.email, user.password);
22+
expect(role).toBe(user.role);
23+
});
24+
25+
test.afterAll(async ({ browser }) => {
26+
await loginPageFixture.logout();
27+
await page.close();
28+
await browser.close();
29+
});
30+
31+
test(`Context`, async () => {
32+
const contextTree = page.getByTestId("contextTree");
33+
await expect(contextTree).toBeVisible({
34+
timeout: 30000 // it will take some time to load the Study Browser
35+
});
36+
37+
const workspacesAndFoldersTreeItems = page.getByTestId("workspacesAndFoldersTreeItem");
38+
const count = await workspacesAndFoldersTreeItems.count();
39+
// at least two: My Workspace and Shared Workspaces
40+
expect(count > 1).toBeTruthy();
41+
});
42+
43+
test(`Tags`, async () => {
44+
const tagsFilter = page.getByTestId("tagsFilter");
45+
await expect(tagsFilter).toBeVisible({
46+
timeout: 30000 // it will take some time to load the Study Browser
47+
});
48+
49+
const tagFilterItems = page.getByTestId("tagFilterItem");
50+
const count = await tagFilterItems.count();
51+
// at least two and less than 6 (max five are shown)
52+
expect(count > 1 && count < 6).toBeTruthy();
53+
});
54+
});
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/* eslint-disable no-undef */
2+
3+
const { test, expect } = require('@playwright/test');
4+
5+
import { LoginPage } from '../fixtures/loginPage';
6+
7+
import products from '../products.json';
8+
import users from '../users.json';
9+
10+
const expectedElements = {
11+
"osparc": {
12+
"plusButton": {
13+
"id": "newStudyBtn",
14+
},
15+
},
16+
"s4l": {
17+
"plusButton": {
18+
"id": "startS4LButton",
19+
},
20+
},
21+
"s4lacad": {
22+
"plusButton": {
23+
"id": "startS4LButton",
24+
},
25+
},
26+
"s4llite": {
27+
"plusButton": {
28+
"id": "startS4LButton",
29+
},
30+
},
31+
"tis": {
32+
"plusButton": {
33+
"id": "newStudyBtn",
34+
},
35+
},
36+
"tiplite": {
37+
"plusButton": {
38+
"id": "newStudyBtn",
39+
},
40+
},
41+
};
42+
43+
for (const product in products) {
44+
if (product in users) {
45+
const productUrl = products[product];
46+
const productUsers = users[product];
47+
for (const user of productUsers) {
48+
// expected roles for users: "USER"
49+
const role = "USER";
50+
expect(user.role).toBe(role);
51+
52+
test.describe.serial(`Main View: ${product}`, () => {
53+
let page = null;
54+
let loginPageFixture = null;
55+
56+
test.beforeAll(async ({ browser }) => {
57+
page = await browser.newPage();
58+
loginPageFixture = new LoginPage(page, productUrl);
59+
const role = await loginPageFixture.login(user.email, user.password);
60+
expect(role).toBe(user.role);
61+
});
62+
63+
test.afterAll(async ({ browser }) => {
64+
await loginPageFixture.logout();
65+
await page.close();
66+
await browser.close();
67+
});
68+
69+
test(`Plus button`, async () => {
70+
expect(expectedElements[product]["plusButton"]).toBeDefined();
71+
72+
const plusButtonId = expectedElements[product]["plusButton"]["id"];
73+
const plusButton = page.getByTestId(plusButtonId);
74+
await expect(plusButton).toBeVisible({
75+
timeout: 30000 // it will take some time to load the Study Browser
76+
});
77+
});
78+
});
79+
}
80+
}
81+
}

tests/e2e-frontend/tests/userMenu/userMenuButtons.spec.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const userMenuButtons = {
1616
"userMenuThemeSwitcherBtn": true,
1717
"userMenuAboutBtn": true,
1818
"userMenuAboutProductBtn": true,
19+
"userMenuLicenseBtn": true,
1920
"userMenuAccessTIPBtn": false,
2021
"userMenuLogoutBtn": true,
2122
},
@@ -27,6 +28,7 @@ const userMenuButtons = {
2728
"userMenuThemeSwitcherBtn": true,
2829
"userMenuAboutBtn": true,
2930
"userMenuAboutProductBtn": true,
31+
"userMenuLicenseBtn": true,
3032
"userMenuAccessTIPBtn": false,
3133
"userMenuLogoutBtn": true,
3234
},
@@ -38,6 +40,7 @@ const userMenuButtons = {
3840
"userMenuThemeSwitcherBtn": true,
3941
"userMenuAboutBtn": true,
4042
"userMenuAboutProductBtn": true,
43+
"userMenuLicenseBtn": true,
4144
"userMenuAccessTIPBtn": false,
4245
"userMenuLogoutBtn": true,
4346
},
@@ -49,6 +52,7 @@ const userMenuButtons = {
4952
"userMenuThemeSwitcherBtn": true,
5053
"userMenuAboutBtn": true,
5154
"userMenuAboutProductBtn": true,
55+
"userMenuLicenseBtn": true,
5256
"userMenuAccessTIPBtn": false,
5357
"userMenuLogoutBtn": true,
5458
},
@@ -60,6 +64,7 @@ const userMenuButtons = {
6064
"userMenuThemeSwitcherBtn": true,
6165
"userMenuAboutBtn": true,
6266
"userMenuAboutProductBtn": true,
67+
"userMenuLicenseBtn": true,
6368
"userMenuAccessTIPBtn": false,
6469
"userMenuLogoutBtn": true,
6570
},
@@ -71,6 +76,7 @@ const userMenuButtons = {
7176
"userMenuThemeSwitcherBtn": true,
7277
"userMenuAboutBtn": true,
7378
"userMenuAboutProductBtn": true,
79+
"userMenuLicenseBtn": true,
7480
"userMenuAccessTIPBtn": true,
7581
"userMenuLogoutBtn": true,
7682
},
@@ -108,15 +114,9 @@ for (const product in products) {
108114

109115
test.beforeAll(async ({ browser }) => {
110116
page = await browser.newPage();
111-
112117
loginPageFixture = new LoginPage(page, productUrl);
113-
await loginPageFixture.goto();
114-
115-
await loginPageFixture.login(user.email, user.password);
116-
117-
const response = await page.waitForResponse('**/me');
118-
const meData = await response.json();
119-
expect(meData["data"]["role"]).toBe(role);
118+
const role = await loginPageFixture.login(user.email, user.password);
119+
expect(role).toBe(user.role);
120120
});
121121

122122
test.afterAll(async ({ browser }) => {

0 commit comments

Comments
 (0)