diff --git a/lib/testing/.eslintrc.json b/lib/testing/.eslintrc.json index 6ceef055a1..53f04038d4 100644 --- a/lib/testing/.eslintrc.json +++ b/lib/testing/.eslintrc.json @@ -20,19 +20,6 @@ "eslint-plugin-rxjs" ], "rules": { - "jsdoc/newline-after-description": "warn", - "@typescript-eslint/naming-convention": "warn", - "@typescript-eslint/consistent-type-assertions": "warn", - "@typescript-eslint/prefer-for-of": "warn", - "no-underscore-dangle": "warn", - "no-shadow": "warn", - "quote-props": "warn", - "object-shorthand": "warn", - "prefer-const": "warn", - "arrow-body-style": "warn", - "@angular-eslint/no-output-native": "warn", - "space-before-function-paren": "warn", - "@angular-eslint/component-selector": [ "error", { diff --git a/lib/testing/src/lib/protractor/content-services/actions/upload.actions.ts b/lib/testing/src/lib/protractor/content-services/actions/upload.actions.ts index cfb3adaf65..d43e36e42f 100644 --- a/lib/testing/src/lib/protractor/content-services/actions/upload.actions.ts +++ b/lib/testing/src/lib/protractor/content-services/actions/upload.actions.ts @@ -53,6 +53,7 @@ export class UploadActions { async createEmptyFiles(emptyFileNames: string[], parentFolderId): Promise { const filesRequest = []; + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < emptyFileNames.length; i++) { const jsonItem = {}; jsonItem['name'] = emptyFileNames[i]; @@ -60,7 +61,7 @@ export class UploadActions { filesRequest.push(jsonItem); } - return this.nodesApi.createNode(parentFolderId, filesRequest, {}); + return this.nodesApi.createNode(parentFolderId, filesRequest as any, {}); } async createFolder(folderName, parentFolderId): Promise { diff --git a/lib/testing/src/lib/protractor/content-services/pages/rate.page.ts b/lib/testing/src/lib/protractor/content-services/pages/rate.page.ts index e093399844..9219afe1f9 100644 --- a/lib/testing/src/lib/protractor/content-services/pages/rate.page.ts +++ b/lib/testing/src/lib/protractor/content-services/pages/rate.page.ts @@ -20,10 +20,7 @@ import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; export class RatePage { - private ratingsCounter = $(`div[id="adf-rating-counter"]`); - private coloredStar = async (rateValue: number) => $(`span[id="adf-rate-${rateValue}"] mat-icon`); - private greyStar = async (rateValue: number) => $(`mat-icon[id="adf-grey-star-${rateValue}"]`); async rateComponent(rateValue: number) { const unratedStar = await this.coloredStar(rateValue); @@ -64,4 +61,6 @@ export class RatePage { return BrowserActions.getColor(coloredStar); } + private coloredStar = async (rateValue: number) => $(`span[id="adf-rate-${rateValue}"] mat-icon`); + private greyStar = async (rateValue: number) => $(`mat-icon[id="adf-grey-star-${rateValue}"]`); } diff --git a/lib/testing/src/lib/protractor/core/actions/api.service.factory.ts b/lib/testing/src/lib/protractor/core/actions/api.service.factory.ts index 326d14a7e1..c8af135028 100644 --- a/lib/testing/src/lib/protractor/core/actions/api.service.factory.ts +++ b/lib/testing/src/lib/protractor/core/actions/api.service.factory.ts @@ -20,10 +20,10 @@ import { ApiService } from '../../../shared/api/api.service'; import { Logger } from '../utils/logger'; import { browser } from 'protractor'; -export function createApiService( +export const createApiService = ( /** @deprecated */ appConfigOverride: Partial = {} -) { +) => { const patchedAppConfig = { ...browser.params.testConfig.appConfig, oauth2: { @@ -44,4 +44,4 @@ export function createApiService( }, Logger ); -} +}; diff --git a/lib/testing/src/lib/protractor/core/actions/drop.actions.ts b/lib/testing/src/lib/protractor/core/actions/drop.actions.ts index e8dc6d1126..169c3712b6 100644 --- a/lib/testing/src/lib/protractor/core/actions/drop.actions.ts +++ b/lib/testing/src/lib/protractor/core/actions/drop.actions.ts @@ -20,11 +20,11 @@ import * as path from 'path'; import * as fs from 'fs'; import { BrowserActions } from '../utils/browser-actions'; -const JS_BIND_INPUT = function(target) { +const JS_BIND_INPUT = (target) => { const input = document.createElement('input'); input.type = 'file'; input.style.display = 'none'; - input.addEventListener('change', function() { + input.addEventListener('change', () => { target.scrollIntoView(true); const rect = target.getBoundingClientRect(); @@ -32,7 +32,7 @@ const JS_BIND_INPUT = function(target) { const y = rect.top + (rect.height >> 1); const data = { files: input.files }; - ['dragenter', 'dragover', 'drop'].forEach(function(name) { + ['dragenter', 'dragover', 'drop'].forEach((name) => { const mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; @@ -46,13 +46,13 @@ const JS_BIND_INPUT = function(target) { return input; }; -const JS_BIND_INPUT_FOLDER = function(target) { +const JS_BIND_INPUT_FOLDER = (target) => { const input: any = document.createElement('input'); input.type = 'file'; input.style.display = 'none'; input.multiple = true; input.webkitdirectory = true; - input.addEventListener('change', function() { + input.addEventListener('change', () => { target.scrollIntoView(true); const rect = target.getBoundingClientRect(); @@ -60,7 +60,7 @@ const JS_BIND_INPUT_FOLDER = function(target) { const y = rect.top + (rect.height >> 1); const data = { files: input.files }; - ['dragenter', 'dragover', 'drop'].forEach(function(name) { + ['dragenter', 'dragover', 'drop'].forEach((name) => { const mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; diff --git a/lib/testing/src/lib/protractor/core/actions/identity/identity.service.ts b/lib/testing/src/lib/protractor/core/actions/identity/identity.service.ts index 68c4f96e19..ffc85f24fd 100644 --- a/lib/testing/src/lib/protractor/core/actions/identity/identity.service.ts +++ b/lib/testing/src/lib/protractor/core/actions/identity/identity.service.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +/* eslint-disable @typescript-eslint/naming-convention */ + import { ApiService } from '../../../../shared/api/api.service'; import { UserModel } from '../../models/user.model'; import { RolesService } from './roles.service'; @@ -33,6 +35,7 @@ export class IdentityService { async createIdentityUserWithRole(roles: string[]): Promise { const rolesService = new RolesService(this.api); const user = await this.createIdentityUser(); + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < roles.length; i++) { const roleId = await rolesService.getRoleIdByRoleName(roles[i]); await this.assignRole(user.idIdentityService, roleId, roles[i]); diff --git a/lib/testing/src/lib/protractor/core/actions/identity/query.service.ts b/lib/testing/src/lib/protractor/core/actions/identity/query.service.ts index 6e7c7d232e..3dbe29794a 100644 --- a/lib/testing/src/lib/protractor/core/actions/identity/query.service.ts +++ b/lib/testing/src/lib/protractor/core/actions/identity/query.service.ts @@ -122,6 +122,7 @@ export class QueryService { const postBody = {}; const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < data.list.entries.length; i++) { if (data.list.entries[i].entry.name === taskName) { return data.list.entries[i]; @@ -148,6 +149,7 @@ export class QueryService { const postBody = {}; const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < data.list.entries.length; i++) { if (data.list.entries[i].entry.name === taskName) { return data.list.entries[i]; @@ -170,6 +172,7 @@ export class QueryService { const postBody = {}; const data = await this.api.performBpmOperation(path, method, queryParams, postBody); + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < data.list.entries.length; i++) { if (data.list.entries[i].entry.name === taskName) { const task = data.list.entries[i]; diff --git a/lib/testing/src/lib/protractor/core/actions/search.service.ts b/lib/testing/src/lib/protractor/core/actions/search.service.ts index 5a5b39f6d0..298ca307b1 100644 --- a/lib/testing/src/lib/protractor/core/actions/search.service.ts +++ b/lib/testing/src/lib/protractor/core/actions/search.service.ts @@ -32,10 +32,7 @@ export class SearchService { async isSearchable(name: string): Promise { const query = this.createSearchQuery(name); - - const predicate = (result: ResultSetPaging) => { - return !!result?.list?.entries?.find(({ entry }) => entry.name === name); - }; + const predicate = (result: ResultSetPaging) => !!result?.list?.entries?.find(({ entry }) => entry.name === name); return this.performSearch(query, predicate, 'Failed to search folder'); } @@ -56,29 +53,27 @@ export class SearchService { async isUserSearchable(user: UserModel): Promise { const query = this.createUserSearchQuery(user); - const predicate = (result: ResultSetPaging) => { - return result.list && result.list.entries.length > 0 && !!result.list.entries.find(({ entry }) => entry.properties['cm:email'] === user.email); - }; + const predicate = (result: ResultSetPaging) => result.list && result.list.entries.length > 0 && !!result.list.entries.find(({ entry }) => entry.properties['cm:email'] === user.email); return this.performSearch(query, predicate, 'Failed to search user'); } private createUserSearchQuery(user: UserModel) { return { - 'query': { - 'query': `email:*${user.email}* OR firstName:*${user.firstName}* OR lastName:*${user.lastName}*` + query: { + query: `email:*${user.email}* OR firstName:*${user.firstName}* OR lastName:*${user.lastName}*` }, - 'include': [ + include: [ 'aspectNames', 'properties' ], - 'paging': { - 'maxItems': 1, - 'skipCount': 0 + paging: { + maxItems: 1, + skipCount: 0 }, - 'filterQueries': [ + filterQueries: [ { - 'query': `TYPE:'cm:authority'` + query: `TYPE:'cm:authority'` } ] }; @@ -86,28 +81,28 @@ export class SearchService { private createSearchQuery(name: string) { return { - 'query': { - 'query': `${name}*` + query: { + query: `${name}*` }, - 'include': [ + include: [ 'path', 'allowableOperations', 'properties' ], - 'paging': { - 'maxItems': 20, - 'skipCount': 0 + paging: { + maxItems: 20, + skipCount: 0 }, - 'filterQueries': [ + filterQueries: [ { - 'query': `TYPE:'cm:folder' OR TYPE:'cm:content'` + query: `TYPE:'cm:folder' OR TYPE:'cm:content'` }, { - 'query': 'NOT cm:creator:System' + query: 'NOT cm:creator:System' } ], - 'scope': { - 'locations': [ + scope: { + locations: [ 'nodes' ] } diff --git a/lib/testing/src/lib/protractor/core/actions/users.actions.ts b/lib/testing/src/lib/protractor/core/actions/users.actions.ts index 58004495ae..c8cf3ed6aa 100644 --- a/lib/testing/src/lib/protractor/core/actions/users.actions.ts +++ b/lib/testing/src/lib/protractor/core/actions/users.actions.ts @@ -118,7 +118,7 @@ export class UsersActions { } async createUserWithName(firstName: string, lastName: string): Promise { - const user = new UserModel({ firstName: firstName, lastName: lastName }); + const user = new UserModel({ firstName, lastName }); return this.createUser(user); } diff --git a/lib/testing/src/lib/protractor/core/pages/data-table-component.page.ts b/lib/testing/src/lib/protractor/core/pages/data-table-component.page.ts index a7803fc527..af37d773b3 100644 --- a/lib/testing/src/lib/protractor/core/pages/data-table-component.page.ts +++ b/lib/testing/src/lib/protractor/core/pages/data-table-component.page.ts @@ -20,6 +20,8 @@ import { BrowserVisibility } from '../utils/browser-visibility'; import { BrowserActions } from '../utils/browser-actions'; import { Logger } from '../utils/logger'; +const MAX_LOADING_TIME = 120000; + export class DataTableComponentPage { rootElement: ElementFinder; @@ -38,8 +40,6 @@ export class DataTableComponentPage { rows = `adf-datatable div[class*='adf-datatable-body'] adf-datatable-row[class*='adf-datatable-row']`; - MAX_LOADING_TIME = 120000; - constructor(rootElement = $$('adf-datatable').first()) { this.rootElement = rootElement; this.list = this.rootElement.$$(`div[class*='adf-datatable-body'] adf-datatable-row[class*='adf-datatable-row']`); @@ -375,7 +375,7 @@ export class DataTableComponentPage { if (await this.isSpinnerPresent()) { Logger.log('wait datatable loading spinner disappear'); - await BrowserVisibility.waitUntilElementIsNotVisible(this.rootElement.element(by.tagName('mat-progress-spinner')), this.MAX_LOADING_TIME); + await BrowserVisibility.waitUntilElementIsNotVisible(this.rootElement.element(by.tagName('mat-progress-spinner')), MAX_LOADING_TIME); if (await this.isEmpty()) { Logger.log('empty page'); @@ -389,7 +389,7 @@ export class DataTableComponentPage { try { Logger.log('wait datatable loading spinner is present'); await BrowserVisibility.waitUntilElementIsVisible(this.rootElement.element(by.tagName('mat-progress-spinner')), 2000); - await BrowserVisibility.waitUntilElementIsNotVisible(this.rootElement.element(by.tagName('mat-progress-spinner')), this.MAX_LOADING_TIME); + await BrowserVisibility.waitUntilElementIsNotVisible(this.rootElement.element(by.tagName('mat-progress-spinner')), MAX_LOADING_TIME); } catch (error) { } @@ -401,39 +401,6 @@ export class DataTableComponentPage { } } - private async isSpinnerPresent(): Promise { - let isSpinnerPresent; - - try { - isSpinnerPresent = await this.rootElement.element(by.tagName('mat-progress-spinner')).isDisplayed(); - } catch (error) { - isSpinnerPresent = false; - } - - return isSpinnerPresent; - } - - private async isInfiniteSpinnerPresent(): Promise { - let isSpinnerPresent; - - try { - isSpinnerPresent = await this.rootElement.element(by.tagName('mat-progress-bar')).isDisplayed(); - } catch (error) { - isSpinnerPresent = false; - } - - return isSpinnerPresent; - } - - private async waitFirstElementPresent(): Promise { - try { - Logger.log('wait first element is present'); - await BrowserVisibility.waitUntilElementIsVisible(this.contents.first()); - } catch (error) { - Logger.log('Possible empty page'); - } - } - async waitTillContentLoadedInfinitePagination(): Promise { await browser.sleep(500); @@ -615,4 +582,37 @@ export class DataTableComponentPage { } return ''; } + + private async isSpinnerPresent(): Promise { + let isSpinnerPresent; + + try { + isSpinnerPresent = await this.rootElement.element(by.tagName('mat-progress-spinner')).isDisplayed(); + } catch (error) { + isSpinnerPresent = false; + } + + return isSpinnerPresent; + } + + private async isInfiniteSpinnerPresent(): Promise { + let isSpinnerPresent; + + try { + isSpinnerPresent = await this.rootElement.element(by.tagName('mat-progress-bar')).isDisplayed(); + } catch (error) { + isSpinnerPresent = false; + } + + return isSpinnerPresent; + } + + private async waitFirstElementPresent(): Promise { + try { + Logger.log('wait first element is present'); + await BrowserVisibility.waitUntilElementIsVisible(this.contents.first()); + } catch (error) { + Logger.log('Possible empty page'); + } + } } diff --git a/lib/testing/src/lib/protractor/core/pages/form/widgets/dynamic-table-widget.page.ts b/lib/testing/src/lib/protractor/core/pages/form/widgets/dynamic-table-widget.page.ts index eb3c922b6b..13c858878f 100644 --- a/lib/testing/src/lib/protractor/core/pages/form/widgets/dynamic-table-widget.page.ts +++ b/lib/testing/src/lib/protractor/core/pages/form/widgets/dynamic-table-widget.page.ts @@ -20,7 +20,6 @@ import { Locator, by, element, protractor, $, $$ } from 'protractor'; import { BrowserVisibility, BrowserActions } from '../../../utils/public-api'; export class DynamicTableWidgetPage { - formFields = new FormFields(); labelLocator: Locator = by.css('dynamic-table-widget div div'); @@ -36,8 +35,6 @@ export class DynamicTableWidgetPage { dateWidget = $$('mat-datepicker-toggle button').first(); tableRow = $$('tbody tr'); - private getTableRowByIndex = (idx: string) => $(`#dynamictable-row-${idx}`); - getFieldLabel(fieldId: string): Promise { return this.formFields.getFieldLabel(fieldId, this.labelLocator); } @@ -125,4 +122,6 @@ export class DynamicTableWidgetPage { const present = await BrowserVisibility.waitUntilElementIsVisible(row); await expect(present).toBe(true); } + + private getTableRowByIndex = (idx: string) => $(`#dynamictable-row-${idx}`); } diff --git a/lib/testing/src/lib/protractor/core/pages/material/date-picker-calendar.page.ts b/lib/testing/src/lib/protractor/core/pages/material/date-picker-calendar.page.ts index 27ead6e858..f8dec4a3a9 100644 --- a/lib/testing/src/lib/protractor/core/pages/material/date-picker-calendar.page.ts +++ b/lib/testing/src/lib/protractor/core/pages/material/date-picker-calendar.page.ts @@ -83,6 +83,19 @@ export class DatePickerCalendarPage { await this.checkDatePickerIsNotDisplayed(); } + async selectExactDate(date: Date): Promise { + await this.checkDatePickerIsDisplayed(); + await this.setDateUsingPeriodButton(date); + await this.checkDatePickerIsNotDisplayed(); + } + + async selectExactDateRange(start: Date, end: Date): Promise { + await this.checkDatePickerIsDisplayed(); + await this.setDateUsingPeriodButton(start); + await this.setDateUsingPeriodButton(end); + await this.checkDatePickerIsNotDisplayed(); + } + private async setDateUsingPeriodButton(date: Date) { const months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']; const year = date.getFullYear(); @@ -97,17 +110,4 @@ export class DatePickerCalendarPage { await BrowserActions.click(monthElement); await BrowserActions.click(dayElement); } - - async selectExactDate(date: Date): Promise { - await this.checkDatePickerIsDisplayed(); - await this.setDateUsingPeriodButton(date); - await this.checkDatePickerIsNotDisplayed(); - } - - async selectExactDateRange(start: Date, end: Date): Promise { - await this.checkDatePickerIsDisplayed(); - await this.setDateUsingPeriodButton(start); - await this.setDateUsingPeriodButton(end); - await this.checkDatePickerIsNotDisplayed(); - } } diff --git a/lib/testing/src/lib/protractor/core/pages/user-info.page.ts b/lib/testing/src/lib/protractor/core/pages/user-info.page.ts index 7091079991..960d86839b 100644 --- a/lib/testing/src/lib/protractor/core/pages/user-info.page.ts +++ b/lib/testing/src/lib/protractor/core/pages/user-info.page.ts @@ -139,10 +139,12 @@ export class UserInfoPage { await BrowserVisibility.waitUntilElementIsNotVisible(this.initialImage); } + // eslint-disable-next-line @typescript-eslint/naming-convention async ACSProfileImageNotDisplayed(): Promise { await BrowserVisibility.waitUntilElementIsNotVisible(this.acsImage); } + // eslint-disable-next-line @typescript-eslint/naming-convention async APSProfileImageNotDisplayed(): Promise { await BrowserVisibility.waitUntilElementIsNotVisible(this.apsImage); } diff --git a/lib/testing/src/lib/protractor/core/pages/viewer.page.ts b/lib/testing/src/lib/protractor/core/pages/viewer.page.ts index 7ae7b85524..dc184fbfaa 100644 --- a/lib/testing/src/lib/protractor/core/pages/viewer.page.ts +++ b/lib/testing/src/lib/protractor/core/pages/viewer.page.ts @@ -22,10 +22,9 @@ import { BrowserVisibility } from '../utils/browser-visibility'; import { element, by, browser, protractor, $, $$ } from 'protractor'; import { Logger } from '../utils/logger'; +const MAX_LOADING_TIME = 120000; + export class ViewerPage { - - MAX_LOADING_TIME = 120000; - tabsPage = new TabsPage(); togglePage = new TogglePage(); @@ -121,29 +120,17 @@ export class ViewerPage { if (await this.isSpinnerPresent()) { Logger.log('wait spinner disappear'); - await BrowserVisibility.waitUntilElementIsNotVisible(element(by.tagName('mat-progress-spinner')), this.MAX_LOADING_TIME); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.tagName('mat-progress-spinner')), MAX_LOADING_TIME); } else { try { Logger.log('wait spinner is present'); await BrowserVisibility.waitUntilElementIsVisible(element(by.tagName('mat-progress-spinner'))); - await BrowserVisibility.waitUntilElementIsNotVisible(element(by.tagName('mat-progress-spinner')), this.MAX_LOADING_TIME); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.tagName('mat-progress-spinner')), MAX_LOADING_TIME); } catch (error) { } } } - private async isSpinnerPresent(): Promise { - let isSpinnerPresent; - - try { - isSpinnerPresent = await element(by.tagName('mat-progress-spinner')).isDisplayed(); - } catch (error) { - isSpinnerPresent = false; - } - - return isSpinnerPresent; - } - async clearPageNumber(): Promise { await BrowserActions.clearSendKeys(this.pageSelectorInput); } @@ -678,4 +665,16 @@ export class ViewerPage { async expectUrlToContain(text: string): Promise { await expect(browser.getCurrentUrl()).toContain(text); } + + private async isSpinnerPresent(): Promise { + let isSpinnerPresent; + + try { + isSpinnerPresent = await element(by.tagName('mat-progress-spinner')).isDisplayed(); + } catch (error) { + isSpinnerPresent = false; + } + + return isSpinnerPresent; + } } diff --git a/lib/testing/src/lib/protractor/core/test-element.ts b/lib/testing/src/lib/protractor/core/test-element.ts index af1b8cc78e..dfd2feadd3 100644 --- a/lib/testing/src/lib/protractor/core/test-element.ts +++ b/lib/testing/src/lib/protractor/core/test-element.ts @@ -28,6 +28,7 @@ export class TestElement { /** * Create a new instance with the element located by the id + * * @param id The id of the element */ static byId(id: string): TestElement { @@ -36,6 +37,7 @@ export class TestElement { /** * Create a new instance with the element located by the CSS class name + * * @param selector The CSS class name to lookup */ static byCss(selector: string): TestElement { @@ -44,6 +46,7 @@ export class TestElement { /** * Create a new instance with the element that contains specific text + * * @param selector the CSS selector * @param text the text within the target element */ @@ -53,6 +56,7 @@ export class TestElement { /** * Create a new instance with the element with specific HTML tag name + * * @param selector the HTML tag name */ static byTag(selector: string): TestElement { @@ -68,6 +72,7 @@ export class TestElement { /** * Checks that an element is present on the DOM of a page and visible + * * @param waitTimeout How long to wait for the condition to be true */ async isVisible(waitTimeout?: number): Promise { @@ -81,6 +86,7 @@ export class TestElement { /** * Waits until the element is present on the DOM of a page and visible + * * @param waitTimeout How long to wait for the condition to be true */ async waitVisible(waitTimeout?: number): Promise { @@ -89,6 +95,7 @@ export class TestElement { /** * Waits until the element is either invisible or not present on the DOM + * * @param waitTimeout How long to wait for the condition to be true */ async waitNotVisible(waitTimeout?: number): Promise { @@ -97,6 +104,7 @@ export class TestElement { /** * Checks that an element is present on the DOM of a page + * * @param waitTimeout How long to wait for the condition to be true */ async isPresent(waitTimeout?: number): Promise { @@ -110,6 +118,7 @@ export class TestElement { /** * Waits until the element is present on the DOM of a page + * * @param waitTimeout How long to wait for the condition to be true */ async waitPresent(waitTimeout?: number): Promise { @@ -118,6 +127,7 @@ export class TestElement { /** * Waits until the element is not attached to the DOM of a page + * * @param waitTimeout How long to wait for the condition to be true */ async waitNotPresent(waitTimeout?: number): Promise { @@ -126,6 +136,7 @@ export class TestElement { /** * Waits until the given text is present in the element’s value + * * @param value the text to check */ async waitHasValue(value: string): Promise { @@ -159,6 +170,7 @@ export class TestElement { /** * Query for the value of the given attribute of the element. + * * @param attributeName The name of the attribute to query. */ async getAttribute(attributeName: string): Promise { @@ -181,6 +193,7 @@ export class TestElement { /** * Enter the text + * * @param text the text to enter */ async typeText(text: string): Promise { diff --git a/lib/testing/src/lib/protractor/core/utils/array.util.ts b/lib/testing/src/lib/protractor/core/utils/array.util.ts index 8cc993d188..1c804a27e7 100644 --- a/lib/testing/src/lib/protractor/core/utils/array.util.ts +++ b/lib/testing/src/lib/protractor/core/utils/array.util.ts @@ -28,8 +28,6 @@ export class ArrayUtil { if (0 === subset.length) { return false; } - return subset.every(function (value) { - return (superset.indexOf(value) >= 0); - }); + return subset.every((value) => (superset.indexOf(value) >= 0)); } } diff --git a/lib/testing/src/lib/protractor/core/utils/browser-actions.ts b/lib/testing/src/lib/protractor/core/utils/browser-actions.ts index 1cb63c150e..bae10106f0 100644 --- a/lib/testing/src/lib/protractor/core/utils/browser-actions.ts +++ b/lib/testing/src/lib/protractor/core/utils/browser-actions.ts @@ -27,10 +27,7 @@ export class BrowserActions { static async clickUntilIsNotVisible(elementToClick: ElementFinder, elementToFind: ElementFinder): Promise { Logger.info(`Click until element is not present: ${elementToClick.locator().toString()}`); - - const predicate = (isVisible: boolean) => { - return isVisible; - }; + const predicate = (isVisible: boolean) => isVisible; const apiCall = async () => { await this.click(elementToClick); @@ -119,11 +116,6 @@ export class BrowserActions { } } - // Don't make it pub,ic use getText - private static async getTextScript(elementFinder: ElementFinder): Promise { - return browser.executeScript(`return arguments[0].textContent`, elementFinder); - } - static async getInputValue(elementFinder: ElementFinder): Promise { Logger.info(`Get Input value ${elementFinder.locator().toString()}`); @@ -170,6 +162,7 @@ export class BrowserActions { if (sleepTime === 0) { await elementFinder.sendKeys(text); } else { + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < text.length; i++) { await elementFinder.sendKeys(text[i]); await browser.sleep(sleepTime); @@ -215,4 +208,9 @@ export class BrowserActions { stream.write(Buffer.from(pngData, 'base64')); stream.end(); } + + // Don't make it pub,ic use getText + private static async getTextScript(elementFinder: ElementFinder): Promise { + return browser.executeScript(`return arguments[0].textContent`, elementFinder); + } } diff --git a/lib/testing/src/lib/protractor/core/utils/browser-visibility.ts b/lib/testing/src/lib/protractor/core/utils/browser-visibility.ts index d9cf395e08..c669a575bb 100644 --- a/lib/testing/src/lib/protractor/core/utils/browser-visibility.ts +++ b/lib/testing/src/lib/protractor/core/utils/browser-visibility.ts @@ -20,8 +20,9 @@ import { Logger } from './logger'; import { falseIfMissing } from 'protractor/built/util'; export class BrowserVisibility { - + // eslint-disable-next-line @typescript-eslint/naming-convention static NOT_VISIBLE_DEFAULT_TIMEOUT = BrowserVisibility.getNoVisibleTimeout() ? browser.params.testConfig.timeouts.no_visible_timeout : 10000; + // eslint-disable-next-line @typescript-eslint/naming-convention static DEFAULT_TIMEOUT = BrowserVisibility.getVisibleTimeout() ? browser.params.testConfig.timeouts.visible_timeout : 10000; static getVisibleTimeout() { @@ -93,15 +94,6 @@ export class BrowserVisibility { return browser.wait(BrowserVisibility.textToBePresentInElementValue(elementToCheck, elementValue), waitTimeout, `Element doesn\'t have a value ${elementValue} ${elementToCheck.locator()}`); } - private static textToBePresentInElementValue(elementFinder: ElementFinder, text: string) { - const hasText = async () => { - return browser.executeScript(`return arguments[0].value`, elementFinder).then((actualText: string) => { - return actualText.indexOf(text) > -1; - }, falseIfMissing); - }; - return protractor.ExpectedConditions.and(protractor.ExpectedConditions.presenceOf(elementFinder), hasText); - } - /* * Wait for element to have text */ @@ -124,4 +116,10 @@ export class BrowserVisibility { await this.waitUntilElementIsNotPresent(dialog); } + private static textToBePresentInElementValue(elementFinder: ElementFinder, text: string) { + const hasText = async () => browser.executeScript(`return arguments[0].value`, elementFinder).then( + (actualText: string) => actualText.indexOf(text) > -1, falseIfMissing + ); + return protractor.ExpectedConditions.and(protractor.ExpectedConditions.presenceOf(elementFinder), hasText); + } } diff --git a/lib/testing/src/lib/protractor/core/utils/file-browser.util.ts b/lib/testing/src/lib/protractor/core/utils/file-browser.util.ts index 4fb7e69e21..a680822c5a 100644 --- a/lib/testing/src/lib/protractor/core/utils/file-browser.util.ts +++ b/lib/testing/src/lib/protractor/core/utils/file-browser.util.ts @@ -23,10 +23,7 @@ export class FileBrowserUtil { static async isFileDownloaded(fileName: string): Promise { const DEFAULT_ROOT_PATH = browser.params.testConfig ? browser.params.testConfig.main.rootPath : __dirname; - - const file = await browser.driver.wait(() => { - return fs.existsSync(path.join(DEFAULT_ROOT_PATH, 'downloads', fileName)); - }, 30000); + const file = await browser.driver.wait(() => fs.existsSync(path.join(DEFAULT_ROOT_PATH, 'downloads', fileName)), 30000); await expect(file).toBe(true, `${fileName} not downloaded`); diff --git a/lib/testing/src/lib/protractor/core/utils/form.util.ts b/lib/testing/src/lib/protractor/core/utils/form.util.ts index b74a4775fc..096ad53556 100644 --- a/lib/testing/src/lib/protractor/core/utils/form.util.ts +++ b/lib/testing/src/lib/protractor/core/utils/form.util.ts @@ -47,8 +47,6 @@ export class FormUtil { // @ts-ignore const forms: any = await this.editorApi.getForms(); - return forms.data.find((currentForm) => { - return currentForm.name === name; - }); + return forms.data.find((currentForm) => currentForm.name === name); } } diff --git a/lib/testing/src/lib/protractor/core/utils/protractor.util.ts b/lib/testing/src/lib/protractor/core/utils/protractor.util.ts index 92b255baed..16b91f1c82 100644 --- a/lib/testing/src/lib/protractor/core/utils/protractor.util.ts +++ b/lib/testing/src/lib/protractor/core/utils/protractor.util.ts @@ -19,14 +19,12 @@ import { ElementFinder, browser } from 'protractor'; /** * Tagged template to convert a sting to an `ElementFinder`. + * * @example ```const item = byCss`.adf-breadcrumb-item-current`;``` * @example ```const item = byCss`${variable}`;``` * @returns Instance of `ElementFinder` type. */ -export function byCss( - literals: TemplateStringsArray, - ...placeholders: string[] -): ElementFinder { +export const byCss = (literals: TemplateStringsArray, ...placeholders: string[]): ElementFinder => { const selector = literals[0] || placeholders[0]; return browser.$(selector); -} +}; diff --git a/lib/testing/src/lib/protractor/core/utils/wait-actions.ts b/lib/testing/src/lib/protractor/core/utils/wait-actions.ts index 34c14d8c06..165f3555c8 100644 --- a/lib/testing/src/lib/protractor/core/utils/wait-actions.ts +++ b/lib/testing/src/lib/protractor/core/utils/wait-actions.ts @@ -20,9 +20,8 @@ import { ApiService } from '../../../shared/api/api.service'; import { ApiUtil } from '../../../shared/api/api.util'; import { Logger } from './logger'; +const DELAY_API_CALL = 5000; export class WaitActions { - - DELAY_API_CALL = 5000; apiService: ApiService; nodesApi: NodesApi; @@ -32,13 +31,9 @@ export class WaitActions { } async nodeIsPresent(nodeId: string): Promise { - - const predicate = (result) => { - return result.entry.id === nodeId; - }; + const predicate = (result) => result.entry.id === nodeId; const apiCall = async () => { - try { return this.nodesApi.getNode(nodeId); } catch (error) { @@ -47,17 +42,13 @@ export class WaitActions { } }; - return ApiUtil.waitForApi(apiCall, predicate, this.DELAY_API_CALL); + return ApiUtil.waitForApi(apiCall, predicate, DELAY_API_CALL); } async nodeIsUnlock(nodeId: string): Promise { - - const predicate = (result) => { - return result.entry.isLocked === false; - }; + const predicate = (result) => result.entry.isLocked === false; const apiCall = async () => { - try { return this.nodesApi.getNode(nodeId); } catch (error) { @@ -66,7 +57,6 @@ export class WaitActions { } }; - return ApiUtil.waitForApi(apiCall, predicate, this.DELAY_API_CALL); + return ApiUtil.waitForApi(apiCall, predicate, DELAY_API_CALL); } - } diff --git a/lib/testing/src/lib/protractor/process-services-cloud/actions/application.ts b/lib/testing/src/lib/protractor/process-services-cloud/actions/application.ts index f21a03703e..31cacdb6a6 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/actions/application.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/actions/application.ts @@ -75,7 +75,7 @@ export class Application { async getApplicationsByStatus(status: string): Promise { Logger.info(`[Application] Return application by status: ${status}`); return this.requestApiHelper.get(this.endPoint, { - queryParams: { status: status, sort: 'name' } + queryParams: { status, sort: 'name' } }); } } diff --git a/lib/testing/src/lib/protractor/process-services-cloud/actions/message-events.service.ts b/lib/testing/src/lib/protractor/process-services-cloud/actions/message-events.service.ts index 82ed0571c0..032d2c600f 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/actions/message-events.service.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/actions/message-events.service.ts @@ -33,9 +33,9 @@ export class MessageEventsService { const queryParams = {}; const postBody = { - 'name': startMessage, - 'variables': {}, - 'payloadType': 'StartMessagePayload', + name: startMessage, + variables: {}, + payloadType: 'StartMessagePayload', ...options }; @@ -54,9 +54,9 @@ export class MessageEventsService { const queryParams = {}; const postBody = { - 'name': receiveMessage, - 'variables': {}, - 'payloadType': 'ReceiveMessagePayload', + name: receiveMessage, + variables: {}, + payloadType: 'ReceiveMessagePayload', ...options }; @@ -66,5 +66,4 @@ export class MessageEventsService { Logger.error('Receive Message Event Service not working', error.message); } } - } diff --git a/lib/testing/src/lib/protractor/process-services-cloud/actions/process.services.ts b/lib/testing/src/lib/protractor/process-services-cloud/actions/process.services.ts index 540a7c1d00..ecd27c1753 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/actions/process.services.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/actions/process.services.ts @@ -25,12 +25,12 @@ import { StringUtil } from '../../../shared/utils/string.util'; import { Logger } from '../../core/utils/logger'; export class ProcessServices { + processInstancesService: ProcessInstancesService; + processDefinitionsService: ProcessDefinitionsService; + tasksService: TasksService; + queryService: QueryService; private api: ApiService; - public processInstancesService: ProcessInstancesService; - public processDefinitionsService: ProcessDefinitionsService; - public tasksService: TasksService; - public queryService: QueryService; constructor(api: ApiService) { this.api = api; @@ -40,7 +40,7 @@ export class ProcessServices { this.queryService = new QueryService(this.api); } - async createProcessInstanceAndClaimFirstTask(processDefName, appName, taskIndex: number = 0, processInstanceName?: string) { + async createProcessInstanceAndClaimFirstTask(processDefName: string, appName: string, taskIndex: number = 0, processInstanceName?: string) { const processInstance = await this.createProcessInstance(processDefName, appName, processInstanceName); const task = await this.queryService.getProcessInstanceTasks(processInstance.entry.id, appName); await this.tasksService.claimTask(task.list.entries[taskIndex].entry.id, appName); @@ -48,7 +48,7 @@ export class ProcessServices { return processInstance; } - async createProcessInstance(processDefName, appName, processInstanceName?: string) { + async createProcessInstance(processDefName: string, appName: string, processInstanceName?: string) { const processDefinition = await this.processDefinitionsService.getProcessDefinitionByName(processDefName, appName); const processInstance = await this.processInstancesService.createProcessInstance(processDefinition.entry.key, appName, { name: processInstanceName ? processInstanceName : StringUtil.generateRandomString(), @@ -58,12 +58,12 @@ export class ProcessServices { return processInstance; } - async createProcessInstanceWithVariables(processDefName, appName, variables: any, processInstanceName?: string) { + async createProcessInstanceWithVariables(processDefName: string, appName: string, variables: any, processInstanceName?: string) { const processDefinition = await this.processDefinitionsService.getProcessDefinitionByName(processDefName, appName); const processInstance = await this.processInstancesService.createProcessInstance(processDefinition.entry.key, appName, { name: processInstanceName ? processInstanceName : StringUtil.generateRandomString(), businessKey: StringUtil.generateRandomString(), - variables: variables + variables }); return processInstance; diff --git a/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts b/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts index 7b4cc93c41..3deaa0dbcb 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts @@ -42,34 +42,22 @@ export class EditProcessFilterCloudComponentPage { deleteButton = $('button[data-automation-id="adf-filter-action-delete"]'); filter = $(`adf-cloud-edit-process-filter mat-expansion-panel-header`); - private locatorAppNameDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-appName']`); - private locatorStatusDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-status']`); - private locatorSortDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-sort']`); - private locatorOrderDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-order']`); - private locatorProcessDefinitionNameDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-processDefinitionName']`); - private expansionPanelExtended = this.rootElement.$('mat-expansion-panel-header.mat-expanded'); - private locatorSuspendedDateRangeDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-suspendedDateRange']`); - private locatorStartedDateRangeDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-startedDateRange']`); - private locatorCompletedDateRangeDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-process-property-completedDateRange']`); - - private locatorSuspendedDateRangeWithin = $(`mat-datepicker-toggle[data-automation-id='adf-cloud-edit-process-property-date-range-suspendedDateRange']`); - private content = TestElement.byCss('adf-cloud-edit-process-filter mat-expansion-panel [style*="visible"]'); - - appNameDropdown = new DropdownPage(this.locatorAppNameDropdown); - statusDropdown = new DropdownPage(this.locatorStatusDropdown); - sortDropdown = new DropdownPage(this.locatorSortDropdown); - orderDropdown = new DropdownPage(this.locatorOrderDropdown); - processDefinitionNameDropdown = new DropdownPage(this.locatorProcessDefinitionNameDropdown); - suspendedDateRangeDropdown = new DropdownPage(this.locatorSuspendedDateRangeDropdown); - startedDateRangeDropdown = new DropdownPage(this.locatorStartedDateRangeDropdown); - completedDateRangeDropdown = new DropdownPage(this.locatorCompletedDateRangeDropdown); - - suspendedDateRangeWithin = new DatePickerPage(this.locatorSuspendedDateRangeWithin); + appNameDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-appName']`)); + statusDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-status']`)); + sortDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-sort']`)); + orderDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-order']`)); + processDefinitionNameDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-processDefinitionName']`)); + suspendedDateRangeDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-suspendedDateRange']`)); + startedDateRangeDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-startedDateRange']`)); + completedDateRangeDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-process-property-completedDateRange']`)); + suspendedDateRangeWithin = new DatePickerPage($(`mat-datepicker-toggle[data-automation-id='adf-cloud-edit-process-property-date-range-suspendedDateRange']`)); peopleCloudComponent = new PeopleCloudComponentPage(); - editProcessFilterDialogPage = new EditProcessFilterDialogPage(); + private expansionPanelExtended = this.rootElement.$('mat-expansion-panel-header.mat-expanded'); + private content = TestElement.byCss('adf-cloud-edit-process-filter mat-expansion-panel [style*="visible"]'); + editProcessFilterDialog(): EditProcessFilterDialogPage { return this.editProcessFilterDialogPage; } diff --git a/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts b/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts index 7d4442d8d0..adee118c09 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts @@ -45,22 +45,13 @@ export class EditTaskFilterCloudComponentPage { deleteButton = $('[data-automation-id="adf-filter-action-delete"]'); filter = $(`adf-cloud-edit-task-filter mat-expansion-panel-header`); - private locatorAppNameDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-task-property-appName']`); - private locatorStatusDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-task-property-status']`); - private locatorSortDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-task-property-sort']`); - private locatorOrderDropdown = $(`mat-select[data-automation-id='adf-cloud-edit-task-property-order']`); - private locatorCompletedDateDropdown = $(`mat-select[data-automation-id="adf-cloud-edit-process-property-completedDateRange"]`); - private locatorAssignmentDropdown = $(`.adf-task-assignment-filter`); - private expansionPanelExtended = this.rootElement.$('mat-expansion-panel-header.mat-expanded'); - private content = this.rootElement.$('div.mat-expansion-panel-content[style*="visible"]'); - - appNameDropdown = new DropdownPage(this.locatorAppNameDropdown); - statusDropdown = new DropdownPage(this.locatorStatusDropdown); - sortDropdown = new DropdownPage(this.locatorSortDropdown); + appNameDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-task-property-appName']`)); + statusDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-task-property-status']`)); + sortDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-task-property-sort']`)); priorityDropdown = new DropdownPage(this.priority); - orderDropdown = new DropdownPage(this.locatorOrderDropdown); - completedDateDropdown = new DropdownPage(this.locatorCompletedDateDropdown); - assignmentDropdown = new DropdownPage(this.locatorAssignmentDropdown); + orderDropdown = new DropdownPage($(`mat-select[data-automation-id='adf-cloud-edit-task-property-order']`)); + completedDateDropdown = new DropdownPage($(`mat-select[data-automation-id="adf-cloud-edit-process-property-completedDateRange"]`)); + assignmentDropdown = new DropdownPage($(`.adf-task-assignment-filter`)); editTaskFilterDialogPage = new EditTaskFilterDialogPage(); peopleCloudComponent = new PeopleCloudComponentPage(); @@ -68,6 +59,9 @@ export class EditTaskFilterCloudComponentPage { dataTable = new DataTableComponentPage( $('adf-cloud-task-list')); + private expansionPanelExtended = this.rootElement.$('mat-expansion-panel-header.mat-expanded'); + private content = this.rootElement.$('div.mat-expansion-panel-content[style*="visible"]'); + editTaskFilterDialog(): EditTaskFilterDialogPage { return this.editTaskFilterDialogPage; } diff --git a/lib/testing/src/lib/protractor/process-services-cloud/pages/form/widget/attach-file-widget-cloud.page.ts b/lib/testing/src/lib/protractor/process-services-cloud/pages/form/widget/attach-file-widget-cloud.page.ts index fd0276a118..cd48382929 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/pages/form/widget/attach-file-widget-cloud.page.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/pages/form/widget/attach-file-widget-cloud.page.ts @@ -34,9 +34,7 @@ export class AttachFileWidgetCloudPage { await BrowserVisibility.waitUntilElementIsVisible(this.widget.$(this.filesListLocator)); } - getFileAttachedLocatorByContainingText = async(text: string): Promise => { - return this.widget.$(this.filesListLocator).element(by.cssContainingText('table tbody tr td span ', text)); - }; + getFileAttachedLocatorByContainingText = async (text: string): Promise => this.widget.$(this.filesListLocator).element(by.cssContainingText('table tbody tr td span ', text)); assignWidget(fieldId: string): void { this.widget = $(`adf-form-field div[id='field-${fieldId}-container']`); diff --git a/lib/testing/src/lib/protractor/process-services-cloud/pages/group-cloud-component.page.ts b/lib/testing/src/lib/protractor/process-services-cloud/pages/group-cloud-component.page.ts index dd42c90f5b..afbae47434 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/pages/group-cloud-component.page.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/pages/group-cloud-component.page.ts @@ -79,7 +79,7 @@ export class GroupCloudComponentPage { } } - async checkGroupWidgetIsReadOnly (): Promise { + async checkGroupWidgetIsReadOnly(): Promise { try { await BrowserVisibility.waitUntilElementIsVisible(this.groupField); return true; @@ -101,5 +101,4 @@ export class GroupCloudComponentPage { const errorLocator = $('[data-automation-id="adf-cloud-group-no-results"]'); await BrowserVisibility.waitUntilElementIsVisible(errorLocator); } - } diff --git a/lib/testing/src/lib/protractor/process-services-cloud/pages/process-filters-cloud-component.page.ts b/lib/testing/src/lib/protractor/process-services-cloud/pages/process-filters-cloud-component.page.ts index 0662bcbc0d..0a74ce93dc 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/pages/process-filters-cloud-component.page.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/pages/process-filters-cloud-component.page.ts @@ -20,9 +20,9 @@ import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; const FILTERS = { - ALL: 'all-processes', - COMPLETED: 'completed-processes', - RUNNING: 'running-processes' + all: 'all-processes', + completed: 'completed-processes', + running: 'running-processes' }; export class ProcessFiltersCloudComponentPage { @@ -44,32 +44,32 @@ export class ProcessFiltersCloudComponentPage { } async clickAllProcessesFilter(): Promise { - const filter = this.getProcessFilterLocatorByFilterName(FILTERS.ALL); + const filter = this.getProcessFilterLocatorByFilterName(FILTERS.all); await BrowserActions.click(filter); } async clickCompletedProcessesFilter(): Promise { - const filter = this.getProcessFilterLocatorByFilterName(FILTERS.COMPLETED); + const filter = this.getProcessFilterLocatorByFilterName(FILTERS.completed); await BrowserActions.click(filter); } async clickRunningProcessesFilter(): Promise { - const filter = this.getProcessFilterLocatorByFilterName(FILTERS.RUNNING); + const filter = this.getProcessFilterLocatorByFilterName(FILTERS.running); await BrowserActions.click(filter); } async checkAllProcessesFilterIsDisplayed(): Promise { - const filter = this.getProcessFilterLocatorByFilterName(FILTERS.ALL); + const filter = this.getProcessFilterLocatorByFilterName(FILTERS.all); await BrowserVisibility.waitUntilElementIsVisible(filter); } async checkCompletedProcessesFilterIsDisplayed(): Promise { - const filter = this.getProcessFilterLocatorByFilterName(FILTERS.COMPLETED); + const filter = this.getProcessFilterLocatorByFilterName(FILTERS.completed); await BrowserVisibility.waitUntilElementIsVisible(filter); } async checkRunningProcessesFilterIsDisplayed(): Promise { - const filter = this.getProcessFilterLocatorByFilterName(FILTERS.RUNNING); + const filter = this.getProcessFilterLocatorByFilterName(FILTERS.running); await BrowserVisibility.waitUntilElementIsVisible(filter); } diff --git a/lib/testing/src/lib/protractor/process-services-cloud/resources/resources.ts b/lib/testing/src/lib/protractor/process-services-cloud/resources/resources.ts index 140e13e3d7..7b0f4115e6 100644 --- a/lib/testing/src/lib/protractor/process-services-cloud/resources/resources.ts +++ b/lib/testing/src/lib/protractor/process-services-cloud/resources/resources.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +/* eslint-disable @typescript-eslint/naming-convention */ + export const ACTIVITI_CLOUD_APPS = { CANDIDATE_BASE_APP: { name: 'candidatebaseapp', diff --git a/lib/testing/src/lib/protractor/process-services/actions/applications.util.ts b/lib/testing/src/lib/protractor/process-services/actions/applications.util.ts index b70a8539d7..b7faccc3c8 100644 --- a/lib/testing/src/lib/protractor/process-services/actions/applications.util.ts +++ b/lib/testing/src/lib/protractor/process-services/actions/applications.util.ts @@ -104,9 +104,7 @@ export class ApplicationsUtil { async getAppDefinitionByName(appName: string): Promise { try { const appDefinitionsList = await this.appsApi.getAppDefinitions(); - return appDefinitionsList.data.find((currentApp) => { - return currentApp.name === appName; - }); + return appDefinitionsList.data.find((currentApp) => currentApp.name === appName); } catch (error) { Logger.error('Get AppDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error))?.response?.text); return {}; diff --git a/lib/testing/src/lib/protractor/process-services/actions/process.util.ts b/lib/testing/src/lib/protractor/process-services/actions/process.util.ts index 5e8bf743b1..9122ed40f9 100644 --- a/lib/testing/src/lib/protractor/process-services/actions/process.util.ts +++ b/lib/testing/src/lib/protractor/process-services/actions/process.util.ts @@ -90,10 +90,8 @@ export class ProcessUtil { async getProcessDefinitionByName(deploymentId: string, processName: string): Promise { try { - const processDefinitionList = await this.processDefinitionsApi.getProcessDefinitions({ deploymentId: deploymentId }); - const chosenProcess = processDefinitionList.data.find( (processDefinition) => { - return processDefinition.name === processName; - }); + const processDefinitionList = await this.processDefinitionsApi.getProcessDefinitions({ deploymentId }); + const chosenProcess = processDefinitionList.data.find( (processDefinition) => processDefinition.name === processName); return chosenProcess; } catch (error) { Logger.error('Get ProcessDefinitions - Service error, Response: ', JSON.parse(JSON.stringify(error))); @@ -110,14 +108,14 @@ export class ProcessUtil { async getProcessTaskId(processId: string): Promise { const taskList = await this.tasksApi.listTasks({}); - let wantedtask; + let wantedTask; taskList.data.forEach((task) => { if (task.processInstanceId === processId) { - wantedtask = task; + wantedTask = task; } }); - return wantedtask ? wantedtask : 'null'; + return wantedTask ? wantedTask : 'null'; } } diff --git a/lib/testing/src/lib/protractor/process-services/actions/user-filters.util.ts b/lib/testing/src/lib/protractor/process-services/actions/user-filters.util.ts index 468c584cf7..651405c899 100644 --- a/lib/testing/src/lib/protractor/process-services/actions/user-filters.util.ts +++ b/lib/testing/src/lib/protractor/process-services/actions/user-filters.util.ts @@ -32,7 +32,7 @@ export class UserFiltersUtil { async createATaskFilter(newTaskFilterName: string, sortType?: string, stateType?: string, assignmentType?: string, iconName?: string, appId?: number): Promise { try { return this.userFiltersApi.createUserTaskFilter(new UserTaskFilterRepresentation( - {appId: appId, name: newTaskFilterName, icon: iconName, filter: {sort: sortType, state: stateType, assignment: assignmentType}})); + {appId, name: newTaskFilterName, icon: iconName, filter: {sort: sortType, state: stateType, assignment: assignmentType}})); } catch (error) { Logger.error('Create Task Filter - Service error, Response: ', error); } @@ -48,7 +48,7 @@ export class UserFiltersUtil { async orderUserTaskFilters(filtersIdOrder: number[], appId?: number): Promise { try { - return this.userFiltersApi.orderUserTaskFilters(new UserFilterOrderRepresentation({appId: appId, order: filtersIdOrder})); + return this.userFiltersApi.orderUserTaskFilters(new UserFilterOrderRepresentation({appId, order: filtersIdOrder})); } catch (error) { Logger.error('Re-order the list of user task filters - Service error, Response: ', error); } @@ -56,7 +56,7 @@ export class UserFiltersUtil { async getUserTaskFilters(appId?: number): Promise { try { - return this.userFiltersApi.getUserTaskFilters({appId: appId}); + return this.userFiltersApi.getUserTaskFilters({appId}); } catch (error) { Logger.error('List task filters - Service error, Response: ', error); } @@ -64,7 +64,7 @@ export class UserFiltersUtil { async getUserProcessFilters(appId?: number): Promise { try { - return this.userFiltersApi.getUserProcessInstanceFilters({ appId: appId }); + return this.userFiltersApi.getUserProcessInstanceFilters({ appId }); } catch (error) { Logger.error('List process filters - Service error, Response: ', error); return new ResultListDataRepresentationUserProcessInstanceFilterRepresentation(); @@ -73,10 +73,8 @@ export class UserFiltersUtil { async getUserTaskFilterByName(taskFilterName: string, appId?: number): Promise { try { - const taskFiltersList = this.userFiltersApi.getUserTaskFilters({appId: appId}); - const chosenTaskFilter = (await taskFiltersList).data.find( (taskFilter) => { - return taskFilter.name === taskFilterName; - }); + const taskFiltersList = this.userFiltersApi.getUserTaskFilters({appId}); + const chosenTaskFilter = (await taskFiltersList).data.find( (taskFilter) => taskFilter.name === taskFilterName); return chosenTaskFilter; } catch (error) { Logger.error('Get user task filters by name - Service error, Response: ', error); @@ -94,7 +92,7 @@ export class UserFiltersUtil { async updateUserTaskFilter(filterId: number, updatedTaskFilterName?: string, updatedSortType?: string, updatedStateType?: string, updatedAssignmentType?: string, updatedIconName?: string, appId?: number): Promise { try { return this.userFiltersApi.updateUserTaskFilter(filterId, new UserTaskFilterRepresentation( - {appId: appId, name: updatedTaskFilterName, icon: updatedIconName, filter: {sort: updatedSortType, state: updatedStateType, assignment: updatedAssignmentType}})); + {appId, name: updatedTaskFilterName, icon: updatedIconName, filter: {sort: updatedSortType, state: updatedStateType, assignment: updatedAssignmentType}})); } catch (error) { Logger.error('Update a task filter - Service error, Response: ', error); } diff --git a/lib/testing/src/lib/shared/api/api.service.ts b/lib/testing/src/lib/shared/api/api.service.ts index 1f748c7b46..3886a768b5 100644 --- a/lib/testing/src/lib/shared/api/api.service.ts +++ b/lib/testing/src/lib/shared/api/api.service.ts @@ -74,6 +74,7 @@ export class ApiService { const accepts = ['application/json']; const headerParams = { + // eslint-disable-next-line @typescript-eslint/naming-convention Authorization: 'bearer ' + this.apiService.oauth2Auth.token }; @@ -94,6 +95,7 @@ export class ApiService { const accepts = ['application/json']; const headerParams = { + // eslint-disable-next-line @typescript-eslint/naming-convention Authorization: 'bearer ' + this.apiService.oauth2Auth.token }; @@ -114,6 +116,7 @@ export class ApiService { const accepts = ['application/json']; const headerParams = { + // eslint-disable-next-line @typescript-eslint/naming-convention Authorization: 'bearer ' + this.apiService.oauth2Auth.token }; diff --git a/lib/testing/src/lib/shared/api/api.util.ts b/lib/testing/src/lib/shared/api/api.util.ts index 3972005ae2..d025eeeeaa 100644 --- a/lib/testing/src/lib/shared/api/api.util.ts +++ b/lib/testing/src/lib/shared/api/api.util.ts @@ -34,10 +34,7 @@ export class ApiUtil { static retryCall(fn: () => Promise, retry: number = 30, delay: number = 1000): Promise { const pause = duration => new Promise(res => setTimeout(res, duration)); - - const run = retries => { - return fn().catch(err => (retries > 1 ? pause(delay).then(() => run(retries - 1)) : Promise.reject(err))); - }; + const run = retries => fn().catch(err => (retries > 1 ? pause(delay).then(() => run(retries - 1)) : Promise.reject(err))); return run(retry); } diff --git a/lib/testing/src/lib/shared/api/e2e-request-api.helper.ts b/lib/testing/src/lib/shared/api/e2e-request-api.helper.ts index a6bd131d71..6f4bf92d2a 100644 --- a/lib/testing/src/lib/shared/api/e2e-request-api.helper.ts +++ b/lib/testing/src/lib/shared/api/e2e-request-api.helper.ts @@ -31,18 +31,16 @@ export interface E2eRequestApiHelperOptions { responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text'; } -function getDefaultOptions(): E2eRequestApiHelperOptions { - return { - pathParams: {}, - queryParams: {}, - headerParams: {}, - formParams: {}, - bodyParam: {}, - contentTypes: ['application/json'], - accepts: ['application/json'], - returnType: undefined - }; -} +const getDefaultOptions = (): E2eRequestApiHelperOptions => ({ + pathParams: {}, + queryParams: {}, + headerParams: {}, + formParams: {}, + bodyParam: {}, + contentTypes: ['application/json'], + accepts: ['application/json'], + returnType: undefined +}); export class E2eRequestApiHelper { @@ -52,14 +50,6 @@ export class E2eRequestApiHelper { this.api = backend.apiService; } - private buildUrl(endPoint: string): string { - const trimSlash = (str: string) => str.replace(/^\/|\/$/g, ''); - const host = this.api.config.hostBpm; - const path = '/' + trimSlash(endPoint); - - return `${host}${path}`; - } - public get(endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { return this.request('GET', endPoint, overriddenOptions); } @@ -76,6 +66,14 @@ export class E2eRequestApiHelper { return this.request('DELETE', endPoint, overriddenOptions); } + private buildUrl(endPoint: string): string { + const trimSlash = (str: string) => str.replace(/^\/|\/$/g, ''); + const host = this.api.config.hostBpm; + const path = '/' + trimSlash(endPoint); + + return `${host}${path}`; + } + private request(httpMethod: string, endPoint: string, overriddenOptions?: E2eRequestApiHelperOptions): PromiseLike { const options = { ...getDefaultOptions(), diff --git a/lib/testing/src/lib/shared/utils/logger.ts b/lib/testing/src/lib/shared/utils/logger.ts index 992f61d916..835a84390e 100644 --- a/lib/testing/src/lib/shared/utils/logger.ts +++ b/lib/testing/src/lib/shared/utils/logger.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +/* eslint-disable @typescript-eslint/naming-convention */ + export const infoColor = '\x1b[36m%s\x1b[0m'; export const logColor = '\x1b[35m%s\x1b[0m'; export const warnColor = '\x1b[33m%s\x1b[0m'; @@ -31,7 +33,7 @@ export class LogLevelsEnum extends Number { static SILENT: number = 0; } -export let logLevels: { level: LogLevelsEnum; name: LOG_LEVEL }[] = [ +export const logLevels: { level: LogLevelsEnum; name: LOG_LEVEL }[] = [ { level: LogLevelsEnum.TRACE, name: 'TRACE' }, { level: LogLevelsEnum.DEBUG, name: 'DEBUG' }, { level: LogLevelsEnum.INFO, name: 'INFO' },