From 315ccfb32ed44e7e70d3dc5fdae363d5f850d739 Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Wed, 12 May 2021 17:32:22 -0400 Subject: [PATCH 1/5] fix: Don't allow non-admin users to see /Users page --- .../packages/base-raas-ui/src/parts/users/User.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js b/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js index eb82064dab..1b7f5d99cc 100644 --- a/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js +++ b/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js @@ -15,7 +15,7 @@ import React from 'react'; import { Tab, Segment, Container } from 'semantic-ui-react'; -import { observer } from 'mobx-react'; +import { inject, observer } from 'mobx-react'; import { withRouter } from 'react-router-dom'; import RolesList from './RolesList'; import UsersList from './UsersList'; @@ -28,6 +28,9 @@ const panes = [ // eslint-disable-next-line react/prefer-stateless-function class User extends React.Component { render() { + if (!this.props.userStore.cloneUser.isAdmin) { + this.props.history.push('/'); + } return ( @@ -38,4 +41,6 @@ class User extends React.Component { } } -export default withRouter(observer(User)); +// export default withRouter(observer(User)); + +export default inject('userStore')(withRouter(observer(User))); From b5963e47c5d21bc4b2ad3c92671126696a81087c Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Thu, 13 May 2021 12:43:56 -0400 Subject: [PATCH 2/5] Add e2e tests for page url --- .../base-raas-ui/src/parts/users/User.js | 2 +- main/end-to-end-tests/README.md | 1 + main/end-to-end-tests/cypress.json | 2 ++ .../cypress/integration/login.spec.js | 2 +- .../cypress/integration/page-routing.spec.js | 14 ++++++++++++ .../cypress/integration/workspaces.spec.js | 2 +- .../cypress/support/commands.js | 22 +++++++++++++------ 7 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 main/end-to-end-tests/cypress/integration/page-routing.spec.js diff --git a/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js b/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js index 1b7f5d99cc..deaef2964c 100644 --- a/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js +++ b/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js @@ -34,7 +34,7 @@ class User extends React.Component { return ( - + ); diff --git a/main/end-to-end-tests/README.md b/main/end-to-end-tests/README.md index 58171a64f8..d9a156e597 100644 --- a/main/end-to-end-tests/README.md +++ b/main/end-to-end-tests/README.md @@ -11,6 +11,7 @@ In this section we will discuss how you can run these tests from your desktop. To run the E2E tests, you will need the following items: - A Service Workbench environment setup with Service Catalog +- Username and password of an admin for the Service Workbench environment - Username and password of a researcher for the Service Workbench environment - A project set up for that researcher that can launch EC2 workspaces and Sagemaker workspaces - A configured EC2 workspace diff --git a/main/end-to-end-tests/cypress.json b/main/end-to-end-tests/cypress.json index d3ab611916..c43229ccd0 100644 --- a/main/end-to-end-tests/cypress.json +++ b/main/end-to-end-tests/cypress.json @@ -6,6 +6,8 @@ "env": { "researcherEmail": "", "researcherPassword": "", + "adminEmail": "", + "adminPassword": "", "isCognitoEnabled": false, "workspaces": { "sagemaker": { diff --git a/main/end-to-end-tests/cypress/integration/login.spec.js b/main/end-to-end-tests/cypress/integration/login.spec.js index d6a6cffbde..90430dbb59 100644 --- a/main/end-to-end-tests/cypress/integration/login.spec.js +++ b/main/end-to-end-tests/cypress/integration/login.spec.js @@ -14,6 +14,6 @@ */ describe('Login', () => { it('should login as researcher successfully', () => { - cy.login(); + cy.login('researcher'); }); }); diff --git a/main/end-to-end-tests/cypress/integration/page-routing.spec.js b/main/end-to-end-tests/cypress/integration/page-routing.spec.js new file mode 100644 index 0000000000..4d8269b495 --- /dev/null +++ b/main/end-to-end-tests/cypress/integration/page-routing.spec.js @@ -0,0 +1,14 @@ +describe('page routing', () => { + describe('should navigate to /users page correctly', () => { + it('should redirect researchers trying to access /users page', () => { + cy.login('researcher'); + cy.visit('/users'); + cy.get("div[data-testid='page-title'] div").contains('Dashboard'); + }); + it('should allow admin to access /users page', () => { + cy.login('admin'); + cy.visit('/users'); + cy.get("div[data-testid='users-table']"); + }); + }); +}); diff --git a/main/end-to-end-tests/cypress/integration/workspaces.spec.js b/main/end-to-end-tests/cypress/integration/workspaces.spec.js index ca383e753c..d35ccd1e6b 100644 --- a/main/end-to-end-tests/cypress/integration/workspaces.spec.js +++ b/main/end-to-end-tests/cypress/integration/workspaces.spec.js @@ -15,7 +15,7 @@ describe('Launch a new sagemaker workspace', () => { before(() => { - cy.login(); + cy.login('researcher'); navigateToWorkspaces(); terminatePrexistingWorkspaces(); }); diff --git a/main/end-to-end-tests/cypress/support/commands.js b/main/end-to-end-tests/cypress/support/commands.js index 358f594921..7a1b2f84eb 100644 --- a/main/end-to-end-tests/cypress/support/commands.js +++ b/main/end-to-end-tests/cypress/support/commands.js @@ -44,11 +44,19 @@ // TODO: If an environment is configured with an Identity Provider, the login steps needs to select an // identity provider -Cypress.Commands.add('login', () => { - const loginInfo = { - researcherEmail: Cypress.env('researcherEmail'), - researcherPassword: Cypress.env('researcherPassword'), - }; +Cypress.Commands.add('login', role => { + let loginInfo = {}; + if (role === 'researcher') { + loginInfo = { + email: Cypress.env('researcherEmail'), + password: Cypress.env('researcherPassword'), + }; + } else if (role === 'admin') { + loginInfo = { + email: Cypress.env('adminEmail'), + password: Cypress.env('adminPassword'), + }; + } const isCognitoEnabled = Cypress.env('isCognitoEnabled'); if (isCognitoEnabled) { @@ -56,8 +64,8 @@ Cypress.Commands.add('login', () => { } else { cy.visit('/'); } - cy.get("div[data-testid='username'] input").type(loginInfo.researcherEmail); - cy.get("div[data-testid='password'] input").type(loginInfo.researcherPassword); + cy.get("div[data-testid='username'] input").type(loginInfo.email); + cy.get("div[data-testid='password'] input").type(loginInfo.password); cy.get("button[data-testid='login']").click(); cy.get("div[data-testid='page-title'] div").contains('Dashboard'); }); From 7b5f257d946e85992c1af48bfe107c91e78d1e7a Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Thu, 13 May 2021 13:05:15 -0400 Subject: [PATCH 3/5] Remove unnecessary comment --- .../packages/base-raas-ui/src/parts/users/User.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js b/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js index deaef2964c..ca60601825 100644 --- a/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js +++ b/addons/addon-base-raas-ui/packages/base-raas-ui/src/parts/users/User.js @@ -41,6 +41,4 @@ class User extends React.Component { } } -// export default withRouter(observer(User)); - export default inject('userStore')(withRouter(observer(User))); From 2598323b7768473f38f1515b208c3b159651358b Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Thu, 13 May 2021 16:04:19 -0400 Subject: [PATCH 4/5] Trigger notification From 3006e683c7a380bd04be71d0b5f6cb52a6dae784 Mon Sep 17 00:00:00 2001 From: Tim Nguyen Date: Mon, 17 May 2021 17:10:51 -0400 Subject: [PATCH 5/5] Pass in adminEmail and adminPassword to cypress tests --- .github/workflows/deploy-integ.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-integ.yml b/.github/workflows/deploy-integ.yml index 1f61d97c3f..ef2568a9c0 100644 --- a/.github/workflows/deploy-integ.yml +++ b/.github/workflows/deploy-integ.yml @@ -102,6 +102,8 @@ jobs: CYPRESS_BASE_URL: ${{ secrets.CYPRESS_BASE_URL}} CYPRESS_researcherEmail: ${{ secrets.CYPRESS_RESEARCHER_EMAIL}} CYPRESS_researcherPassword: ${{ secrets.CYPRESS_RESEARCHER_PASSWORD}} + CYPRESS_adminEmail: ${{ secrets.CYPRESS_ADMIN_EMAIL}} + CYPRESS_adminPassword: ${{ secrets.CYPRESS_ADMIN_PASSWORD}} merge-develop-to-mainline: name: Merge develop to mainline runs-on: ubuntu-18.04