mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
ACS-8610: cleanup demo shell protractor tests (#10148)
This commit is contained in:
@@ -46,8 +46,6 @@
|
||||
"configDir": "lib/content-services/.storybook",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
@@ -69,8 +67,6 @@
|
||||
"outputDir": "dist/storybook/content-services",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
|
@@ -43,8 +43,7 @@
|
||||
"codeCoverage": true,
|
||||
"stylePreprocessorOptions": {
|
||||
"includePaths": ["lib", "lib/core/src/lib"]
|
||||
},
|
||||
"styles": ["demo-shell/src/styles.scss"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
@@ -72,8 +71,6 @@
|
||||
"configDir": "lib/core/.storybook",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
@@ -95,8 +92,6 @@
|
||||
"outputDir": "dist/storybook/core",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css",
|
||||
"lib/core/src/lib/styles/prebuilt/adf-blue-orange.scss"
|
||||
|
@@ -46,8 +46,6 @@
|
||||
"configDir": "lib/process-services-cloud/.storybook",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
@@ -69,8 +67,6 @@
|
||||
"outputDir": "dist/storybook/process-services-cloud",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
|
@@ -1,29 +1,6 @@
|
||||
@import 'styles/flex';
|
||||
@import 'styles/mat-selectors';
|
||||
|
||||
/* stylelint-disable scss/no-global-function-names */
|
||||
@mixin adf-line-clamp($line-height: 1.25, $lines: 3) {
|
||||
position: relative;
|
||||
line-height: $line-height;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
/* stylelint-disable */
|
||||
@supports (-webkit-line-clamp: 1) {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: $lines;
|
||||
height: calc(0.99em * #{$line-height} * #{$lines});
|
||||
}
|
||||
|
||||
@supports not (-webkit-line-clamp: 1) {
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
/* stylelint-enable */
|
||||
}
|
||||
|
||||
.adf-app-list-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -128,7 +105,6 @@ $tile-themes: (
|
||||
z-index: 9999;
|
||||
|
||||
h1 {
|
||||
color: white;
|
||||
width: 80%;
|
||||
font-size: var(--theme-headline-font-size);
|
||||
margin: 0;
|
||||
@@ -140,13 +116,16 @@ $tile-themes: (
|
||||
}
|
||||
|
||||
&-subtitle {
|
||||
color: white;
|
||||
z-index: 9999;
|
||||
padding: 16px;
|
||||
flex: 1 0 auto;
|
||||
|
||||
.adf-line-clamp {
|
||||
@include adf-line-clamp(1.25, 3);
|
||||
position: relative;
|
||||
line-height: 1.25;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -276,4 +276,30 @@ describe('AppsListComponent', () => {
|
||||
expect(title[0].nativeElement.innerText).toBe('No Apps');
|
||||
});
|
||||
});
|
||||
|
||||
describe('getAppName', () => {
|
||||
it('should return the default app name when app is the default app', () => {
|
||||
const appDataMock: AppDefinitionRepresentation = {
|
||||
defaultAppId: 'tasks',
|
||||
name: null
|
||||
};
|
||||
expect(component.getAppName(appDataMock)).toBe('ADF_TASK_LIST.APPS.TASK_APP_NAME');
|
||||
});
|
||||
|
||||
it('should return the app name when it is provided', () => {
|
||||
const appDataMock: AppDefinitionRepresentation = {
|
||||
defaultAppId: 'uiu',
|
||||
name: 'the-name'
|
||||
};
|
||||
expect(component.getAppName(appDataMock)).toBe('the-name');
|
||||
});
|
||||
|
||||
it('should return the defaultAppId when name is not provided and app is not the default app', () => {
|
||||
const appDataMock: AppDefinitionRepresentation = {
|
||||
defaultAppId: 'uiu',
|
||||
name: null
|
||||
};
|
||||
expect(component.getAppName(appDataMock)).toBe('uiu');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -117,7 +117,7 @@ export class AppsListComponent implements OnInit, AfterContentInit, OnDestroy {
|
||||
}
|
||||
|
||||
getAppName(app: AppDefinitionRepresentation): string {
|
||||
return this.isDefaultApp(app) ? DEFAULT_TASKS_APP_NAME : app.name;
|
||||
return this.isDefaultApp(app) ? DEFAULT_TASKS_APP_NAME : app.name || app.defaultAppId;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -15,8 +15,6 @@
|
||||
"includePaths": ["lib", "lib/core/src/lib"]
|
||||
},
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
]
|
||||
@@ -35,8 +33,6 @@
|
||||
"outputDir": "dist/storybook/stories",
|
||||
"compodoc": false,
|
||||
"styles": [
|
||||
"demo-shell/src/styles.scss",
|
||||
"demo-shell/src/custom-style-dev.scss",
|
||||
"node_modules/cropperjs/dist/cropper.min.css",
|
||||
"node_modules/pdfjs-dist/web/pdf_viewer.css"
|
||||
],
|
||||
|
@@ -1,80 +1,3 @@
|
||||
# Alfresco Testing Library
|
||||
|
||||
Contains the reusable pages for e2e tests
|
||||
|
||||
## Run e2e against a remote env using the .env.cloud file
|
||||
Create a file `.env.cloud` under the `e2e` folder
|
||||
```
|
||||
HOST_BPM="https://gateway.example.com"
|
||||
HOST_SSO="https://identity.example.com/auth/realms/alfresco"
|
||||
URL_HOST_IDENTITY="https://identity.example.com/auth/admin/realms/alfresco"
|
||||
IDENTITY_USERNAME_ADF="username"
|
||||
IDENTITY_PASSWORD_ADF="password"
|
||||
```
|
||||
|
||||
### How can I run the *cloud* e2e against a *remote* env with *chrome headless* ?
|
||||
Add to `.env.cloud` and run `./scripts/test-e2e-lib.sh`
|
||||
```
|
||||
FOLDER="process-services-cloud"
|
||||
URL_HOST_ADF="http://myadf.example.com"
|
||||
...
|
||||
```
|
||||
or
|
||||
`./scripts/test-e2e-lib.sh -host http://myadf.example.com -f process-services-cloud`
|
||||
|
||||
### How can I run the *cloud* e2e against a *remote* env with *full chrome* ?
|
||||
Add to `.env.cloud` and run `./scripts/test-e2e-lib.sh -env .env.cloud`
|
||||
```
|
||||
BROWSER_RUN=true
|
||||
FOLDER="process-services-cloud"
|
||||
URL_HOST_ADF="http://myadf.example.co"
|
||||
...
|
||||
```
|
||||
or
|
||||
`./scripts/test-e2e-lib.sh -host http://myadf.example.com -f process-services-cloud -b`
|
||||
|
||||
### How can I run specific *specs* agains a *remote* env?
|
||||
Add to `.env.cloud` and run `./scripts/test-e2e-lib.sh -env .env.cloud`
|
||||
```
|
||||
LIST_SPECS="process-services-cloud/apps-section-cloud.e2e.ts,process-services-cloud/task-filters-cloud.e2e.ts"
|
||||
URL_HOST_ADF="http://myadf.example.co"
|
||||
...
|
||||
```
|
||||
or `./scripts/test-e2e-lib.sh -host http://myadf.example.com -s process-services-cloud/apps-section-cloud.e2e.ts,process-services-cloud/task-filters-cloud.e2e.ts`
|
||||
|
||||
## Run e2e against a local env (use dist) using the .env.cloud file
|
||||
Create a file `.env.cloud` under the `e2e` folder
|
||||
```
|
||||
HOST_BPM="https://gateway.example.com"
|
||||
HOST_SSO="https://identity.example.com/auth/realms/alfresco"
|
||||
URL_HOST_IDENTITY="https://identity.example.com/auth/admin/realms/alfresco"
|
||||
IDENTITY_USERNAME_ADF="username"
|
||||
IDENTITY_PASSWORD_ADF="password"
|
||||
```
|
||||
### How can I run the *cloud* e2e against a *local* env with *chrome headless* ?
|
||||
Add to `.env.cloud` and run `./scripts/test-e2e-lib.sh -ud -env .env.cloud`
|
||||
```
|
||||
FOLDER="process-services-cloud"
|
||||
URL_HOST_ADF="http://localhost:4200"
|
||||
...
|
||||
```
|
||||
or `./scripts/test-e2e-lib.sh -ud -host http://localhost:4200 -f process-services-cloud `
|
||||
|
||||
### How can I run the *cloud* e2e against a *local* env with *full chrome* ?
|
||||
Add to `.env.cloud` and run `./scripts/test-e2e-lib.sh -ud -env .env.cloud`
|
||||
```
|
||||
BROWSER_RUN=true
|
||||
FOLDER="process-services-cloud"
|
||||
URL_HOST_ADF="http://localhost:4200"
|
||||
...
|
||||
```
|
||||
or `./scripts/test-e2e-lib.sh -ud -host http://localhost:4200 -f process-services-cloud -b`
|
||||
|
||||
### How can I run specific *specs* agains a *local* env?
|
||||
Add to `.env.cloud` and run `./scripts/test-e2e-lib.sh -ud -env .env.cloud`
|
||||
```
|
||||
LIST_SPECS="process-services-cloud/apps-section-cloud.e2e.ts,process-services-cloud/task-filters-cloud.e2e.ts"
|
||||
URL_HOST_ADF="http://localhost:4200"
|
||||
...
|
||||
```
|
||||
or `./scripts/test-e2e-lib.sh -ud -host http://localhost:4200 -s process-services-cloud/apps-section-cloud.e2e.ts,process-services-cloud/task-filters-cloud.e2e.ts`
|
||||
> This library is deprecated and will be removed in a future release.
|
||||
|
@@ -1,47 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { browser, $ } from 'protractor';
|
||||
import { BrowserVisibility } from '../utils/browser-visibility';
|
||||
import { BrowserActions } from '../utils/browser-actions';
|
||||
|
||||
export class ConfigEditorPage {
|
||||
|
||||
textField = $('#adf-form-config-editor div.overflow-guard > textarea');
|
||||
|
||||
async enterConfiguration(text: string): Promise<void> {
|
||||
await BrowserActions.clearSendKeys(this.textField, text);
|
||||
}
|
||||
|
||||
async clickSaveButton(): Promise<void> {
|
||||
const saveButton = $('#app-form-config-save');
|
||||
await BrowserActions.click(saveButton);
|
||||
}
|
||||
|
||||
async clickClearButton(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.textField);
|
||||
const clearButton = $('#app-form-config-clear');
|
||||
await BrowserActions.click(clearButton);
|
||||
}
|
||||
|
||||
async enterBulkConfiguration(text): Promise<void> {
|
||||
await this.clickClearButton();
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.textField);
|
||||
await browser.executeScript('this.monaco.editor.getModels()[0].setValue(`' + JSON.stringify(text) + '`)');
|
||||
await this.clickSaveButton();
|
||||
}
|
||||
}
|
@@ -18,7 +18,6 @@
|
||||
export * from './bread-crumb.page';
|
||||
export * from './header.page';
|
||||
export * from './user-info.page';
|
||||
export * from './settings.page';
|
||||
export * from './login.page';
|
||||
|
||||
export { LoginPage as LoginSSOPage } from './login.page';
|
||||
@@ -29,7 +28,6 @@ export * from './form/public-api';
|
||||
export * from './material/public-api';
|
||||
export * from './card-view/public-api';
|
||||
export * from './viewer.page';
|
||||
export * from './config-editor-page';
|
||||
export * from './snackbar.page';
|
||||
export * from './data-table/public-api';
|
||||
export * from './context-menu.page';
|
||||
|
@@ -1,165 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { $, browser, by, element } from 'protractor';
|
||||
import { BrowserVisibility } from '../utils/browser-visibility';
|
||||
import { BrowserActions } from '../utils/browser-actions';
|
||||
import { DropdownPage } from '../../core/pages/material/dropdown.page';
|
||||
import { materialLocators } from './public-api';
|
||||
|
||||
export class SettingsPage {
|
||||
settingsURL: string = browser.baseUrl + '/settings';
|
||||
ecmText = $('input[data-automation-id*="ecmHost"]');
|
||||
clientIdText = $('input[id="clientId"]');
|
||||
authHostText = $('input[id="oauthHost"]');
|
||||
logoutUrlText = $('input[id="logout-url"]');
|
||||
identityHostText = $('input[id="identityHost"]');
|
||||
ssoRadioButton = element(by.cssContainingText(`[id*="${materialLocators.Radio.root}"]`, 'SSO'));
|
||||
silentLoginToggleLabel = $(`${materialLocators.Slide.toggle.root}[formcontrolname="silentLogin"] label`);
|
||||
silentLoginToggleElement = $(`${materialLocators.Slide.toggle.root}[formcontrolname="silentLogin"]`);
|
||||
implicitFlowLabel = $(`${materialLocators.Slide.toggle.root}[formcontrolname="implicitFlow"] label`);
|
||||
implicitFlowElement = $(`${materialLocators.Slide.toggle.root}[formcontrolname="implicitFlow"]`);
|
||||
codeFlowElement = $(`${materialLocators.Slide.toggle.root}[formcontrolname="codeFlow"]`);
|
||||
applyButton = $('button[data-automation-id="settings-apply-button"]');
|
||||
providerDropdown = new DropdownPage($(`${materialLocators.Select.root}[id="adf-provider-selector"]`));
|
||||
|
||||
async goToSettingsPage(): Promise<void> {
|
||||
let currentUrl;
|
||||
|
||||
try {
|
||||
currentUrl = await browser.getCurrentUrl();
|
||||
} catch (e) {}
|
||||
|
||||
if (!currentUrl || currentUrl.indexOf(this.settingsURL) === -1) {
|
||||
await browser.get(this.settingsURL);
|
||||
}
|
||||
await this.providerDropdown.checkDropdownIsVisible();
|
||||
}
|
||||
|
||||
async setProvider(option): Promise<void> {
|
||||
await this.providerDropdown.selectDropdownOption(option);
|
||||
await this.providerDropdown.checkOptionIsSelected(option);
|
||||
}
|
||||
|
||||
async clickSsoRadioButton() {
|
||||
await BrowserActions.click(this.ssoRadioButton);
|
||||
}
|
||||
|
||||
async setProviderEcmSso(
|
||||
contentServiceURL,
|
||||
authHost,
|
||||
identityHost,
|
||||
silentLogin = true,
|
||||
implicitFlow = true,
|
||||
clientId?: string,
|
||||
logoutUrl: string = '/logout',
|
||||
codeFlow = true
|
||||
) {
|
||||
await this.goToSettingsPage();
|
||||
await this.setProvider('ECM');
|
||||
await this.clickSsoRadioButton();
|
||||
await this.setContentServicesURL(contentServiceURL);
|
||||
await this.setAuthHost(authHost);
|
||||
await this.setIdentityHost(identityHost);
|
||||
await this.setSilentLogin(silentLogin);
|
||||
await this.setImplicitFlow(implicitFlow);
|
||||
await this.setCodeFlow(codeFlow);
|
||||
await this.setClientId(clientId);
|
||||
await this.setLogoutUrl(logoutUrl);
|
||||
await this.clickApply();
|
||||
await browser.sleep(1000);
|
||||
}
|
||||
|
||||
async setProviderEcmSsoWithoutCodeFlow(
|
||||
contentServiceURL,
|
||||
authHost,
|
||||
identityHost,
|
||||
silentLogin = true,
|
||||
implicitFlow = true,
|
||||
clientId?: string,
|
||||
logoutUrl: string = '/logout'
|
||||
) {
|
||||
await this.goToSettingsPage();
|
||||
await this.setProvider('ECM');
|
||||
await this.clickSsoRadioButton();
|
||||
await this.setContentServicesURL(contentServiceURL);
|
||||
await this.setAuthHost(authHost);
|
||||
await this.setIdentityHost(identityHost);
|
||||
await this.setSilentLogin(silentLogin);
|
||||
await this.setCodeFlow(false);
|
||||
await this.setImplicitFlow(implicitFlow);
|
||||
await this.setClientId(clientId);
|
||||
await this.setLogoutUrl(logoutUrl);
|
||||
await this.clickApply();
|
||||
await browser.sleep(1000);
|
||||
}
|
||||
|
||||
async setLogoutUrl(logoutUrl) {
|
||||
await BrowserVisibility.waitUntilElementIsPresent(this.logoutUrlText);
|
||||
await BrowserActions.clearSendKeys(this.logoutUrlText, logoutUrl);
|
||||
}
|
||||
|
||||
async setClientId(clientId: string = browser.params.testConfig.appConfig.oauth2.clientId) {
|
||||
await BrowserActions.clearSendKeys(this.clientIdText, clientId);
|
||||
}
|
||||
|
||||
async setContentServicesURL(contentServiceURL) {
|
||||
await BrowserActions.clearSendKeys(this.ecmText, contentServiceURL);
|
||||
}
|
||||
|
||||
async setAuthHost(authHostURL) {
|
||||
await BrowserActions.clearSendKeys(this.authHostText, authHostURL);
|
||||
}
|
||||
|
||||
async setIdentityHost(identityHost) {
|
||||
await BrowserActions.clearSendKeys(this.identityHostText, identityHost);
|
||||
}
|
||||
|
||||
async clickApply() {
|
||||
await BrowserActions.click(this.applyButton);
|
||||
}
|
||||
|
||||
async setSilentLogin(enableToggle) {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.silentLoginToggleElement);
|
||||
|
||||
const isChecked = (await BrowserActions.getAttribute(this.silentLoginToggleElement, 'class')).includes(materialLocators.Slide.toggle.checked);
|
||||
|
||||
if ((isChecked && !enableToggle) || (!isChecked && enableToggle)) {
|
||||
await BrowserActions.click(this.silentLoginToggleLabel);
|
||||
}
|
||||
}
|
||||
|
||||
async setImplicitFlow(enableToggle) {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.implicitFlowElement);
|
||||
|
||||
const isChecked = (await BrowserActions.getAttribute(this.implicitFlowElement, 'class')).includes(materialLocators.Slide.toggle.checked);
|
||||
|
||||
if ((isChecked && !enableToggle) || (!isChecked && enableToggle)) {
|
||||
await BrowserActions.click(this.implicitFlowLabel);
|
||||
}
|
||||
}
|
||||
|
||||
async setCodeFlow(enableToggle) {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.codeFlowElement);
|
||||
|
||||
const isChecked = (await BrowserActions.getAttribute(this.codeFlowElement, 'class')).includes(materialLocators.Checked.root);
|
||||
|
||||
if ((isChecked && !enableToggle) || (!isChecked && enableToggle)) {
|
||||
await BrowserActions.click(this.codeFlowElement);
|
||||
}
|
||||
}
|
||||
}
|
@@ -21,10 +21,7 @@ import { BrowserActions } from '../../core/utils/browser-actions';
|
||||
import { materialLocators } from '../../public-api';
|
||||
|
||||
export class AppListCloudPage {
|
||||
|
||||
apsAppsContainer = $('adf-cloud-app-list');
|
||||
allApps = $$('adf-cloud-app-details');
|
||||
nameOfAllApps = $$('adf-cloud-app-details div[class*="item-card-title"] h1');
|
||||
firstApp = $$('adf-cloud-app-details div[class*="item-card-title"] h1').first();
|
||||
|
||||
getAppNameLocatorByAppName = (appName: string): ElementFinder => $(`${materialLocators.Card.root}[title="${appName}"]`);
|
||||
@@ -38,17 +35,8 @@ export class AppListCloudPage {
|
||||
await BrowserActions.clickExecuteScript(`${materialLocators.Card.root}[title="` + applicationName + `"]`);
|
||||
}
|
||||
|
||||
async countAllApps(): Promise<number> {
|
||||
return this.allApps.count();
|
||||
}
|
||||
|
||||
async getNameOfTheApplications(): Promise<string> {
|
||||
return BrowserActions.getArrayText(this.nameOfAllApps);
|
||||
}
|
||||
|
||||
async checkAppIsDisplayed(applicationName: string): Promise<void> {
|
||||
const app = this.getAppNameLocatorByAppName(applicationName);
|
||||
await BrowserVisibility.waitUntilElementIsVisible(app);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,48 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { $$, $ } from 'protractor';
|
||||
import { BrowserVisibility } from '../../core/utils/browser-visibility';
|
||||
import { BrowserActions } from '../../core/utils/browser-actions';
|
||||
import { ConfigEditorPage } from '../../core/pages/config-editor-page';
|
||||
import { materialLocators } from '../../public-api';
|
||||
|
||||
export class FormCloudComponentPage {
|
||||
|
||||
formCloudEditor = $$(`${materialLocators.Tab.list} ${materialLocators.Tab.label.class}`).get(1);
|
||||
formCloudRender = $$(`${materialLocators.Tab.list} ${materialLocators.Tab.label.class}`).get(0);
|
||||
|
||||
configEditorPage = new ConfigEditorPage();
|
||||
|
||||
async goToEditor(): Promise<void> {
|
||||
await BrowserActions.click(this.formCloudEditor);
|
||||
}
|
||||
|
||||
async goToRenderedForm(): Promise<void> {
|
||||
await BrowserActions.click(this.formCloudRender);
|
||||
}
|
||||
|
||||
async setConfigToEditor(text): Promise<void> {
|
||||
const configEditor = $('#adf-form-config-editor');
|
||||
const form = $('adf-cloud-form');
|
||||
await this.goToEditor();
|
||||
await BrowserVisibility.waitUntilElementIsVisible(configEditor);
|
||||
await this.configEditorPage.enterBulkConfiguration(text);
|
||||
await this.goToRenderedForm();
|
||||
await BrowserVisibility.waitUntilElementIsVisible(form);
|
||||
}
|
||||
}
|
@@ -28,6 +28,5 @@ export * from './task-filters-cloud-component.page';
|
||||
export * from './task-list-cloud-component.page';
|
||||
export * from './start-process-cloud-component.page';
|
||||
export * from './task-form-cloud-component.page';
|
||||
export * from './form-cloud-component.page';
|
||||
export * from './dialog/public-api';
|
||||
export * from './form/public-api';
|
||||
|
@@ -1,83 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { $ } from 'protractor';
|
||||
import { FiltersPage } from './filters.page';
|
||||
import { materialLocators } from '../../public-api';
|
||||
|
||||
export class ProcessFiltersPage {
|
||||
defaultProcessFilters = {
|
||||
running: 'Running',
|
||||
completed: 'Completed',
|
||||
all: 'All'
|
||||
};
|
||||
|
||||
filtersPage = new FiltersPage();
|
||||
|
||||
runningFilter = $('button[data-automation-id="Running_filter"]');
|
||||
completedFilter = $('button[data-automation-id="Completed_filter"]');
|
||||
allFilter = $('button[data-automation-id="All_filter"]');
|
||||
accordionMenu = $(`.app-processes-menu ${materialLocators.Accordion.root}`);
|
||||
|
||||
async clickRunningFilterButton(): Promise<void> {
|
||||
await this.filtersPage.clickFilterButton(this.runningFilter);
|
||||
}
|
||||
|
||||
async clickCompletedFilterButton(): Promise<void> {
|
||||
await this.filtersPage.clickFilterButton(this.completedFilter);
|
||||
}
|
||||
|
||||
async clickAllFilterButton(): Promise<void> {
|
||||
await this.filtersPage.clickFilterButton(this.allFilter);
|
||||
}
|
||||
|
||||
async isRunningFilterHighlighted(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterHighlighted(this.defaultProcessFilters.running);
|
||||
}
|
||||
|
||||
async isRunningFilterNotHighlighted(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterNotHighlighted(this.defaultProcessFilters.running);
|
||||
}
|
||||
|
||||
async isCompletedFilterHighlighted(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterHighlighted(this.defaultProcessFilters.completed);
|
||||
}
|
||||
|
||||
async isCompletedFilterNotHighlighted(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterNotHighlighted(this.defaultProcessFilters.completed);
|
||||
}
|
||||
|
||||
async isAllFilterHighlighted(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterHighlighted(this.defaultProcessFilters.all);
|
||||
}
|
||||
|
||||
async isAllFilterNotHighlighted(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterNotHighlighted(this.defaultProcessFilters.all);
|
||||
}
|
||||
|
||||
async isRunningFilterDisplayed(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterDisplayed(this.defaultProcessFilters.running);
|
||||
}
|
||||
|
||||
async isCompletedFilterDisplayed(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterDisplayed(this.defaultProcessFilters.completed);
|
||||
}
|
||||
|
||||
async isAllFilterDisplayed(): Promise<boolean> {
|
||||
return this.filtersPage.isFilterDisplayed(this.defaultProcessFilters.all);
|
||||
}
|
||||
}
|
@@ -1,49 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { BrowserVisibility } from '../../core/utils/browser-visibility';
|
||||
import { by, $ } from 'protractor';
|
||||
import { BrowserActions } from '../../core/utils/browser-actions';
|
||||
import { materialLocators } from '../../public-api';
|
||||
|
||||
export class ProcessInstanceTasksPage {
|
||||
|
||||
startProcessDialog = $('#adf-start-process-dialog');
|
||||
title = this.startProcessDialog.$(`h4${materialLocators.Dialog.title}`);
|
||||
closeButton = this.startProcessDialog.element(by.cssContainingText(`div.adf-start-process-dialog-actions button span`, 'Close'));
|
||||
startForm = $('div[data-automation-id="start-form"]');
|
||||
|
||||
async clickOnStartForm(): Promise<void> {
|
||||
await BrowserActions.click(this.startForm);
|
||||
}
|
||||
|
||||
async checkStartProcessDialogIsDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.startProcessDialog);
|
||||
}
|
||||
|
||||
async getTitle(): Promise<string> {
|
||||
return BrowserActions.getText(this.title);
|
||||
}
|
||||
|
||||
async clickCloseButton(): Promise<void> {
|
||||
await BrowserActions.click(this.closeButton);
|
||||
}
|
||||
|
||||
async checkStartProcessDialogIsNotDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsNotVisible(this.startProcessDialog);
|
||||
}
|
||||
}
|
@@ -16,11 +16,8 @@
|
||||
*/
|
||||
|
||||
export * from './filters.page';
|
||||
export * from './process-filters.page';
|
||||
export * from './process-list.page';
|
||||
export * from './task-list.page';
|
||||
export * from './task-filters.page';
|
||||
export * from './process-instance-tasks.page';
|
||||
export * from './process-instance-header.page';
|
||||
export * from './start-process.page';
|
||||
export * from './task-form.page';
|
||||
|
@@ -35,9 +35,7 @@ export class StartProcessPage {
|
||||
noProcess = $('.adf-empty-content__title');
|
||||
processDefinition = $('input[id="processDefinitionName"]');
|
||||
processDefinitionOptionsPanel = $(`div[class*="${materialLocators.Autocomplete.panel.root}"]`);
|
||||
|
||||
processDefinitionDropdown = new DropdownPage($('#adf-select-process-dropdown'));
|
||||
applicationDropdown = new DropdownPage($(`[data-automation-id*="start-process-app"] ${materialLocators.Select.arrow.class}`));
|
||||
|
||||
async checkNoProcessMessage(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.noProcess);
|
||||
@@ -83,11 +81,6 @@ export class StartProcessPage {
|
||||
}
|
||||
}
|
||||
|
||||
async selectFromApplicationDropdown(name): Promise<void> {
|
||||
await this.applicationDropdown.clickDropdown();
|
||||
await this.applicationDropdown.selectOption(name);
|
||||
}
|
||||
|
||||
async clickProcessDropdownArrow(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.selectProcessDropdownArrow);
|
||||
await BrowserActions.click(this.selectProcessDropdownArrow);
|
||||
@@ -117,19 +110,10 @@ export class StartProcessPage {
|
||||
await BrowserActions.click(this.cancelProcessButton);
|
||||
}
|
||||
|
||||
async isCancelProcessButtonEnabled(): Promise<boolean> {
|
||||
return this.cancelProcessButton.isEnabled();
|
||||
}
|
||||
|
||||
async clickFormStartProcessButton(): Promise<void> {
|
||||
await BrowserActions.click(this.formStartProcessButton);
|
||||
}
|
||||
|
||||
async isStartFormProcessButtonEnabled() {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.formStartProcessButton);
|
||||
return this.formStartProcessButton.isEnabled();
|
||||
}
|
||||
|
||||
async isStartProcessButtonEnabled() {
|
||||
await BrowserVisibility.waitUntilElementIsNotVisible(this.startProcessButtonDisabled);
|
||||
return this.startProcessButton.isEnabled();
|
||||
@@ -157,10 +141,6 @@ export class StartProcessPage {
|
||||
await locator.sendKeys(Key.TAB);
|
||||
}
|
||||
|
||||
async clearField(locator): Promise<void> {
|
||||
await BrowserActions.clearWithBackSpace(locator);
|
||||
}
|
||||
|
||||
formFields(): FormFields {
|
||||
return new FormFields();
|
||||
}
|
||||
@@ -174,18 +154,4 @@ export class StartProcessPage {
|
||||
await this.enterProcessName(name);
|
||||
await this.clickStartProcessButton();
|
||||
}
|
||||
|
||||
async startProcessWithApplication(name: string, applicationName: string, processName: string) {
|
||||
await this.enterProcessName(name);
|
||||
await this.selectFromApplicationDropdown(applicationName);
|
||||
await this.checkProcessDefinitionDropdownIsEnabled();
|
||||
await this.selectFromProcessDropdown(processName);
|
||||
await this.clickStartProcessButton();
|
||||
}
|
||||
|
||||
async selectApplicationAndProcess(applicationName: string, processName: string) {
|
||||
await this.selectFromApplicationDropdown(applicationName);
|
||||
await this.checkProcessDefinitionDropdownIsEnabled();
|
||||
await this.selectFromProcessDropdown(processName);
|
||||
}
|
||||
}
|
||||
|
@@ -1,75 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { BrowserVisibility } from '../../core/utils/browser-visibility';
|
||||
import { DataTableComponentPage } from '../../core/pages/data-table-component.page';
|
||||
import { BrowserActions } from '../../core/utils/browser-actions';
|
||||
import { element, by, ElementFinder } from 'protractor';
|
||||
|
||||
export class TaskListPage {
|
||||
rootElement: ElementFinder;
|
||||
dataTable: DataTableComponentPage;
|
||||
noTasksFound: ElementFinder;
|
||||
|
||||
constructor(
|
||||
rootElement = element.all(by.css('adf-tasklist')).first()
|
||||
) {
|
||||
this.rootElement = rootElement;
|
||||
this.dataTable = new DataTableComponentPage(this.rootElement);
|
||||
this.noTasksFound = this.rootElement.element(
|
||||
by.css('.adf-empty-content__title')
|
||||
);
|
||||
}
|
||||
|
||||
getDataTable() {
|
||||
return this.dataTable;
|
||||
}
|
||||
|
||||
getRowsDisplayedWithSameName(taskName: string): Promise<string> {
|
||||
return this.dataTable.getRowsWithSameColumnValues('Task Name', taskName);
|
||||
}
|
||||
|
||||
async checkContentIsDisplayedByColumn(column: string, processName: string): Promise<void> {
|
||||
await this.dataTable.waitTillContentLoaded();
|
||||
return this.dataTable.checkContentIsDisplayed(column, processName);
|
||||
}
|
||||
|
||||
async checkContentIsNotDisplayedByColumn(column: string, processName: string): Promise<void> {
|
||||
await this.dataTable.waitTillContentLoaded();
|
||||
return this.dataTable.checkContentIsNotDisplayed(column, processName);
|
||||
}
|
||||
|
||||
async checkTaskListIsLoaded(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.rootElement);
|
||||
}
|
||||
|
||||
getNoTasksFoundMessage(): Promise<string> {
|
||||
return BrowserActions.getText(this.noTasksFound);
|
||||
}
|
||||
|
||||
checkRowIsSelected(taskName: string): Promise<void> {
|
||||
return this.dataTable.checkRowIsSelected('Task Name', taskName);
|
||||
}
|
||||
|
||||
async selectRowByName(taskName: string): Promise<void> {
|
||||
await this.dataTable.selectRow('Task Name', taskName);
|
||||
}
|
||||
|
||||
getAllRowsNameColumn(): Promise<any> {
|
||||
return this.dataTable.getAllRowsColumnValues('Task Name');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user