Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🎨 [e2e-frontend] Check study browser #6635

Merged
merged 16 commits into from
Oct 30, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ qx.Class.define("osparc.dashboard.ResourceFilter", {
/* WORKSPACES AND FOLDERS */
__createWorkspacesAndFoldersTree: function() {
const workspacesAndFoldersTree = this.__workspacesAndFoldersTree = new osparc.dashboard.WorkspacesAndFoldersTree();
osparc.utils.Utils.setIdToWidget(workspacesAndFoldersTree, "contextTree");
// Height needs to be calculated manually to make it flexible
workspacesAndFoldersTree.set({
minHeight: 60,
Expand Down Expand Up @@ -137,6 +138,7 @@ qx.Class.define("osparc.dashboard.ResourceFilter", {
/* TAGS */
__createTagsFilterLayout: function() {
const layout = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
osparc.utils.Utils.setIdToWidget(layout, "tagsFilter");

this.__populateTags(layout, []);
osparc.store.Store.getInstance().addListener("changeTags", () => {
Expand All @@ -157,6 +159,7 @@ qx.Class.define("osparc.dashboard.ResourceFilter", {
layout.removeAll();
osparc.store.Store.getInstance().getTags().forEach((tag, idx) => {
const button = new qx.ui.form.ToggleButton(tag.name, "@FontAwesome5Solid/tag/18");
osparc.utils.Utils.setIdToWidget(button, "tagFilterItem");
button.id = tag.id;
button.set({
appearance: "filter-toggle-button",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ qx.Class.define("osparc.dashboard.WorkspacesAndFoldersTreeItem", {

this.setNotHoveredStyle();
this.__attachEventHandlers();

osparc.utils.Utils.setIdToWidget(this, "workspacesAndFoldersTreeItem");
},

members: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ qx.Class.define("osparc.navigation.UserMenu", {
}
case "license":
control = new qx.ui.menu.Button(this.tr("License"));
osparc.utils.Utils.setIdToWidget(control, "userMenuLicenseBtn");
osparc.store.Support.getLicenseURL()
.then(licenseURL => control.addListener("execute", () => window.open(licenseURL)));
this.add(control);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1033,9 +1033,9 @@ qx.Class.define("osparc.utils.Utils", {
return null;
},

setMoreToWidget: (qWidget, id) => {
setKeyToWidget: (qWidget, id) => {
if (qWidget.getContentElement) {
qWidget.getContentElement().setAttribute("osparc-test-more", id);
qWidget.getContentElement().setAttribute("osparc-test-key", id);
}
},

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ qx.Class.define("osparc.widget.NodeTreeItem", {

__applyStudy: function(study) {
const label = this.getChildControl("label");
osparc.utils.Utils.setMoreToWidget(label, "root");
osparc.utils.Utils.setKeyToWidget(label, "root");

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

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

__applyNode: function(node) {
const label = this.getChildControl("label");
osparc.utils.Utils.setMoreToWidget(label, node.getNodeId());
osparc.utils.Utils.setKeyToWidget(label, node.getNodeId());

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

Expand Down
6 changes: 6 additions & 0 deletions tests/e2e-frontend/tests/fixtures/loginPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,19 @@ export class LoginPage {
* @param {string} password
*/
async login(email, password) {
await this.page.goto(this.productUrl);

const usernameField = this.page.getByTestId("loginUserEmailFld");
const passwordField = this.page.getByTestId("loginPasswordFld");
const submitButton = this.page.getByTestId("loginSubmitBtn");

await usernameField.fill(email);
await passwordField.fill(password);
await submitButton.click();

const response = await this.page.waitForResponse('**/me');
const meData = await response.json();
return meData["data"]["role"];
}

async logout() {
Expand Down
10 changes: 2 additions & 8 deletions tests/e2e-frontend/tests/navigationBar/navigationBar.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,15 +153,9 @@ for (const product in products) {

test.beforeAll(async ({ browser }) => {
page = await browser.newPage();

loginPageFixture = new LoginPage(page, productUrl);
await loginPageFixture.goto();

await loginPageFixture.login(user.email, user.password);

const response = await page.waitForResponse('**/me');
const meData = await response.json();
expect(meData["data"]["role"]).toBe(role);
const role = await loginPageFixture.login(user.email, user.password);
expect(role).toBe(user.role);
});

test.afterAll(async ({ browser }) => {
Expand Down
54 changes: 54 additions & 0 deletions tests/e2e-frontend/tests/studyBrowser/leftFilters.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/* eslint-disable no-undef */

const { test, expect } = require('@playwright/test');

import { LoginPage } from '../fixtures/loginPage';

import products from '../products.json';
import users from '../users.json';

const product = "osparc";
const productUrl = products[product];
const user = users[product][0];

test.describe.serial(`Left Filters:`, () => {
let page = null;
let loginPageFixture = null;

test.beforeAll(async ({ browser }) => {
page = await browser.newPage();
loginPageFixture = new LoginPage(page, productUrl);
const role = await loginPageFixture.login(user.email, user.password);
expect(role).toBe(user.role);
});

test.afterAll(async ({ browser }) => {
await loginPageFixture.logout();
await page.close();
await browser.close();
});

test(`Context`, async () => {
const contextTree = page.getByTestId("contextTree");
await expect(contextTree).toBeVisible({
timeout: 30000 // it will take some time to load the Study Browser
});

const workspacesAndFoldersTreeItems = page.getByTestId("workspacesAndFoldersTreeItem");
const count = await workspacesAndFoldersTreeItems.count();
// at least two: My Workspace and Shared Workspaces
expect(count > 1).toBeTruthy();
});

test(`Tags`, async () => {
const tagsFilter = page.getByTestId("tagsFilter");
await expect(tagsFilter).toBeVisible({
timeout: 30000 // it will take some time to load the Study Browser
});

const tagFilterItems = page.getByTestId("tagFilterItem");
const count = await tagFilterItems.count();
// at least two and less than 6 (max five are shown)
expect(count > 1 && count < 6).toBeTruthy();
});
});
81 changes: 81 additions & 0 deletions tests/e2e-frontend/tests/studyBrowser/mainView.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/* eslint-disable no-undef */

const { test, expect } = require('@playwright/test');

import { LoginPage } from '../fixtures/loginPage';

import products from '../products.json';
import users from '../users.json';

const expectedElements = {
"osparc": {
"plusButton": {
"id": "newStudyBtn",
},
},
"s4l": {
"plusButton": {
"id": "startS4LButton",
},
},
"s4lacad": {
"plusButton": {
"id": "startS4LButton",
},
},
"s4llite": {
"plusButton": {
"id": "startS4LButton",
},
},
"tis": {
"plusButton": {
"id": "newStudyBtn",
},
},
"tiplite": {
"plusButton": {
"id": "newStudyBtn",
},
},
};

for (const product in products) {
if (product in users) {
const productUrl = products[product];
const productUsers = users[product];
for (const user of productUsers) {
// expected roles for users: "USER"
const role = "USER";
expect(user.role).toBe(role);

test.describe.serial(`Main View: ${product}`, () => {
let page = null;
let loginPageFixture = null;

test.beforeAll(async ({ browser }) => {
page = await browser.newPage();
loginPageFixture = new LoginPage(page, productUrl);
const role = await loginPageFixture.login(user.email, user.password);
expect(role).toBe(user.role);
});

test.afterAll(async ({ browser }) => {
await loginPageFixture.logout();
await page.close();
await browser.close();
});

test(`Plus button`, async () => {
expect(expectedElements[product]["plusButton"]).toBeDefined();

const plusButtonId = expectedElements[product]["plusButton"]["id"];
const plusButton = page.getByTestId(plusButtonId);
await expect(plusButton).toBeVisible({
timeout: 30000 // it will take some time to load the Study Browser
});
});
});
}
}
}
16 changes: 8 additions & 8 deletions tests/e2e-frontend/tests/userMenu/userMenuButtons.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const userMenuButtons = {
"userMenuThemeSwitcherBtn": true,
"userMenuAboutBtn": true,
"userMenuAboutProductBtn": true,
"userMenuLicenseBtn": true,
"userMenuAccessTIPBtn": false,
"userMenuLogoutBtn": true,
},
Expand All @@ -27,6 +28,7 @@ const userMenuButtons = {
"userMenuThemeSwitcherBtn": true,
"userMenuAboutBtn": true,
"userMenuAboutProductBtn": true,
"userMenuLicenseBtn": true,
"userMenuAccessTIPBtn": false,
"userMenuLogoutBtn": true,
},
Expand All @@ -38,6 +40,7 @@ const userMenuButtons = {
"userMenuThemeSwitcherBtn": true,
"userMenuAboutBtn": true,
"userMenuAboutProductBtn": true,
"userMenuLicenseBtn": true,
"userMenuAccessTIPBtn": false,
"userMenuLogoutBtn": true,
},
Expand All @@ -49,6 +52,7 @@ const userMenuButtons = {
"userMenuThemeSwitcherBtn": true,
"userMenuAboutBtn": true,
"userMenuAboutProductBtn": true,
"userMenuLicenseBtn": true,
"userMenuAccessTIPBtn": false,
"userMenuLogoutBtn": true,
},
Expand All @@ -60,6 +64,7 @@ const userMenuButtons = {
"userMenuThemeSwitcherBtn": true,
"userMenuAboutBtn": true,
"userMenuAboutProductBtn": true,
"userMenuLicenseBtn": true,
"userMenuAccessTIPBtn": false,
"userMenuLogoutBtn": true,
},
Expand All @@ -71,6 +76,7 @@ const userMenuButtons = {
"userMenuThemeSwitcherBtn": true,
"userMenuAboutBtn": true,
"userMenuAboutProductBtn": true,
"userMenuLicenseBtn": true,
"userMenuAccessTIPBtn": true,
"userMenuLogoutBtn": true,
},
Expand Down Expand Up @@ -108,15 +114,9 @@ for (const product in products) {

test.beforeAll(async ({ browser }) => {
page = await browser.newPage();

loginPageFixture = new LoginPage(page, productUrl);
await loginPageFixture.goto();

await loginPageFixture.login(user.email, user.password);

const response = await page.waitForResponse('**/me');
const meData = await response.json();
expect(meData["data"]["role"]).toBe(role);
const role = await loginPageFixture.login(user.email, user.password);
expect(role).toBe(user.role);
});

test.afterAll(async ({ browser }) => {
Expand Down
26 changes: 17 additions & 9 deletions tests/e2e-frontend/tests/userMenu/userMenuWindows.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,17 @@ import users from '../users.json';

const product = "osparc";
const productUrl = products[product];
const user = users[product];
const user = users[product][0];

test.describe.serial(`User Menu Windows: ${product}`, () => {
let page = null;
let loginPageFixture = null;

test.beforeAll(async ({ browser }) => {
page = await browser.newPage();

loginPageFixture = new LoginPage(page, productUrl);
await loginPageFixture.goto();

await loginPageFixture.login(user.email, user.password);

const response = await page.waitForResponse('**/me');
const meData = await response.json();
expect(meData["data"]["role"]).toBe(user.role);
const role = await loginPageFixture.login(user.email, user.password);
expect(role).toBe(user.role);
});

test.afterAll(async ({ browser }) => {
Expand All @@ -51,4 +45,18 @@ test.describe.serial(`User Menu Windows: ${product}`, () => {
// close window
await page.getByTestId("organizationsWindowCloseBtn").click();
});

test(`License pop up`, async () => {
// open user menu
await page.getByTestId("userMenuBtn").click();

// open license in new tab
await page.getByTestId("userMenuLicenseBtn").click();
const newTabPromise = page.waitForEvent("popup");
const newTab = await newTabPromise;
await newTab.waitForLoadState();

// close tab
await newTab.close();
});
});
2 changes: 1 addition & 1 deletion tests/e2e/utils/auto.js
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ async function openNode(page, pos) {
}

const nodeId = children[pos];
const childId = '[osparc-test-more="' + nodeId + '"]';
const childId = '[osparc-test-key="' + nodeId + '"]';
await utils.waitAndClick(page, childId);

return nodeId;
Expand Down
2 changes: 1 addition & 1 deletion tests/e2e/utils/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ async function getNodeTreeItemIDs(page) {
const children = [];
const nodeTreeItems = document.querySelectorAll(selector);
nodeTreeItems.forEach(nodeTreeItem => {
const nodeId = nodeTreeItem.getAttribute("osparc-test-more")
const nodeId = nodeTreeItem.getAttribute("osparc-test-key")
if (nodeId !== "root") {
children.push(nodeId);
}
Expand Down
Loading