diff --git a/.travis.yml b/.travis.yml index fa0f810d1d..5f643e4285 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ env: - REDIRECT_URI=/ - REDIRECT_URI_LOGOUT=/logout/ - BROWSER_RUN=true - - MAXINSTANCES=2 + - MAXINSTANCES=3 branches: only: diff --git a/e2e/content-services/directives/edit-folder-directive.e2e.ts b/e2e/content-services/directives/edit-folder-directive.e2e.ts index 1e85b29cb0..7e7952054e 100644 --- a/e2e/content-services/directives/edit-folder-directive.e2e.ts +++ b/e2e/content-services/directives/edit-folder-directive.e2e.ts @@ -113,8 +113,11 @@ describe('Edit folder directive', () => { await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', editFolder.entry.name); await contentServicesPage.getDocumentList().dataTablePage().selectRow('Display name', editFolder.entry.name); await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', editFolder.entry.name); + await expect(await contentServicesPage.isEditFolderButtonEnabled()).toBe(true); + await contentServicesPage.clickOnEditFolder(); + await editFolderDialog.checkFolderDialogIsDisplayed(); await editFolderDialog.checkCreateUpdateBtnIsEnabled(); await editFolderDialog.addFolderName(editFolder.entry.name + 'a'); diff --git a/e2e/content-services/directives/favorite-directive.e2e.ts b/e2e/content-services/directives/favorite-directive.e2e.ts index 0a161fa863..a9f08ccaa9 100644 --- a/e2e/content-services/directives/favorite-directive.e2e.ts +++ b/e2e/content-services/directives/favorite-directive.e2e.ts @@ -64,9 +64,11 @@ describe('Favorite directive', () => { testFolder4 = await uploadActions.createFolder(StringUtil.generateRandomString(5), '-my-'); testFile = await uploadActions.uploadFile(pdfFile.location, pdfFile.name, '-my-'); + await browser.sleep(browser.params.testConfig.timeouts.index_search); + await loginPage.login(acsUser.email, acsUser.password); await contentServicesPage.goToDocumentList(); - }); + }); afterAll(async () => { await navigationBarPage.clickLogoutButton(); @@ -75,12 +77,12 @@ describe('Favorite directive', () => { await uploadActions.deleteFileOrFolder(testFolder2.entry.id); await uploadActions.deleteFileOrFolder(testFolder3.entry.id); await uploadActions.deleteFileOrFolder(testFolder4.entry.id); - }); + }); beforeEach(async () => { await navigationBarPage.clickContentServicesButton(); await contentServicesPage.getDocumentList().dataTablePage().waitTillContentLoaded(); - }); + }); it('[C260247] Should be able to mark a file as favorite', async () => { await contentServicesPage.getDocumentList().dataTablePage().checkContentIsDisplayed('Display name', testFile.entry.name); @@ -168,10 +170,12 @@ describe('Favorite directive', () => { await contentServicesPage.getDocumentList().rightClickOnRow(testFile.entry.name); await contentServicesPage.pressContextMenuActionNamed('Move'); + await contentNodeSelector.checkDialogIsDisplayed(); await contentNodeSelector.typeIntoNodeSelectorSearchField(testFolder1.entry.name); await contentNodeSelector.clickContentNodeSelectorResult(testFolder1.entry.name); await contentNodeSelector.clickMoveCopyButton(); + await contentServicesPage.checkContentIsNotDisplayed(testFile.entry.name); await contentServicesPage.openFolder(testFolder1.entry.name); await contentServicesPage.checkContentIsDisplayed(testFile.entry.name); @@ -217,5 +221,5 @@ describe('Favorite directive', () => { await contentServicesPage.getDocumentList().dataTablePage().checkRowIsSelected('Display name', testFolder3.entry.name); await expect(await contentServicesPage.getDocumentList().dataTablePage().getNumberOfSelectedRows()).toBe(1); await contentServicesPage.checkIsMarkedFavorite(); - }); + }); }); diff --git a/e2e/content-services/version/version-properties.e2e.ts b/e2e/content-services/version/version-properties.e2e.ts index a0e3393ec7..27bfc40746 100644 --- a/e2e/content-services/version/version-properties.e2e.ts +++ b/e2e/content-services/version/version-properties.e2e.ts @@ -23,7 +23,7 @@ import { LoginPage, UploadActions, UserModel, - UsersActions + UsersActions, ViewerPage } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../core/pages/content-services.page'; import { VersionManagePage } from '../../core/pages/version-manager.page'; @@ -36,6 +36,7 @@ describe('Version Properties', () => { const contentServicesPage = new ContentServicesPage(); const versionManagePage = new VersionManagePage(); const navigationBarPage = new NavigationBarPage(); + const viewerPage = new ViewerPage(); const apiService = new ApiService(); const usersActions = new UsersActions(apiService); @@ -71,14 +72,33 @@ describe('Version Properties', () => { await navigationBarPage.clickContentServicesButton(); await contentServicesPage.waitForTableBody(); + }); + + beforeEach(async () => { await contentServicesPage.versionManagerContent(txtFileModel.name); - }); + }); + + it('[C277277] Should show/hide actions menu when readOnly is true/false', async () => { + await versionManagePage.disableReadOnly(); + await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); + await versionManagePage.enableReadOnly(); + await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); + }); + + it('[C279994] Should show/hide upload new version button when readOnly is true/false', async () => { + await versionManagePage.disableReadOnly(); + await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); + await versionManagePage.enableReadOnly(); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.showNewVersionButton); + await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); + }); it('[C272817] Should NOT be present the download action when allowDownload property is false', async () => { await versionManagePage.disableDownload(); await versionManagePage.clickActionButton('1.0'); await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); await versionManagePage.closeDisabledActionsMenu(); + await viewerPage.clickCloseButton(); }); it('[C279992] Should be present the download action when allowDownload property is true', async () => { @@ -98,18 +118,4 @@ describe('Version Properties', () => { await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-item-comment-1.1"]`))); }); - it('[C277277] Should show/hide actions menu when readOnly is true/false', async () => { - await versionManagePage.disableReadOnly(); - await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); - await versionManagePage.enableReadOnly(); - await BrowserVisibility.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); - }); - - it('[C279994] Should show/hide upload new version button when readOnly is true/false', async () => { - await versionManagePage.disableReadOnly(); - await BrowserVisibility.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); - await versionManagePage.enableReadOnly(); - await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.showNewVersionButton); - await BrowserVisibility.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); - }); }); diff --git a/e2e/core/pages/navigation-bar.page.ts b/e2e/core/pages/navigation-bar.page.ts index d4f7abf14c..a6df3f6849 100644 --- a/e2e/core/pages/navigation-bar.page.ts +++ b/e2e/core/pages/navigation-bar.page.ts @@ -180,12 +180,13 @@ export class NavigationBarPage { async clickLogoutButton(): Promise { Logger.log('Logout'); - await BrowserActions.closeMenuAndDialogs(); - await BrowserActions.clickExecuteScript('.app-sidenav-link[adf-logout]'); - try { + await BrowserActions.closeMenuAndDialogs(); + await BrowserActions.clickExecuteScript('.app-sidenav-link[adf-logout]'); + await BrowserVisibility.waitUntilElementIsVisible(this.logoutSection); } catch (error) { + Logger.log('Logout section NOT found'); } } diff --git a/e2e/lite-server-proxy.js b/e2e/lite-server-proxy.js index 3559064f54..92dd25c512 100644 --- a/e2e/lite-server-proxy.js +++ b/e2e/lite-server-proxy.js @@ -1,6 +1,12 @@ let fallback = require('connect-history-api-fallback'); module.exports = { + injectChanges: false, // workaround for Angular 2 styleUrls loading + files: ['./**/*.{html,htm,css,js}'], + watchOptions: { + ignoreInitial: true, + ignored: '*' + }, ghostMode : false, 'port': 4200, open: false, diff --git a/e2e/process-services/custom-tasks-filters.e2e.ts b/e2e/process-services/custom-tasks-filters.e2e.ts index 4d28908ea9..15bc168f0e 100644 --- a/e2e/process-services/custom-tasks-filters.e2e.ts +++ b/e2e/process-services/custom-tasks-filters.e2e.ts @@ -118,7 +118,7 @@ describe('Start Task - Custom App', () => { })); await loginPage.login(processUserModel.email, processUserModel.password); - }); + }); describe('', () => { beforeEach(async () => { @@ -448,9 +448,10 @@ describe('Start Task - Custom App', () => { await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[0].name); await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[1].name); await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[2].name); - await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { - await expect(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); - }); + + const list = await taskListSinglePage.taskList().getAllRowsNameColumn(); + + await expect(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(20); }); @@ -461,9 +462,10 @@ describe('Start Task - Custom App', () => { await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name); await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name); await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[2].name); - await taskListSinglePage.taskList().getAllRowsNameColumn().then(async (list) => { - await expect(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); - }); + + const list = await taskListSinglePage.taskList().getAllRowsNameColumn(); + await expect(ArrayUtil.arrayContainsArray(list, allTasksName)).toEqual(true); + await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(23); }); }); @@ -476,11 +478,10 @@ describe('Start Task - Custom App', () => { await taskListSinglePage.clickResetButton(); await taskListSinglePage.typeProcessDefinitionId(processDefinitionId.processDefinitionId); - await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded(); await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(4); - await taskListSinglePage.getAllProcessDefinitionIds().then(async (list) => { - await expect(ArrayUtil.arrayContainsArray(list, processDefinitionIds)).toEqual(true); - }); + + const list = await taskListSinglePage.getAllProcessDefinitionIds(); + await expect(ArrayUtil.arrayContainsArray(list, processDefinitionIds)).toEqual(true); }); it('[C286623] Should be able to see No tasks found when typing an invalid processDefinitionId', async () => { @@ -503,9 +504,8 @@ describe('Start Task - Custom App', () => { await expect(await taskListSinglePage.getProcessInstanceId()).toEqual(processDefinitionId.id); await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1); - await taskListSinglePage.getAllProcessInstanceIds().then(async (list) => { - await expect(ArrayUtil.arrayContainsArray(list, processInstanceIds)).toEqual(true); - }); + const list = await taskListSinglePage.getAllProcessInstanceIds(); + await expect(ArrayUtil.arrayContainsArray(list, processInstanceIds)).toEqual(true); }); it('[C286623] Should be able to see No tasks found when typing an invalid processInstanceId', async () => { diff --git a/e2e/process-services/pages/task-list-demo.page.ts b/e2e/process-services/pages/task-list-demo.page.ts index d19ef06750..f66a54abaa 100644 --- a/e2e/process-services/pages/task-list-demo.page.ts +++ b/e2e/process-services/pages/task-list-demo.page.ts @@ -83,6 +83,7 @@ export class TaskListDemoPage { async typeProcessDefinitionId(input: string): Promise { await BrowserActions.clearSendKeys(this.processDefinitionId, input); + await this.taskList().getDataTable().waitTillContentLoaded(); } async getProcessDefinitionId(): Promise { diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js index 15fce803d5..61ed942a0d 100644 --- a/e2e/protractor.conf.js +++ b/e2e/protractor.conf.js @@ -188,6 +188,9 @@ exports.config = { htmlOnExpect: 'none', htmlOnSpec: 'none', clearFoldersBeforeTest: false + }, { + package: 'protractor-console', + logLevels: ['debug'] }], onCleanUp(results) { diff --git a/lib/content-services/src/lib/permission-manager/services/node-permission.service.ts b/lib/content-services/src/lib/permission-manager/services/node-permission.service.ts index 2833659e7e..8f9c151ad0 100644 --- a/lib/content-services/src/lib/permission-manager/services/node-permission.service.ts +++ b/lib/content-services/src/lib/permission-manager/services/node-permission.service.ts @@ -46,7 +46,7 @@ export class NodePermissionService { const siteName = siteNodeList.list.entries[0].entry.name; return this.getGroupMembersBySiteName(siteName); } else { - return of(node.permissions.settable); + return of(node.permissions?.settable); } }) ); diff --git a/package-lock.json b/package-lock.json index c28a57a2d4..cb347ebaf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19381,6 +19381,64 @@ } } }, + "protractor-console": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/protractor-console/-/protractor-console-3.0.0.tgz", + "integrity": "sha512-2BTh751CMjEAMxuZXb86jvs0TDWjvCk7fCnKTyb5vX/KE5f+olTeVCmcFm+4Aretpc6q/6yryuSJ8wjgL9QTKw==", + "dev": true, + "requires": { + "chalk": "^1.1.0", + "lodash": "^3.10.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "protractor-retry": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/protractor-retry/-/protractor-retry-1.2.13.tgz", diff --git a/package.json b/package.json index 89d0d2594f..380cfabbed 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "karma-mocha-reporter": "2.2.5", "license-checker": "^25.0.1", "lint-staged": "^10.2.11", - "lite-server": "^2.4.0", + "lite-server": "^2.5.4", "markdownlint-cli": "^0.23.2", "mdast": "^3.0.0", "mdast-util-compact": "^2.0.1", @@ -158,9 +158,10 @@ "ng-packagr": "^10.1.0", "optimize-css-assets-webpack-plugin": "^5.0.4", "protractor": "^7.0.0", + "protractor-console": "^3.0.0", "protractor-retry": "^1.2.9", - "protractor-smartrunner": "^0.1.1", "protractor-screenshoter-plugin": "0.10.3", + "protractor-smartrunner": "^0.1.1", "remark": "^12.0.1", "remark-frontmatter": "^2.0.0", "rimraf": "^3.0.2",