diff --git a/e2e/actions/APS-cloud/identity.ts b/e2e/actions/APS-cloud/identity.ts new file mode 100644 index 0000000000..18a8755908 --- /dev/null +++ b/e2e/actions/APS-cloud/identity.ts @@ -0,0 +1,106 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ApiService } from '../APS-cloud/apiservice'; +import { Util } from '../../util/util'; + +export class Identity { + + api: ApiService = new ApiService(); + + constructor() { + } + + async init(username, password) { + await this.api.login(username, password); + } + + async createIdentityUser(username = Util.generateRandomString(5), password = Util.generateRandomString(5)) { + await this.createUser(username); + const user = await this.getUserInfoByUsername(username); + await this.resetPassword(user[0].id, password); + user[0].password = password; + return user; + } + + async deleteIdentityUser(userId) { + await this.deleteUser(userId); + } + + async createUser(username) { + const path = '/auth/admin/realms/springboot/users'; + const method = 'POST'; + const queryParams = {}, postBody = { + 'username': username, + 'firstName': username, + 'lastName': 'LastName', + 'enabled': true, + 'email': username + '@alfresco.com' + }; + const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + return data; + } + + async deleteUser(userId) { + const path = `/auth/admin/realms/springboot/users/${userId}`; + const method = 'DELETE'; + const queryParams = {}, postBody = { + }; + const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + return data; + } + + async getUserInfoByUsername(username) { + const path = `/auth/admin/realms/springboot/users`; + const method = 'GET'; + const queryParams = { 'username' : username }, postBody = {}; + + const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + return data; + } + + async resetPassword(id, password) { + const path = `/auth/admin/realms/springboot/users/${id}/reset-password`; + const method = 'PUT'; + const queryParams = {}, + postBody = {'type': 'password', 'value': password, 'temporary': false}; + + const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + return data; + } + + async getRoleByName(roleName) { + const path = `/auth/admin/realms/springboot/roles/${roleName}`; + const method = 'GET'; + const queryParams = {}, + postBody = {}; + + const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + return data; + } + + async assignRole(userId, roleId, roleName) { + const path = `/auth/admin/realms/springboot/users/${userId}/role-mappings/realm`; + const method = 'POST'; + const queryParams = {}, + postBody = [{'id': roleId, 'name': roleName}]; + + const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + return data; + } + +} diff --git a/e2e/core/user_info_component_cloud.e2e.ts b/e2e/core/user_info_component_cloud.e2e.ts new file mode 100644 index 0000000000..0df7236b02 --- /dev/null +++ b/e2e/core/user_info_component_cloud.e2e.ts @@ -0,0 +1,61 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { LoginSSOPage } from '../pages/adf/loginSSOPage'; +import { SettingsPage } from '../pages/adf/settingsPage'; +import TestConfig = require('../test.config'); +import { browser } from 'protractor'; +import { NavigationBarPage } from '../pages/adf/NavigationBarPage'; +import { UserInfoDialog } from '../pages/adf/dialog/userInfoDialog'; +import { Identity } from '../actions/APS-cloud/identity'; + +describe('User Info - SSO', () => { + + const settingsPage = new SettingsPage(); + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const userInfoDialog = new UserInfoDialog(); + const identityService: Identity = new Identity(); + const path = '/auth/realms/springboot'; + let silentLogin, identityUser; + + beforeAll(async () => { + await identityService.init(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + identityUser = await identityService.createIdentityUser(); + silentLogin = false; + settingsPage.setProviderBpmSso(TestConfig.adf.hostSso, TestConfig.adf.hostSso + path, silentLogin); + loginSSOPage.clickOnSSOButton(); + browser.ignoreSynchronization = true; + loginSSOPage.loginAPS(identityUser['0'].username, identityUser['0'].password); + }); + + afterAll (() => { + identityService.deleteIdentityUser(identityUser[0].id); + }); + + it('[C290066] Should display UserInfo when login using SSO', () => { + + navigationBarPage.navigateToProcessServicesCloudPage(); + navigationBarPage.clickUserProfile(); + expect(userInfoDialog.getSsoHeaderTitle()).toEqual(identityUser['0'].firstName + ' ' + identityUser['0'].lastName); + expect(userInfoDialog.getSsoTitle()).toEqual(identityUser['0'].firstName + ' ' + identityUser['0'].lastName); + expect(userInfoDialog.getSsoEmail()).toEqual(identityUser['0'].email); + userInfoDialog.closeUserProfile(); + + }); + +}); diff --git a/e2e/pages/adf/dialog/userInfoDialog.ts b/e2e/pages/adf/dialog/userInfoDialog.ts index f3fcd1ceb6..583631b56b 100644 --- a/e2e/pages/adf/dialog/userInfoDialog.ts +++ b/e2e/pages/adf/dialog/userInfoDialog.ts @@ -34,6 +34,9 @@ export class UserInfoDialog { apsImage = element(by.css('img[id="bpm-user-detail-image"]')); acsImage = element(by.css('img[id="ecm-user-detail-image"]')); initialImage = element.all(by.css('div[id="user-initials-image"]')).first(); + userInfoSsoHeaderTitle = this.dialog.element(by.css('div[id="identity-username"]')); + userInfoSsoTitle = element(by.css('.adf-userinfo__detail-title')); + ssoEmail = element(by.id('identity-email')); dialogIsDisplayed() { Util.waitUntilElementIsVisible(this.dialog); @@ -103,6 +106,21 @@ export class UserInfoDialog { return this.processTenant.getText(); } + getSsoHeaderTitle () { + Util.waitUntilElementIsVisible(this.userInfoSsoHeaderTitle); + return this.userInfoSsoHeaderTitle.getText(); + } + + getSsoTitle() { + Util.waitUntilElementIsVisible(this.userInfoSsoTitle); + return this.userInfoSsoTitle.getText(); + } + + getSsoEmail() { + Util.waitUntilElementIsVisible(this.ssoEmail); + return this.ssoEmail.getText(); + } + closeUserProfile() { Util.waitUntilElementIsVisible(this.dialog); browser.actions().sendKeys(protractor.Key.ESCAPE).perform();