diff --git a/audit-info-3.2.1.md b/audit-info-3.2.1.md new file mode 100644 index 0000000000..a1721fb6c0 --- /dev/null +++ b/audit-info-3.2.1.md @@ -0,0 +1,27 @@ +--- +Title: License info, Alfresco Angular components 3.2.1 +--- + +# License information for Alfresco Angular components 3.2.1 + +This page lists all third party libraries that ADF 3.2.1 depends on. + +## Risks + +- Critical risk dependencies 0 +- High risk dependencies 0 +- Moderate risk dependencies 4 +- Low risk dependencies 1 + +Dependencies analyzed 64984 + +## Libraries + + +| Severity | Vulnerable versions | Module | +| --- | --- | --- | +|low | "<4.17.5" | lodash | +|moderate | "<4.17.11" | lodash | +|moderate | ">=0.3.14 <0.6.2" | marked | +|moderate | "<0.18.1" | axios | + diff --git a/e2e/content-services/document-list/document-list-pagination.e2e.ts b/e2e/content-services/document-list/document-list-pagination.e2e.ts index fcad7be4ec..45d6480a54 100644 --- a/e2e/content-services/document-list/document-list-pagination.e2e.ts +++ b/e2e/content-services/document-list/document-list-pagination.e2e.ts @@ -251,35 +251,26 @@ describe('Document List - Pagination', function () { paginationPage.selectItemsPerPage(itemsPerPage.twenty); contentServicesPage.checkAcsContainer(); contentServicesPage.waitForTableBody(); - contentServicesPage.getElementsDisplayedName().then((elements) => { - contentServicesPage.checkElementsSortedAsc(elements); - }); - contentServicesPage.sortByName(false); - contentServicesPage.getElementsDisplayedName().then(function (list) { - contentServicesPage.checkElementsSortedDesc(list); - }); + expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('ASC', 'Display name')); + + contentServicesPage.sortByName('DESC'); + expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); paginationPage.selectItemsPerPage(itemsPerPage.five); contentServicesPage.checkAcsContainer(); contentServicesPage.waitForTableBody(); - contentServicesPage.getElementsDisplayedName().then(function (list) { - contentServicesPage.checkElementsSortedDesc(list); - }); + expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); paginationPage.clickOnNextPage(); contentServicesPage.checkAcsContainer(); contentServicesPage.waitForTableBody(); - contentServicesPage.getElementsDisplayedName().then(function (list) { - contentServicesPage.checkElementsSortedDesc(list); - }); + expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); paginationPage.selectItemsPerPage(itemsPerPage.ten); contentServicesPage.checkAcsContainer(); contentServicesPage.waitForTableBody(); - contentServicesPage.getElementsDisplayedName().then(function (list) { - contentServicesPage.checkElementsSortedDesc(list); - }); + expect(contentServicesPage.getContentList().dataTablePage().checkListIsSorted('DESC', 'Display name')); }); it('[C260107] Should not display pagination bar when a folder is empty', () => { diff --git a/e2e/pages/adf/contentServicesPage.ts b/e2e/pages/adf/contentServicesPage.ts index 60a8545eb8..bdbef37a1e 100644 --- a/e2e/pages/adf/contentServicesPage.ts +++ b/e2e/pages/adf/contentServicesPage.ts @@ -22,8 +22,7 @@ import { DropActions } from '../../actions/drop.actions'; import { by, element, protractor, $$, browser } from 'protractor'; import path = require('path'); -import { DateUtil } from '../../util/dateUtil'; -import { BrowserVisibility, DocumentListPage, BrowserActions } from '@alfresco/adf-testing'; +import { BrowserVisibility, DocumentListPage, BrowserActions, DateUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from './navigationBarPage'; export class ContentServicesPage { @@ -183,50 +182,10 @@ export class ContentServicesPage { return this; } - getElementsDisplayedSize() { - return this.contentList.dataTablePage().getAllRowsColumnValues(this.columns.size); - } - - getElementsDisplayedName() { - return this.contentList.dataTablePage().getAllRowsColumnValues(this.columns.name); - } - getElementsDisplayedId() { return this.contentList.dataTablePage().getAllRowsColumnValues(this.columns.nodeId); } - checkElementsSortedAsc(elements) { - let sorted = true; - let i = 0; - - while (elements.length > 1 && sorted === true && i < (elements.length - 1)) { - const left = elements[i]; - const right = elements[i + 1]; - if (left > right) { - sorted = false; - } - i++; - } - - return sorted; - } - - checkElementsSortedDesc(elements) { - let sorted = true; - let i = 0; - - while (elements.length > 1 && sorted === true && i < (elements.length - 1)) { - const left = elements[i]; - const right = elements[i + 1]; - if (left < right) { - sorted = false; - } - i++; - } - - return sorted; - } - checkElementsDateSortedAsc(elements) { let sorted = true; let i = 0; @@ -328,19 +287,19 @@ export class ContentServicesPage { return this.contentList.getAllRowsColumnValues(this.columns.name); } - sortByName(sortOrder) { + sortByName(sortOrder: string) { return this.contentList.dataTable.sortByColumn(sortOrder, this.nameColumnHeader); } - sortByAuthor(sortOrder) { + sortByAuthor(sortOrder: string) { return this.contentList.dataTable.sortByColumn(sortOrder, this.createdByColumnHeader); } - sortByCreated(sortOrder) { + sortByCreated(sortOrder: string) { return this.contentList.dataTable.sortByColumn(sortOrder, this.createdColumnHeader); } - sortAndCheckListIsOrderedByName(sortOrder) { + sortAndCheckListIsOrderedByName(sortOrder: string) { this.sortByName(sortOrder); const deferred = protractor.promise.defer(); this.checkListIsSortedByNameColumn(sortOrder).then((result) => { @@ -349,23 +308,23 @@ export class ContentServicesPage { return deferred.promise; } - async checkListIsSortedByNameColumn(sortOrder) { + async checkListIsSortedByNameColumn(sortOrder: string) { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.name); } - async checkListIsSortedByCreatedColumn(sortOrder) { + async checkListIsSortedByCreatedColumn(sortOrder: string) { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.created); } - async checkListIsSortedByAuthorColumn(sortOrder) { + async checkListIsSortedByAuthorColumn(sortOrder: string) { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.createdBy); } - async checkListIsSortedBySizeColumn(sortOrder) { + async checkListIsSortedBySizeColumn(sortOrder: string) { return await this.contentList.dataTablePage().checkListIsSorted(sortOrder, this.columns.size); } - sortAndCheckListIsOrderedByAuthor(sortOrder) { + sortAndCheckListIsOrderedByAuthor(sortOrder: string) { this.sortByAuthor(sortOrder); const deferred = protractor.promise.defer(); this.checkListIsSortedByAuthorColumn(sortOrder).then((result) => { @@ -374,7 +333,7 @@ export class ContentServicesPage { return deferred.promise; } - sortAndCheckListIsOrderedByCreated(sortOrder) { + sortAndCheckListIsOrderedByCreated(sortOrder: string) { this.sortByCreated(sortOrder); const deferred = protractor.promise.defer(); this.checkListIsSortedByCreatedColumn(sortOrder).then((result) => { diff --git a/e2e/pages/adf/process-services/filtersPage.ts b/e2e/pages/adf/process-services/filtersPage.ts index 7b6e5402a5..5940bfe673 100644 --- a/e2e/pages/adf/process-services/filtersPage.ts +++ b/e2e/pages/adf/process-services/filtersPage.ts @@ -34,7 +34,7 @@ export class FiltersPage { return this; } - sortByName(sortOrder) { + sortByName(sortOrder: string) { this.dataTable.sortByColumn(sortOrder, 'name'); } diff --git a/e2e/pages/adf/process-services/processFiltersPage.ts b/e2e/pages/adf/process-services/processFiltersPage.ts index 97248b6f3b..b712ccd263 100644 --- a/e2e/pages/adf/process-services/processFiltersPage.ts +++ b/e2e/pages/adf/process-services/processFiltersPage.ts @@ -96,9 +96,9 @@ export class ProcessFiltersPage { /** * Sort the list by name column. * - * @param sortOrder : 'true' to sort the list ascendant and 'false' for descendant + * @param sortOrder : 'ASC' to sort the list ascendant and 'DESC' for descendant */ - sortByName(sortOrder) { + sortByName(sortOrder: string) { this.dataTable.sortByColumn(sortOrder, 'name'); } diff --git a/e2e/pages/adf/process-services/tasksPage.ts b/e2e/pages/adf/process-services/tasksPage.ts index eb0ef87899..d2be62ee67 100644 --- a/e2e/pages/adf/process-services/tasksPage.ts +++ b/e2e/pages/adf/process-services/tasksPage.ts @@ -151,11 +151,11 @@ export class TasksPage { } clickSortByNameAsc() { - return this.tasksListPage().getDataTable().sortByColumn(true, 'name'); + return this.tasksListPage().getDataTable().sortByColumn('ASC', 'name'); } clickSortByNameDesc() { - return this.tasksListPage().getDataTable().sortByColumn(false, 'name'); + return this.tasksListPage().getDataTable().sortByColumn('DESC', 'name'); } } diff --git a/e2e/pages/adf/searchFiltersPage.ts b/e2e/pages/adf/searchFiltersPage.ts index 1db76ba82e..a2cef05b6d 100644 --- a/e2e/pages/adf/searchFiltersPage.ts +++ b/e2e/pages/adf/searchFiltersPage.ts @@ -16,8 +16,7 @@ */ import { element, by } from 'protractor'; -import { SearchCategoriesPage } from './content-services/search/search-categories'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility, SearchCategoriesPage } from '@alfresco/adf-testing'; export class SearchFiltersPage { @@ -282,12 +281,12 @@ export class SearchFiltersPage { return this; } - checkFileTypeFacetLabelIsDisplayed(fileType) { + checkFileTypeFacetLabelIsDisplayed(fileType: string | RegExp) { BrowserVisibility.waitUntilElementIsVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); return this; } - checkFileTypeFacetLabelIsNotDisplayed(fileType) { + checkFileTypeFacetLabelIsNotDisplayed(fileType: string | RegExp) { BrowserVisibility.waitUntilElementIsNotVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType))); return this; } diff --git a/e2e/pages/adf/searchResultsPage.ts b/e2e/pages/adf/searchResultsPage.ts index e39e792011..a29f76831f 100644 --- a/e2e/pages/adf/searchResultsPage.ts +++ b/e2e/pages/adf/searchResultsPage.ts @@ -16,10 +16,9 @@ */ import { DataTableComponentPage } from '@alfresco/adf-testing'; -import { SearchSortingPickerPage } from './content-services/search/components/search-sortingPicker.page'; import { element, by } from 'protractor'; import { ContentServicesPage } from './contentServicesPage'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility, SearchSortingPickerPage } from '@alfresco/adf-testing'; export class SearchResultsPage { @@ -36,14 +35,6 @@ export class SearchResultsPage { this.dataTable.tableIsLoaded(); } - closeActionButton() { - const container = element(by.css('div.cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing')); - BrowserVisibility.waitUntilElementIsVisible(container); - container.click(); - BrowserVisibility.waitUntilElementIsNotVisible(container); - return this; - } - checkContentIsDisplayed(content) { this.dataTable.checkContentIsDisplayed('Display name', content); return this; @@ -77,46 +68,33 @@ export class SearchResultsPage { this.contentServices.deleteContent(content); } - checkDeleteIsDisabled(content) { - this.contentServices.checkDeleteIsDisabled(content); - this.closeActionButton(); - } - - sortByName(sortOrder) { + sortByName(sortOrder: string) { this.searchSortingPicker.sortBy(sortOrder, 'Name'); } - sortByAuthor(sortOrder) { + sortByAuthor(sortOrder: string) { this.searchSortingPicker.sortBy(sortOrder, 'Author'); } - sortByCreated(sortOrder) { + sortByCreated(sortOrder: string) { this.searchSortingPicker.sortBy(sortOrder, 'Created'); } - sortBySize(sortOrder) { + sortBySize(sortOrder: string) { this.searchSortingPicker.sortBy(sortOrder, 'Size'); return this; } async checkListIsOrderedByNameAsc() { - const list = await this.contentServices.getElementsDisplayedName(); - return this.contentServices.checkElementsSortedAsc(list); + return this.contentServices.contentList.dataTablePage().checkListIsSorted('ASC', 'Display name'); } async checkListIsOrderedByNameDesc() { - const list = await this.contentServices.getElementsDisplayedName(); - return this.contentServices.checkElementsSortedDesc(list); + return this.contentServices.contentList.dataTablePage().checkListIsSorted('DESC', 'Display name'); } async checkListIsOrderedByAuthorAsc() { - const authorList = await this.dataTable.geCellElementDetail('Created by'); - return this.contentServices.checkElementsSortedAsc(authorList); - } - - async checkListIsOrderedByAuthorDesc() { - const authorList = await this.dataTable.geCellElementDetail('Created by'); - return this.contentServices.checkElementsSortedDesc(authorList); + return this.contentServices.contentList.dataTablePage().checkListIsSorted('ASC', 'Created by'); } } diff --git a/e2e/process-services-cloud/process-custom-filters.e2e.ts b/e2e/process-services-cloud/process-custom-filters.e2e.ts index e2f64721f4..c2303a1e15 100644 --- a/e2e/process-services-cloud/process-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/process-custom-filters.e2e.ts @@ -90,6 +90,7 @@ xdescribe('Process list cloud', () => { 'processInstanceId', 'order', 'sort', + 'initiator', 'order' ], 'sortProperties': [ @@ -107,7 +108,7 @@ xdescribe('Process list cloud', () => { done(); }, 5 * 60 * 1000); - afterAll(async(done) => { + afterAll(async (done) => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); done(); @@ -124,45 +125,23 @@ xdescribe('Process list cloud', () => { it('[C290069] Should display processes ordered by name when Name is selected from sort dropdown', async () => { processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING') .setSortFilterDropDown('Name').setOrderFilterDropDown('ASC'); - processCloudDemoPage.processListCloudComponent().getAllRowsNameColumn().then(function (list) { - const initialList = list.slice(0); - list.sort(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + + expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - processCloudDemoPage.processListCloudComponent().getAllRowsNameColumn().then(function (list) { - const initialList = list.slice(0); - list.sort(); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + + expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); + }); it('[C291783] Should display processes ordered by id when Id is selected from sort dropdown', async () => { processCloudDemoPage.editProcessFilterCloudComponent().clickCustomiseFilterHeader().setStatusFilterDropDown('RUNNING') .setSortFilterDropDown('Id').setOrderFilterDropDown('ASC'); - processCloudDemoPage.processListCloudComponent().getDataTable(); - browser.driver.sleep(1000); - processCloudDemoPage.getAllRowsByIdColumn().then(function (list) { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); processCloudDemoPage.editProcessFilterCloudComponent().setOrderFilterDropDown('DESC'); - processCloudDemoPage.processListCloudComponent().getDataTable(); - browser.driver.sleep(1000); - processCloudDemoPage.getAllRowsByIdColumn().then(function (list) { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(processCloudDemoPage.processListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); + }); it('[C297697] The value of the filter should be preserved when saving it', async () => { diff --git a/e2e/process-services-cloud/task-list-properties.e2e.ts b/e2e/process-services-cloud/task-list-properties.e2e.ts index dd6c531dd8..9d97986f7d 100644 --- a/e2e/process-services-cloud/task-list-properties.e2e.ts +++ b/e2e/process-services-cloud/task-list-properties.e2e.ts @@ -20,14 +20,13 @@ import { StringUtil, TasksService, ProcessDefinitionsService, ProcessInstancesService, LoginSSOPage, ApiService, - AppListCloudPage, LocalStorageUtil, IdentityService, SettingsPage, GroupIdentityService + AppListCloudPage, LocalStorageUtil, IdentityService, SettingsPage, GroupIdentityService, DateUtil } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; import { TaskListCloudConfiguration } from './taskListCloud.config'; import moment = require('moment'); -import { DateUtil } from '../util/dateUtil'; import resources = require('../util/resources'); @@ -49,7 +48,8 @@ describe('Edit task filters and task list properties', () => { const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; const candidateBaseApp = resources.ACTIVITI7_APPS.CANDIDATE_BASE_APP.name; const noTasksFoundMessage = 'No Tasks Found'; - let createdTask, notAssigned, notDisplayedTask, processDefinition, processInstance, priorityTask, subTask, otherOwnerTask, testUser, groupInfo; + let createdTask, notAssigned, notDisplayedTask, processDefinition, processInstance, priorityTask, subTask, + otherOwnerTask, testUser, groupInfo; const priority = 30; const beforeDate = moment().add(-1, 'days').format('DD/MM/YYYY'); @@ -75,7 +75,7 @@ describe('Edit task filters and task list properties', () => { createdTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp); await tasksService.claimTask(createdTask.entry.id, simpleApp); notAssigned = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp); - priorityTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp, {priority: priority}); + priorityTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp, { priority: priority }); await tasksService.claimTask(priorityTask.entry.id, simpleApp); notDisplayedTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); await tasksService.claimTask(notDisplayedTask.entry.id, candidateBaseApp); @@ -85,7 +85,7 @@ describe('Edit task filters and task list properties', () => { processInstancesService = new ProcessInstancesService(apiService); processInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); - subTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp, {'parentTaskId': createdTask.entry.id}); + subTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp, { 'parentTaskId': createdTask.entry.id }); await tasksService.claimTask(subTask.entry.id, simpleApp); const jsonFile = new TaskListCloudConfiguration().getConfiguration(); @@ -135,7 +135,7 @@ describe('Edit task filters and task list properties', () => { done(); }, 5 * 60 * 1000); - afterAll(async(done) => { + afterAll(async (done) => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); await identityService.deleteIdentityUser(testUser.idIdentityService); done(); @@ -383,241 +383,85 @@ describe('Edit task filters and task list properties', () => { it('[C306901] Should display tasks sorted by task name when taskName is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') .setSortFilterDropDown('Name').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsNameColumn().then( (list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsNameColumn().then( (list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); + }); it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') .setSortFilterDropDown('Id').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); + }); it('[C306903] Should display tasks sorted by processDefinitionId when processDefinitionId is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') .setSortFilterDropDown('ProcessDefinitionId').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByProcessDefIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessDefinitionId')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByProcessDefIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessDefinitionId')).toBe(true); }); it('[C306905] Should display tasks sorted by processInstanceId when processInstanceId is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED') .setSortFilterDropDown('ProcessInstanceId').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByProcessInstanceIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessInstanceId')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByProcessInstanceIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessInstanceId')).toBe(true); }); it('[C306907] Should display tasks sorted by assignee when assignee is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') .setSortFilterDropDown('Assignee').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByAssigneeColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Assignee')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByAssigneeColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Assignee')).toBe(true); }); it('[C306911] Should display tasks sorted by parentTaskId when parentTaskId is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') .setSortFilterDropDown('ParentTaskId').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByParentTaskIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ParentTaskId')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByParentTaskIdColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ParentTaskId')).toBe(true); }); it('[C306909] Should display tasks sorted by priority when priority is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') .setSortFilterDropDown('Priority').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByPriorityColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Priority')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByPriorityColumn().then((list) => { - list = list.map(Number); - const initialList = list.slice(0); - list.sort((a, b) => b - a); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Priority')).toBe(true); + }); it('[C307114] Should display tasks sorted by standAlone when standAlone is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') .setSortFilterDropDown('StandAlone').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByStandAloneColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'StandAlone')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByStandAloneColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'StandAlone')).toBe(true); }); it('[C307115] Should display tasks sorted by owner when owner is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee().setStatusFilterDropDown('ALL') .setSortFilterDropDown('Owner').setOrderFilterDropDown('ASC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByOwnerColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Owner')).toBe(true); tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getAllRowsByOwnerColumn().then((list) => { - const initialList = list.slice(0); - list.sort(function (firstStr, secondStr) { - return firstStr.localeCompare(secondStr); - }); - list.reverse(); - expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); - }); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Owner')).toBe(true); }); }); diff --git a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts index 4f981bb4c5..824a284aa6 100644 --- a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts @@ -55,7 +55,7 @@ describe('Task filters cloud', () => { completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(), deletedTaskName = StringUtil.generateRandomString(); const simpleApp = resources.ACTIVITI7_APPS.SIMPLE_APP.name; - let assignedTask, deletedTask, suspendedTasks, testUser, groupInfo; + let assignedTask, deletedTask, testUser, groupInfo; const orderByNameAndPriority = ['cCreatedTask', 'dCreatedTask', 'eCreatedTask']; let priority = 30; const nrOfTasks = 3; @@ -90,7 +90,6 @@ describe('Task filters cloud', () => { const secondProcessInstance = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); queryService = new QueryService(apiService); - suspendedTasks = await queryService.getProcessInstanceTasks(processInstance.entry.id, simpleApp); await queryService.getProcessInstanceTasks(secondProcessInstance.entry.id, simpleApp); await processInstancesService.suspendProcessInstance(processInstance.entry.id, simpleApp); await processInstancesService.deleteProcessInstance(secondProcessInstance.entry.id, simpleApp); @@ -148,16 +147,6 @@ describe('Task filters cloud', () => { tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(completedTaskName); }); - it('[C290154] Should display only tasks with suspended statuses when Suspended is selected from status dropdown', () => { - tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee() - .setStatusFilterDropDown('SUSPENDED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedById(suspendedTasks.list.entries[0].entry.id); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(deletedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(createdTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); - }); - it('[C290060] Should display only tasks with Created status when Created is selected from status dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee().setStatusFilterDropDown('CREATED'); tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(createdTaskName); @@ -168,7 +157,6 @@ describe('Task filters cloud', () => { it('[C290155] Should display only tasks with Cancelled status when Cancelled is selected from status dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignee().setStatusFilterDropDown('CANCELLED'); - tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(suspendedTasks.list.entries[0].entry.name); tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(deletedTaskName); tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(assignedTaskName); tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(completedTaskName); diff --git a/e2e/process-services/custom-tasks-filters.e2e.ts b/e2e/process-services/custom-tasks-filters.e2e.ts index f3165c6d2d..8086ed7baa 100644 --- a/e2e/process-services/custom-tasks-filters.e2e.ts +++ b/e2e/process-services/custom-tasks-filters.e2e.ts @@ -18,7 +18,7 @@ import { LoginPage } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { TaskListDemoPage } from '../pages/adf/demo-shell/process-services/taskListDemoPage'; -import { PaginationPage } from '@alfresco/adf-testing'; +import { PaginationPage, DateUtil } from '@alfresco/adf-testing'; import moment = require('moment'); import { Tenant } from '../models/APS/tenant'; @@ -31,7 +31,6 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { AppsActions } from '../actions/APS/apps.actions'; import { AppsRuntimeActions } from '../actions/APS/appsRuntime.actions'; import { UsersActions } from '../actions/users.actions'; -import { DateUtil } from '../util/dateUtil'; describe('Start Task - Custom App', () => { diff --git a/e2e/process-services/dynamic-table-date-picker.e2e.ts b/e2e/process-services/dynamic-table-date-picker.e2e.ts index 59a571674f..3a2ba5df73 100644 --- a/e2e/process-services/dynamic-table-date-picker.e2e.ts +++ b/e2e/process-services/dynamic-table-date-picker.e2e.ts @@ -15,10 +15,9 @@ * limitations under the License. */ -import { LoginPage, Widget } from '@alfresco/adf-testing'; +import { LoginPage, Widget, DatePickerPage } from '@alfresco/adf-testing'; import { ProcessFiltersPage } from '../pages/adf/process-services/processFiltersPage'; import { ProcessServiceTabBarPage } from '../pages/adf/process-services/processServiceTabBarPage'; -import { DatePickerPage } from '../pages/adf/material/datePickerPage'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; import { browser } from 'protractor'; @@ -38,7 +37,7 @@ describe('Dynamic Table', () => { const widget = new Widget(); let user, tenantId, appId, apps, users; - beforeAll(async(done) => { + beforeAll(async (done) => { this.alfrescoJsApi = new AlfrescoApi({ provider: 'BPM', hostBpm: browser.params.testConfig.adf.url @@ -56,7 +55,7 @@ describe('Dynamic Table', () => { done(); }); - afterAll(async(done) => { + afterAll(async (done) => { await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); @@ -75,7 +74,7 @@ describe('Dynamic Table', () => { const rowPosition = 0; - beforeAll(async(done) => { + beforeAll(async (done) => { await this.alfrescoJsApi.login(user.email, user.password); const importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); @@ -86,7 +85,7 @@ describe('Dynamic Table', () => { done(); }); - afterAll(async(done) => { + afterAll(async (done) => { await this.alfrescoJsApi.login(user.email, user.password); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); @@ -129,7 +128,7 @@ describe('Dynamic Table', () => { const app = resources.Files.APP_DYNAMIC_TABLE_DROPDOWN; const dropdown = widget.dropdown(); - beforeAll(async(done) => { + beforeAll(async (done) => { await this.alfrescoJsApi.login(user.email, user.password); @@ -141,7 +140,7 @@ describe('Dynamic Table', () => { done(); }); - afterAll(async(done) => { + afterAll(async (done) => { await this.alfrescoJsApi.login(user.email, user.password); await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); diff --git a/e2e/process-services/processlist-pagination.e2e.ts b/e2e/process-services/processlist-pagination.e2e.ts index 5355c387b4..5bce76670f 100644 --- a/e2e/process-services/processlist-pagination.e2e.ts +++ b/e2e/process-services/processlist-pagination.e2e.ts @@ -376,11 +376,11 @@ describe('Process List - Pagination', function () { processDetailsPage.checkProcessTitleIsDisplayed(); processFiltersPage.waitForTableBody(); - processFiltersPage.sortByName(true); + processFiltersPage.sortByName('ASC'); processFiltersPage.waitForTableBody(); processFiltersPage.checkProcessesSortedByNameAsc(); - processFiltersPage.sortByName(false); + processFiltersPage.sortByName('DESC'); processFiltersPage.waitForTableBody(); processFiltersPage.checkProcessesSortedByNameDesc(); }); @@ -395,7 +395,7 @@ describe('Process List - Pagination', function () { processDetailsPage.checkProcessTitleIsDisplayed(); processFiltersPage.waitForTableBody(); - processFiltersPage.sortByName(true); + processFiltersPage.sortByName('ASC'); processFiltersPage.waitForTableBody(); processFiltersPage.checkProcessesSortedByNameAsc(); diff --git a/e2e/process-services/sort-tasklist-pagination.e2e.ts b/e2e/process-services/sort-tasklist-pagination.e2e.ts index a3a2a63d0b..cac8574755 100644 --- a/e2e/process-services/sort-tasklist-pagination.e2e.ts +++ b/e2e/process-services/sort-tasklist-pagination.e2e.ts @@ -83,12 +83,12 @@ describe('Task List Pagination - Sorting', () => { taskPage.tasksListPage().getDataTable().waitForTableBody(); paginationPage.selectItemsPerPage(itemsPerPage.twenty); taskPage.tasksListPage().getDataTable().waitForTableBody(); - taskPage.filtersPage().sortByName(true); + taskPage.filtersPage().sortByName('ASC'); taskPage.tasksListPage().getDataTable().waitForTableBody(); taskPage.filtersPage().getAllRowsNameColumn().then(function (list) { expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); }); - taskPage.filtersPage().sortByName(false); + taskPage.filtersPage().sortByName('DESC'); taskPage.filtersPage().getAllRowsNameColumn().then(function (list) { taskNames.reverse(); expect(JSON.stringify(list) === JSON.stringify(taskNames)).toEqual(true); diff --git a/e2e/search/components/search-date-range.e2e.ts b/e2e/search/components/search-date-range.e2e.ts index 722cee6fc3..3ee33a10f6 100644 --- a/e2e/search/components/search-date-range.e2e.ts +++ b/e2e/search/components/search-date-range.e2e.ts @@ -15,18 +15,16 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil } from '@alfresco/adf-testing'; +import { LoginPage, LocalStorageUtil, DatePickerPage, DateUtil } from '@alfresco/adf-testing'; import { SearchDialog } from '../../pages/adf/dialog/searchDialog'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { SearchResultsPage } from '../../pages/adf/searchResultsPage'; -import { DatePickerPage } from '../../pages/adf/material/datePickerPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { SearchFiltersPage } from '../../pages/adf/searchFiltersPage'; import { SearchConfiguration } from '../search.config'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser } from 'protractor'; -import { DateUtil } from '../../util/dateUtil'; describe('Search Date Range Filter', () => { @@ -131,7 +129,7 @@ describe('Search Date Range Filter', () => { dateRangeFilter.checkApplyButtonIsEnabled() .clickApplyButton(); - searchResults.sortByCreated(true); + searchResults.sortByCreated('ASC'); browser.controlFlow().execute(async () => { const results = await dataTable.geCellElementDetail('Created'); diff --git a/e2e/search/components/search-number-range.e2e.ts b/e2e/search/components/search-number-range.e2e.ts index 393f1f2fc8..bff19c5b25 100644 --- a/e2e/search/components/search-number-range.e2e.ts +++ b/e2e/search/components/search-number-range.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil } from '@alfresco/adf-testing'; +import { LoginPage, LocalStorageUtil, DateUtil } from '@alfresco/adf-testing'; import { SearchDialog } from '../../pages/adf/dialog/searchDialog'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { SearchResultsPage } from '../../pages/adf/searchResultsPage'; @@ -29,7 +29,6 @@ import { FileModel } from '../../models/ACS/fileModel'; import { browser } from 'protractor'; import resources = require('../../util/resources'); import { SearchConfiguration } from '../search.config'; -import { DateUtil } from '../../util/dateUtil'; describe('Search Number Range Filter', () => { @@ -165,7 +164,7 @@ describe('Search Number Range Filter', () => { sizeRangeFilter.clickApplyButton(); searchResults.tableIsLoaded(); - searchResults.sortBySize(false); + searchResults.sortBySize('DESC'); browser.controlFlow().execute(async () => { const results = await dataTable.geCellElementDetail('Size'); @@ -196,7 +195,7 @@ describe('Search Number Range Filter', () => { expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true); sizeRangeFilter.clickApplyButton(); - searchResults.sortBySize(false); + searchResults.sortBySize('DESC'); browser.controlFlow().execute(async () => { const results = await dataTable.geCellElementDetail('Size'); @@ -214,7 +213,7 @@ describe('Search Number Range Filter', () => { searchFilters.checkNameFilterIsDisplayed() .checkNameFilterIsExpanded(); nameFilter.searchByName('z*'); - searchResults.sortBySize(false); + searchResults.sortBySize('DESC'); browser.controlFlow().execute(async () => { const results = await dataTable.geCellElementDetail('Size'); @@ -270,7 +269,7 @@ describe('Search Number Range Filter', () => { sizeRangeFilter.clickApplyButton(); searchResults.tableIsLoaded(); - searchResults.sortBySize(false); + searchResults.sortBySize('DESC'); browser.controlFlow().execute(async () => { const results = await dataTable.geCellElementDetail('Size'); @@ -308,7 +307,7 @@ describe('Search Number Range Filter', () => { expect(sizeRangeFilter.getToNumber()).toEqual(''); sizeRangeFilter.putFromNumber(0).putToNumber(1).clickApplyButton(); - searchResults.sortBySize(false); + searchResults.sortBySize('DESC'); browser.controlFlow().execute(async () => { const results = await dataTable.geCellElementDetail('Size'); @@ -418,7 +417,7 @@ describe('Search Number Range Filter', () => { sizeRangeFilter.clickApplyButton(); searchResults.tableIsLoaded(); - searchResults.sortByCreated(false); + searchResults.sortByCreated('DESC'); browser.controlFlow().execute(async () => { const results = await dataTable.geCellElementDetail('Created'); diff --git a/e2e/search/components/search-slider.e2e.ts b/e2e/search/components/search-slider.e2e.ts index e893e677b9..4c66fe9df8 100644 --- a/e2e/search/components/search-slider.e2e.ts +++ b/e2e/search/components/search-slider.e2e.ts @@ -118,7 +118,7 @@ describe('Search Number Range Filter', () => { it('[C276981] Should be able to clear value in Search Size Slider', () => { const size = 5; sizeSliderFilter.checkSliderIsDisplayed().setValue(size); - searchResults.sortBySize(false) + searchResults.sortBySize('DESC') .tableIsLoaded(); browser.controlFlow().execute(async () => { @@ -137,7 +137,7 @@ describe('Search Number Range Filter', () => { sizeSliderFilter.checkSliderIsDisplayed() .clickClearButton(); - searchResults.sortBySize(false) + searchResults.sortBySize('DESC') .tableIsLoaded(); browser.controlFlow().execute(async () => { diff --git a/e2e/search/components/search-sorting-picker.e2e.ts b/e2e/search/components/search-sorting-picker.e2e.ts index 7a040b6a10..7b777d78da 100644 --- a/e2e/search/components/search-sorting-picker.e2e.ts +++ b/e2e/search/components/search-sorting-picker.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, LocalStorageUtil, BrowserActions } from '@alfresco/adf-testing'; +import { LoginPage, LocalStorageUtil, BrowserActions, SearchSortingPickerPage } from '@alfresco/adf-testing'; import { SearchDialog } from '../../pages/adf/dialog/searchDialog'; import { SearchResultsPage } from '../../pages/adf/searchResultsPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; @@ -29,7 +29,6 @@ import { AcsUserModel } from '../../models/ACS/acsUserModel'; import { browser } from 'protractor'; import resources = require('../../util/resources'); import { SearchConfiguration } from '../search.config'; -import { SearchSortingPickerPage } from '../../pages/adf/content-services/search/components/search-sortingPicker.page'; describe('Search Sorting Picker', () => { @@ -175,29 +174,20 @@ describe('Search Sorting Picker', () => { it('[C277280] Should be able to sort the search results by "Name" ASC', () => { searchFilters.checkSearchFiltersIsDisplayed(); searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - searchResults.sortByName(true); + searchResults.sortByName('ASC'); + expect(searchResults.checkListIsOrderedByNameAsc()).toBe(true); }); it('[C277281] Should be able to sort the search results by "Name" DESC', () => { searchFilters.checkSearchFiltersIsDisplayed(); searchFilters.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`); - searchResults.sortByName(false); + searchResults.sortByName('DESC'); expect(searchResults.checkListIsOrderedByNameDesc()).toBe(true); }); - it('[C277282] Should be able to sort the search results by "Author" ASC', () => { - searchResults.sortByAuthor(true); - expect(searchResults.checkListIsOrderedByAuthorAsc()).toBe(true); - }); - - it('[C277283] Should be able to sort the search results by "Author" DESC', () => { - searchResults.sortByAuthor(false); - expect(searchResults.checkListIsOrderedByAuthorDesc()).toBe(true); - }); - it('[C277286] Should be able to sort the search results by "Created Date" ASC', () => { - searchResults.sortByCreated(true); + searchResults.sortByCreated('ASC'); browser.controlFlow().execute(async () => { const results = await searchResults.dataTable.geCellElementDetail('Created'); expect(contentServices.checkElementsDateSortedAsc(results)).toBe(true); @@ -205,7 +195,7 @@ describe('Search Sorting Picker', () => { }); it('[C277287] Should be able to sort the search results by "Created Date" DESC', () => { - searchResults.sortByCreated(false); + searchResults.sortByCreated('DESC'); browser.controlFlow().execute(async () => { const results = await searchResults.dataTable.geCellElementDetail('Created'); expect(contentServices.checkElementsDateSortedDesc(results)).toBe(true); @@ -230,7 +220,7 @@ describe('Search Sorting Picker', () => { .enterTextAndPressEnter(search); searchSortingPicker.checkSortingSelectorIsDisplayed() - .sortBy(true, 'Modified Date'); + .sortBy('ASC', 'Modified Date'); browser.controlFlow().execute(async () => { const idList = await contentServices.getElementsDisplayedId(); @@ -245,25 +235,4 @@ describe('Search Sorting Picker', () => { }); }); - it('[C277301] Should be able to change default sorting option for the search results', async () => { - navigationBar.clickContentServicesButton(); - - jsonFile = SearchConfiguration.getConfiguration(); - jsonFile.sorting.options.push({ - 'key': 'createdByUser', - 'label': 'Author', - 'type': 'FIELD', - 'field': 'cm:creator', - 'ascending': true - }); - - await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile)); - - searchDialog.checkSearchIconIsVisible() - .clickOnSearchIcon() - .enterTextAndPressEnter(search); - - searchSortingPicker.checkSortingSelectorIsDisplayed(); - expect(searchResults.checkListIsOrderedByAuthorAsc()).toBe(true); - }); }); diff --git a/lib/cli/README.md b/lib/cli/README.md index 1d3865eb6e..06a2edf971 100644 --- a/lib/cli/README.md +++ b/lib/cli/README.md @@ -9,16 +9,21 @@ The ADF CLI manages, builds , doc and test your ADF Application projects. ## Installation To get started follow these instructions: - - -``sh -npm install aadf-cli -g +`` +npm install adf-cli -g `` ### License Check -Move in the folder where you have your pacakge.json and run the command: +Move in the folder where you have your package.json and run the command: ```bash adf-license ``` +### Audit Check + +Move in the folder where you have your package.json and run the command: + +```bash +adf-audit +``` diff --git a/lib/cli/bin/doc/audit.js b/lib/cli/bin/doc/audit.js new file mode 100755 index 0000000000..7a0eef1fd4 --- /dev/null +++ b/lib/cli/bin/doc/audit.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +var shell = require('shelljs'); +var cmd = "npm audit --json"; +var ejs = require('ejs'); +var path = require('path'); +var fs = require('fs'); + +var templatePath = path.resolve(__dirname, 'templates', 'auditPage.ejs'); + + +try { + var jsonAudit = shell.exec(cmd, {silent:true}); +} catch(err) { + console.error('error'+ err); +} + +var packageJson = JSON.parse(fs.readFileSync(path.resolve('./','package.json'))); + +ejs.renderFile(templatePath, { + jsonAudit: JSON.parse(jsonAudit), + projVersion: packageJson.version, + projName: packageJson.description +}, {}, (err, mdText) => { + if (err) { + console.log(err); + } else { + fs.writeFileSync(`audit-info-${packageJson.version}.md`, mdText); + console.log(`Wrote Audit`); + } +}); + diff --git a/lib/cli/bin/doc/templates/auditPage.ejs b/lib/cli/bin/doc/templates/auditPage.ejs new file mode 100644 index 0000000000..0534d802c9 --- /dev/null +++ b/lib/cli/bin/doc/templates/auditPage.ejs @@ -0,0 +1,31 @@ +--- +Title: License info, <%= projName %> <%= projVersion %> +--- + +# License information for <%= projName %> <%= projVersion %> + +This page lists all third party libraries that ADF <%= projVersion %> depends on. + +## Risks + +- Critical risk dependencies <%= jsonAudit.metadata.vulnerabilities.critical %> +- High risk dependencies <%= jsonAudit.metadata.vulnerabilities.high %> +- Moderate risk dependencies <%= jsonAudit.metadata.vulnerabilities.moderate %> +- Low risk dependencies <%= jsonAudit.metadata.vulnerabilities.low %> + +Dependencies analyzed <%= jsonAudit.metadata.totalDependencies %> + +## Libraries + + +| Severity | Vulnerable versions | Module | +| --- | --- | --- | +<% +for(var currentAdvisories in jsonAudit.advisories) { + + severity = jsonAudit.advisories[currentAdvisories].severity; + vulnerable_versions = JSON.stringify(jsonAudit.advisories[currentAdvisories].vulnerable_versions); + module = jsonAudit.advisories[currentAdvisories].module_name; +-%> +|<%= severity %> | <%= vulnerable_versions %> | <%= module %> | +<% } %> diff --git a/lib/cli/package-lock.json b/lib/cli/package-lock.json index b6ebc584f0..ac8073c625 100644 --- a/lib/cli/package-lock.json +++ b/lib/cli/package-lock.json @@ -4,11 +4,36 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -17,6 +42,11 @@ "color-convert": "^1.9.0" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -32,6 +62,11 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -41,6 +76,52 @@ "concat-map": "0.0.1" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" + }, + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "requires": { + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + } + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -51,6 +132,11 @@ "supports-color": "^5.3.0" } }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -64,11 +150,50 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -91,11 +216,90 @@ "wrappy": "1" } }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -129,6 +333,70 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -143,11 +411,31 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, "license-checker": { "version": "25.0.1", "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", @@ -165,6 +453,33 @@ "treeify": "^1.1.0" } }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-fetch-happen": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", + "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^11.0.1", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -178,6 +493,23 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -186,11 +518,34 @@ "minimist": "0.0.8" } }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", @@ -211,6 +566,30 @@ "validate-npm-package-license": "^3.0.1" } }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", + "integrity": "sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==", + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "npm-package-arg": "^6.1.0" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -238,6 +617,16 @@ "os-tmpdir": "^1.0.0" } }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -248,6 +637,60 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, "read-installed": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", @@ -274,6 +717,20 @@ "slash": "^1.0.0" } }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "readdir-scoped-modules": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", @@ -285,6 +742,14 @@ "once": "^1.3.0" } }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, "resolve": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", @@ -293,11 +758,52 @@ "path-parse": "^1.0.6" } }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -308,6 +814,39 @@ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==" + }, + "socks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, "spdx-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", @@ -366,6 +905,36 @@ "spdx-ranges": "^2.0.0" } }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -374,11 +943,51 @@ "has-flag": "^3.0.0" } }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "treeify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, "util-extend": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", @@ -393,10 +1002,33 @@ "spdx-expression-parse": "^3.0.0" } }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "requires": { + "builtins": "^1.0.3" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } } diff --git a/lib/cli/package.json b/lib/cli/package.json index d4944a1c05..1e68a13f65 100644 --- a/lib/cli/package.json +++ b/lib/cli/package.json @@ -4,7 +4,8 @@ "version": "3.2.1", "author": "Alfresco Software, Ltd.", "bin": { - "adf-license": "./bin/doc/licenseList.js" + "adf-license": "./bin/doc/licenseList.js", + "adf-audit": "./bin/doc/audit.js" }, "repository": { "type": "git", @@ -14,9 +15,11 @@ "url": "https://github.com/Alfresco/alfresco-ng2-components/issues" }, "dependencies": { - "spdx-license-list": "^5.0.0", + "commander": "^2.15.1", "license-checker": "^25.0.1", - "commander": "^2.15.1" + "npm-registry-fetch": "^3.9.0", + "shelljs": "^0.8.3", + "spdx-license-list": "^5.0.0" }, "keywords": [ "alfresco-component" diff --git a/lib/testing/src/lib/content-services/pages/public-api.ts b/lib/testing/src/lib/content-services/pages/public-api.ts index b1a2c48f3f..0134cd36c6 100644 --- a/lib/testing/src/lib/content-services/pages/public-api.ts +++ b/lib/testing/src/lib/content-services/pages/public-api.ts @@ -18,3 +18,5 @@ export * from './like.page'; export * from './rate.page'; export * from './document-list.page'; + +export * from './search/public-api'; diff --git a/e2e/pages/adf/content-services/search/components/dateRangeFilterPage.ts b/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts similarity index 96% rename from e2e/pages/adf/content-services/search/components/dateRangeFilterPage.ts rename to lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts index 2be8311358..9cc579c282 100644 --- a/e2e/pages/adf/content-services/search/components/dateRangeFilterPage.ts +++ b/lib/testing/src/lib/content-services/pages/search/date-range-filter.page.ts @@ -16,8 +16,8 @@ */ import { by, browser, protractor } from 'protractor'; -import { DatePickerPage } from '../../../material/datePickerPage'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { DatePickerPage } from '../../../material/pages/date-picker.page'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class DateRangeFilterPage { @@ -71,7 +71,7 @@ export class DateRangeFilterPage { return this; } - checkFromErrorMessageIsDisplayed(msg) { + checkFromErrorMessageIsDisplayed(msg: string) { BrowserVisibility.waitUntilElementIsVisible(this.filter.element(this.fromErrorMessage)); browser.controlFlow().execute(async () => { await expect(this.filter.element(this.fromErrorMessage).getText()).toEqual(msg); diff --git a/e2e/pages/adf/content-services/search/components/numberRangeFilterPage.ts b/lib/testing/src/lib/content-services/pages/search/number-range-filter.page.ts similarity index 97% rename from e2e/pages/adf/content-services/search/components/numberRangeFilterPage.ts rename to lib/testing/src/lib/content-services/pages/search/number-range-filter.page.ts index de9b99842e..73019dc046 100644 --- a/e2e/pages/adf/content-services/search/components/numberRangeFilterPage.ts +++ b/lib/testing/src/lib/content-services/pages/search/number-range-filter.page.ts @@ -15,7 +15,8 @@ * limitations under the License. */ import { by, protractor } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { BrowserActions } from '../../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class NumberRangeFilterPage { diff --git a/lib/testing/src/lib/content-services/pages/search/public-api.ts b/lib/testing/src/lib/content-services/pages/search/public-api.ts new file mode 100644 index 0000000000..526c595e10 --- /dev/null +++ b/lib/testing/src/lib/content-services/pages/search/public-api.ts @@ -0,0 +1,25 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './search-categories.page'; +export * from './date-range-filter.page'; +export * from './number-range-filter.page'; +export * from './search-checkList.page'; +export * from './search-radio.page'; +export * from './search-slider.page'; +export * from './search-sorting-picker.page'; +export * from './search-text.page'; diff --git a/e2e/pages/adf/content-services/search/search-categories.ts b/lib/testing/src/lib/content-services/pages/search/search-categories.page.ts similarity index 82% rename from e2e/pages/adf/content-services/search/search-categories.ts rename to lib/testing/src/lib/content-services/pages/search/search-categories.page.ts index 210264ecb3..ecffaaf70c 100644 --- a/e2e/pages/adf/content-services/search/search-categories.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-categories.page.ts @@ -16,13 +16,14 @@ */ import { by, ElementFinder } from 'protractor'; -import { SearchTextPage } from './components/search-text'; -import { SearchCheckListPage } from './components/search-checkList'; -import { SearchRadioPage } from './components/search-radio'; -import { DateRangeFilterPage } from './components/dateRangeFilterPage'; -import { NumberRangeFilterPage } from './components/numberRangeFilterPage'; -import { SearchSliderPage } from './components/search-slider.page'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { SearchTextPage } from './search-text.page'; +import { SearchCheckListPage } from './search-checkList.page'; +import { SearchRadioPage } from './search-radio.page'; +import { DateRangeFilterPage } from './date-range-filter.page'; +import { NumberRangeFilterPage } from './number-range-filter.page'; +import { SearchSliderPage } from './search-slider.page'; +import { BrowserActions } from '../../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchCategoriesPage { diff --git a/e2e/pages/adf/content-services/search/components/search-checkList.ts b/lib/testing/src/lib/content-services/pages/search/search-checkList.page.ts similarity index 91% rename from e2e/pages/adf/content-services/search/components/search-checkList.ts rename to lib/testing/src/lib/content-services/pages/search/search-checkList.page.ts index 4c698cbf07..81d1b6eeef 100644 --- a/e2e/pages/adf/content-services/search/components/search-checkList.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-checkList.page.ts @@ -16,7 +16,8 @@ */ import { element, by, ElementFinder } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { BrowserActions } from '../../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchCheckListPage { @@ -30,29 +31,29 @@ export class SearchCheckListPage { this.filter = filter; } - clickCheckListOption(option) { + clickCheckListOption(option: string) { BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.all(by.css(`mat-checkbox[data-automation-id*='${option}'] .mat-checkbox-inner-container`)).first(); BrowserActions.click(result); } - checkChipIsDisplayed(option) { + checkChipIsDisplayed(option: string) { BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon'))); return this; } - checkChipIsNotDisplayed(option) { + checkChipIsNotDisplayed(option: string) { BrowserVisibility.waitUntilElementIsNotOnPage(element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon'))); return this; } - removeFilterOption(option) { + removeFilterOption(option: string) { const cancelChipButton = element(by.cssContainingText('mat-chip', option)).element(by.css('mat-icon')); BrowserActions.click(cancelChipButton); return this; } - filterBy(option) { + filterBy(option: string) { this.checkSearchFilterInputIsDisplayed(); this.searchInFilter(option); this.clickCheckListOption(option); @@ -64,7 +65,7 @@ export class SearchCheckListPage { return this; } - searchInFilter(option) { + searchInFilter(option: string) { BrowserVisibility.waitUntilElementIsClickable(this.filter); const inputElement = this.filter.all(this.inputBy).first(); BrowserVisibility.waitUntilElementIsClickable(inputElement); @@ -118,7 +119,7 @@ export class SearchCheckListPage { return this; } - getBucketNumberOfFilterType(option) { + getBucketNumberOfFilterType(option: string) { const fileTypeFilter = this.filter.all(by.css('mat-checkbox[data-automation-id*=".' + option + '"] span')).first(); BrowserVisibility.waitUntilElementIsVisible(fileTypeFilter); const bucketNumber = fileTypeFilter.getText().then((valueOfBucket) => { @@ -130,19 +131,19 @@ export class SearchCheckListPage { return bucketNumber; } - checkCheckListOptionIsDisplayed(option) { + checkCheckListOptionIsDisplayed(option: string) { BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(by.css(`mat-checkbox[data-automation-id*='-${option}']`)); return BrowserVisibility.waitUntilElementIsVisible(result); } - checkCheckListOptionIsNotSelected(option) { + checkCheckListOptionIsNotSelected(option: string) { BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(by.css(`mat-checkbox[data-automation-id*='-${option}'][class*='checked']`)); return BrowserVisibility.waitUntilElementIsNotVisible(result); } - checkCheckListOptionIsSelected(option) { + checkCheckListOptionIsSelected(option: string) { BrowserVisibility.waitUntilElementIsVisible(this.filter); const result = this.filter.element(by.css(`mat-checkbox[data-automation-id*='-${option}'][class*='checked']`)); return BrowserVisibility.waitUntilElementIsVisible(result); diff --git a/e2e/pages/adf/content-services/search/components/search-radio.ts b/lib/testing/src/lib/content-services/pages/search/search-radio.page.ts similarity index 88% rename from e2e/pages/adf/content-services/search/components/search-radio.ts rename to lib/testing/src/lib/content-services/pages/search/search-radio.page.ts index 0a81241b9b..98fc10d356 100644 --- a/e2e/pages/adf/content-services/search/components/search-radio.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-radio.page.ts @@ -16,7 +16,8 @@ */ import { element, by, browser } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { BrowserActions } from '../../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchRadioPage { @@ -28,17 +29,17 @@ export class SearchRadioPage { this.filter = filter; } - checkFilterRadioButtonIsDisplayed(filterName) { + checkFilterRadioButtonIsDisplayed(filterName: string) { const filterType = element(by.css('mat-radio-button[data-automation-id="search-radio-' + filterName + '"]')); return BrowserVisibility.waitUntilElementIsVisible(filterType); } - checkFilterRadioButtonIsChecked(filterName) { + checkFilterRadioButtonIsChecked(filterName: string) { const selectedFilterType = element(by.css('mat-radio-button[data-automation-id="search-radio-' + filterName + '"][class*="checked"]')); return BrowserVisibility.waitUntilElementIsVisible(selectedFilterType); } - clickFilterRadioButton(filterName) { + clickFilterRadioButton(filterName: string) { browser.executeScript(`document.querySelector('[data-automation-id="search-radio-${filterName}"] input').click();`); } diff --git a/e2e/pages/adf/content-services/search/components/search-slider.page.ts b/lib/testing/src/lib/content-services/pages/search/search-slider.page.ts similarity index 94% rename from e2e/pages/adf/content-services/search/components/search-slider.page.ts rename to lib/testing/src/lib/content-services/pages/search/search-slider.page.ts index dfc835f612..e9ae5dc27c 100644 --- a/e2e/pages/adf/content-services/search/components/search-slider.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-slider.page.ts @@ -16,7 +16,7 @@ */ import { browser, by } from 'protractor'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchSliderPage { @@ -41,11 +41,10 @@ export class SearchSliderPage { return this.filter.element(this.slider).getAttribute('aria-valuenow'); } - setValue(value) { - + setValue(value: number) { browser.actions().dragAndDrop( this.filter.element(this.slider).element(by.css('div[class="mat-slider-thumb"]')), - {x: value * 10, y: 0} + { x: value * 10, y: 0 } ).perform(); return this; } diff --git a/e2e/pages/adf/content-services/search/components/search-sortingPicker.page.ts b/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts similarity index 88% rename from e2e/pages/adf/content-services/search/components/search-sortingPicker.page.ts rename to lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts index 5da3b9734d..8c919493be 100644 --- a/e2e/pages/adf/content-services/search/components/search-sortingPicker.page.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-sorting-picker.page.ts @@ -16,7 +16,8 @@ */ import { browser, by, element, protractor } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { BrowserActions } from '../../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchSortingPickerPage { @@ -24,7 +25,7 @@ export class SearchSortingPickerPage { orderArrow = element(by.css('adf-sorting-picker button mat-icon')); optionsDropdown = element(by.css('div[class*="mat-select-panel"]')); - sortBy(sortOrder, sortType) { + sortBy(sortOrder: string, sortType: string | RegExp) { BrowserActions.click(this.sortingSelector); const selectedSortingOption = element(by.cssContainingText('span[class="mat-option-text"]', sortType)); BrowserActions.click(selectedSortingOption); @@ -32,10 +33,15 @@ export class SearchSortingPickerPage { this.sortByOrder(sortOrder); } - sortByOrder(sortOrder) { + /** + * Sort the list by name column. + * + * @param sortOrder : 'ASC' to sort the list ascendant and 'DESC' for descendant + */ + sortByOrder(sortOrder: string) { BrowserVisibility.waitUntilElementIsVisible(this.orderArrow); this.orderArrow.getText().then((result) => { - if (sortOrder === true) { + if (sortOrder.toLocaleLowerCase() === 'asc') { if (result !== 'arrow_upward') { browser.executeScript(`document.querySelector('adf-sorting-picker button mat-icon').click();`); } diff --git a/e2e/pages/adf/content-services/search/components/search-text.ts b/lib/testing/src/lib/content-services/pages/search/search-text.page.ts similarity index 91% rename from e2e/pages/adf/content-services/search/components/search-text.ts rename to lib/testing/src/lib/content-services/pages/search/search-text.page.ts index 7d209a0bb7..ffe623a672 100644 --- a/e2e/pages/adf/content-services/search/components/search-text.ts +++ b/lib/testing/src/lib/content-services/pages/search/search-text.page.ts @@ -16,7 +16,7 @@ */ import { protractor, by } from 'protractor'; -import { BrowserVisibility } from '@alfresco/adf-testing'; +import { BrowserVisibility } from '../../../core/utils/browser-visibility'; export class SearchTextPage { @@ -32,7 +32,7 @@ export class SearchTextPage { return this.filter.element(this.inputBy).getAttribute('placeholder'); } - searchByName(name) { + searchByName(name: string) { BrowserVisibility.waitUntilElementIsVisible(this.filter); this.filter.element(this.inputBy).clear(); this.filter.element(this.inputBy).sendKeys(name).sendKeys(protractor.Key.ENTER); diff --git a/lib/testing/src/lib/core/pages/data-table-component.page.ts b/lib/testing/src/lib/core/pages/data-table-component.page.ts index 875415b8e2..f3a4487f13 100644 --- a/lib/testing/src/lib/core/pages/data-table-component.page.ts +++ b/lib/testing/src/lib/core/pages/data-table-component.page.ts @@ -132,25 +132,28 @@ export class DataTableComponentPage { /** * Check the list is sorted. * - * @param sortOrder: 'true' if the list is expected to be sorted ascendant and 'false' for descendant - * @param locator: locator for column + * @param sortOrder: 'ASC' if the list is expected to be sorted ascending and 'DESC' for descending + * @param columnTitle: titleColumn column * @return 'true' if the list is sorted as expected and 'false' if it isn't */ - checkListIsSorted(sortOrder, locator) { + checkListIsSorted(sortOrder: string, columnTitle: string) { const deferred = protractor.promise.defer(); - const column = element.all(by.css(`div[title='${locator}'] span`)); + const column = element.all(by.css(`div.adf-datatable-cell[title='${columnTitle}'] span`)); BrowserVisibility.waitUntilElementIsVisible(column.first()); const initialList = []; column.each(function (currentElement) { currentElement.getText().then(function (text) { - initialList.push(text); + if (text.length !== 0) { + initialList.push(text.toLowerCase()); + } }); }).then(function () { - let sortedList = initialList; + let sortedList = [...initialList]; sortedList = sortedList.sort(); - if (sortOrder === false) { + if (sortOrder.toLocaleLowerCase() === 'desc') { sortedList = sortedList.reverse(); } + deferred.fulfill(initialList.toString() === sortedList.toString()); }); return deferred.promise; @@ -209,11 +212,16 @@ export class DataTableComponentPage { return element.all(by.css(`adf-datatable div[title="${detail}"] span`)); } - sortByColumn(sortOrder, column) { - const locator = by.css(`div[data-automation-id="auto_id_${column}"]`); + /** + * Sort the list by name column. + * + * @param sortOrder : 'ASC' to sort the list ascendant and 'DESC' for descendant + */ + sortByColumn(sortOrder: string, titleColumn: string) { + const locator = by.css(`div[data-automation-id="auto_id_${titleColumn}"]`); BrowserVisibility.waitUntilElementIsVisible(element(locator)); return element(locator).getAttribute('class').then(function (result) { - if (sortOrder === true) { + if (sortOrder.toLocaleLowerCase() === 'asc') { if (!result.includes('sorted-asc')) { if (result.includes('sorted-desc') || result.includes('sortable')) { element(locator).click(); @@ -274,6 +282,10 @@ export class DataTableComponentPage { return this; } + waitTillContentLoaded() { + return BrowserVisibility.waitUntilElementIsVisible(this.contents); + } + checkColumnIsDisplayed(column) { BrowserVisibility.waitUntilElementIsVisible(element(by.css(`div[data-automation-id="auto_id_entry.${column}"]`))); return this; diff --git a/e2e/util/dateUtil.ts b/lib/testing/src/lib/core/utils/date-util.ts similarity index 96% rename from e2e/util/dateUtil.ts rename to lib/testing/src/lib/core/utils/date-util.ts index 0f724b8d8e..602e8c7906 100644 --- a/e2e/util/dateUtil.ts +++ b/lib/testing/src/lib/core/utils/date-util.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import * as moment from 'moment'; +import moment from 'moment-es6'; export class DateUtil { diff --git a/lib/testing/src/lib/core/utils/public-api.ts b/lib/testing/src/lib/core/utils/public-api.ts index e1c6934afa..4daa98e0da 100644 --- a/lib/testing/src/lib/core/utils/public-api.ts +++ b/lib/testing/src/lib/core/utils/public-api.ts @@ -22,3 +22,4 @@ export * from './protractor.util'; export * from './local-storage.util'; export * from './file-browser.util'; export * from './form.util'; +export * from './date-util'; diff --git a/e2e/pages/adf/material/datePickerPage.ts b/lib/testing/src/lib/material/pages/date-picker.page.ts similarity index 93% rename from e2e/pages/adf/material/datePickerPage.ts rename to lib/testing/src/lib/material/pages/date-picker.page.ts index dfeb7ca427..37f70db805 100644 --- a/e2e/pages/adf/material/datePickerPage.ts +++ b/lib/testing/src/lib/material/pages/date-picker.page.ts @@ -16,8 +16,9 @@ */ import { element, by, browser } from 'protractor'; -import { DateUtil } from '../../../util/dateUtil'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; +import { DateUtil } from '../../core/utils/date-util'; +import { BrowserVisibility } from '../../core/utils/browser-visibility'; +import { BrowserActions } from '../../core/utils/browser-actions'; export class DatePickerPage { diff --git a/lib/testing/src/lib/material/pages/public-api.ts b/lib/testing/src/lib/material/pages/public-api.ts index 5e77b5653c..6b0cbd1f47 100644 --- a/lib/testing/src/lib/material/pages/public-api.ts +++ b/lib/testing/src/lib/material/pages/public-api.ts @@ -16,3 +16,4 @@ */ export * from './tabs.page'; +export * from './date-picker.page'; diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts index 6ab305ef71..13a4a6629c 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { browser, by, element, protractor } from 'protractor'; import { EditProcessFilterDialogPage } from './dialog/edit-process-filter-dialog.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; @@ -76,6 +76,7 @@ export class EditProcessFilterCloudComponentPage { const orderElement = element.all(by.cssContainingText('mat-option span', option)).first(); BrowserActions.click(orderElement); + browser.sleep(1000); return this; } diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts index 7f08840a53..1bb34e0a50 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { by, element, protractor } from 'protractor'; +import { browser, by, element, protractor } from 'protractor'; import { EditTaskFilterDialogPage } from './dialog/edit-task-filter-dialog.page'; import { BrowserVisibility } from '../../core/utils/browser-visibility'; import { BrowserActions } from '../../core/utils/browser-actions'; @@ -79,6 +79,7 @@ export class EditTaskFilterCloudComponentPage { const orderElement = element.all(by.cssContainingText('mat-option span', option)).first(); BrowserActions.click(orderElement); + browser.sleep(1000); return this; } diff --git a/package-lock.json b/package-lock.json index ff7a3fca27..12ee967720 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6504,8 +6504,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.2.7", @@ -7203,7 +7202,6 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8242,7 +8240,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -8351,8 +8348,7 @@ "interpret": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" }, "invariant": { "version": "2.2.4", @@ -10855,7 +10851,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -11991,7 +11986,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -12472,8 +12466,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -12490,8 +12483,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { "version": "0.1.7", @@ -13750,7 +13742,6 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, "requires": { "resolve": "^1.1.6" } @@ -14069,7 +14060,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -14901,7 +14891,6 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "dev": true, "requires": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -18604,8 +18593,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "1.0.3", diff --git a/package.json b/package.json index 6950a45d68..14c6c98d24 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ "reflect-metadata": "0.1.13", "remark-validate-links": "^8.0.0", "rxjs": "^6.2.2", + "shelljs": "^0.8.3", "systemjs": "0.19.27", "web-animations-js": "2.3.1", "zone.js": "~0.8.26"