e2e improvements part2 (#1728)

* deprecate comments api wrapper, delete sites perf improve

* introduce user actions

* admin actions inherit user actions

* unlock nodes helper

* api improvements

* api improvements

* update code

* api improvements

* deprecate trashcan api wrapper

* shared api improvements
This commit is contained in:
Denys Vuika
2020-10-07 19:06:21 +01:00
committed by GitHub
parent ffa7ca3aa6
commit e9b837462a
35 changed files with 509 additions and 458 deletions

View File

@@ -85,42 +85,42 @@ jobs:
cache: false cache: false
- stage: e2e - stage: e2e
name: 'Test Suite appNavigation & search' name: 'Test Suites: authentication,listViews,navigation,application,pagination,search'
before_script: before_script:
- ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a"
script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=authentication,listViews,navigation,application,pagination,search" script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=authentication,listViews,navigation,application,pagination,search"
after_script: after_script:
- ./scripts/ci/job_hooks/after_e2e.sh - ./scripts/ci/job_hooks/after_e2e.sh
- name: 'Test Suite actionsAvailable' - name: 'Test Suites: actionsAvailable'
before_script: before_script:
- ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a"
script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=actionsAvailable" script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=actionsAvailable"
after_script: after_script:
- ./scripts/ci/job_hooks/after_e2e.sh - ./scripts/ci/job_hooks/after_e2e.sh
- name: 'Test Suite addRemoveContent' - name: 'Test Suites: addRemoveContent'
before_script: before_script:
- ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a"
script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=addRemoveContent" script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=addRemoveContent"
after_script: after_script:
- ./scripts/ci/job_hooks/after_e2e.sh - ./scripts/ci/job_hooks/after_e2e.sh
- name: 'Test Suite manageContent' - name: 'Test Suites: manageContent'
before_script: before_script:
- ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a"
script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=manageContent" script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=manageContent"
after_script: after_script:
- ./scripts/ci/job_hooks/after_e2e.sh - ./scripts/ci/job_hooks/after_e2e.sh
- name: 'Test Suite sharingContent & markFavorite' - name: 'Test Suite: sharingContent'
before_script: before_script:
- ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a"
script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=sharingContent" script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=sharingContent"
after_script: after_script:
- ./scripts/ci/job_hooks/after_e2e.sh - ./scripts/ci/job_hooks/after_e2e.sh
- name: 'Test Suite viewContent & metadata & extensions' - name: 'Test Suites: viewer,infoDrawer,extensions'
before_script: before_script:
- ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a" - ./scripts/ci/job_hooks/before_e2e.sh "$S3_DBP_FOLDER/alfresco-content-app.tar.bz2" "./dist/app" "-a"
script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=viewer,infoDrawer,extensions" script: ./scripts/ci/jobs/affected-project-with.sh -target e2e -options "--suite=viewer,infoDrawer,extensions"

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { RepoClient, Utils, AdminActions, LoginPage, FILES } from '@alfresco/aca-testing-shared'; import { RepoClient, Utils, AdminActions, UserActions, LoginPage, FILES } from '@alfresco/aca-testing-shared';
import * as testData from './test-data'; import * as testData from './test-data';
import { personalFilesTests } from './personal-files'; import { personalFilesTests } from './personal-files';
import { recentFilesTests } from './recent-files'; import { recentFilesTests } from './recent-files';
@@ -35,9 +35,7 @@ import { trashTests } from './trash';
describe('Files / folders actions : ', () => { describe('Files / folders actions : ', () => {
const random = Utils.random(); const random = Utils.random();
const username = `user-${random}`; const username = `user-${random}`;
const parent = `parent-${random}`; const parent = `parent-${random}`;
let parentId: string; let parentId: string;
@@ -60,11 +58,14 @@ describe('Files / folders actions : ', () => {
const userApi = new RepoClient(username, username); const userApi = new RepoClient(username, username);
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
const loginPage = new LoginPage(); const loginPage = new LoginPage();
beforeAll(async () => { beforeAll(async () => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
parentId = (await userApi.nodes.createFolder(parent)).entry.id; parentId = (await userApi.nodes.createFolder(parent)).entry.id;
@@ -121,8 +122,8 @@ describe('Files / folders actions : ', () => {
}); });
afterAll(async () => { afterAll(async () => {
await userApi.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId]);
await userApi.trashcan.emptyTrash(); await userActions.emptyTrashcan();
}); });
beforeEach(async () => { beforeEach(async () => {
@@ -160,12 +161,9 @@ describe('Files / folders actions : ', () => {
folderInTrashId = (await userApi.nodes.createFolder(testData.folderInTrash.name)).entry.id; folderInTrashId = (await userApi.nodes.createFolder(testData.folderInTrash.name)).entry.id;
folder2InTrashId = (await userApi.nodes.createFolder(testData.folder2InTrash.name)).entry.id; folder2InTrashId = (await userApi.nodes.createFolder(testData.folder2InTrash.name)).entry.id;
const initialDeletedTotalItems = await userApi.trashcan.getDeletedNodesTotalItems(); const initialDeletedTotalItems = await userActions.getTrashcanSize();
await userApi.nodes.deleteNodeById(fileInTrashId, false); await userActions.deleteNodes([fileInTrashId, file2InTrashId, folderInTrashId, folder2InTrashId], false);
await userApi.nodes.deleteNodeById(file2InTrashId, false); await userActions.waitForTrashcanSize(initialDeletedTotalItems + 4);
await userApi.nodes.deleteNodeById(folderInTrashId, false);
await userApi.nodes.deleteNodeById(folder2InTrashId, false);
await userApi.trashcan.waitForApi({ expect: initialDeletedTotalItems + 4 });
}); });
trashTests(); trashTests();
}); });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { LoginPage, BrowsingPage, SearchResultsPage, RepoClient, Utils, AdminActions } from '@alfresco/aca-testing-shared'; import { LoginPage, BrowsingPage, SearchResultsPage, RepoClient, Utils, AdminActions, UserActions } from '@alfresco/aca-testing-shared';
import * as testData from './test-data-libraries'; import * as testData from './test-data-libraries';
import * as testUtil from '../test-util'; import * as testUtil from '../test-util';
@@ -31,8 +31,8 @@ describe('Library actions : ', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
const userApi = new RepoClient(username, username); const userApi = new RepoClient(username, username);
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
@@ -40,11 +40,13 @@ describe('Library actions : ', () => {
const { searchInput } = searchResultsPage.header; const { searchInput } = searchResultsPage.header;
beforeAll(async () => { beforeAll(async () => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
const initialAdminSitesTotalItems = await adminApiActions.sites.getSitesTotalItems(); const initialAdminSitesTotalItems = await adminApiActions.sites.getSitesTotalItems();
const initialUserSitesTotalItems = await userApi.sites.getSitesTotalItems(); const initialUserSitesTotalItems = await userApi.sites.getSitesTotalItems();
const initialDeletedTotalItems = await userApi.trashcan.getDeletedNodesTotalItems(); const initialDeletedTotalItems = await userActions.getTrashcanSize();
const initialQuerySitesTotalItems = await userApi.queries.findSitesTotalItems('actionsSite-'); const initialQuerySitesTotalItems = await userApi.queries.findSitesTotalItems('actionsSite-');
await userApi.sites.createSite(testData.publicUserMemberFav.name); await userApi.sites.createSite(testData.publicUserMemberFav.name);
@@ -78,33 +80,30 @@ describe('Library actions : ', () => {
await userApi.sites.createSite(testData.siteInTrash.name); await userApi.sites.createSite(testData.siteInTrash.name);
await userApi.sites.createSite(testData.site2InTrash.name); await userApi.sites.createSite(testData.site2InTrash.name);
await userApi.sites.deleteSite(testData.siteInTrash.name, false); await userActions.deleteSites([testData.siteInTrash.name, testData.site2InTrash.name], false);
await userApi.sites.deleteSite(testData.site2InTrash.name, false); await userActions.waitForTrashcanSize(initialDeletedTotalItems + 2);
await userApi.trashcan.waitForApi({ expect: initialDeletedTotalItems + 2 });
await loginPage.loginWith(username); await loginPage.loginWith(username);
}); });
afterAll(async () => { afterAll(async () => {
await Promise.all([ await userActions.deleteSites([
userApi.sites.deleteSites([ testData.publicUserMemberFav.name,
testData.publicUserMemberFav.name, testData.privateUserMemberFav.name,
testData.privateUserMemberFav.name, testData.moderatedUserMemberFav.name,
testData.moderatedUserMemberFav.name, testData.publicUserMemberNotFav.name,
testData.publicUserMemberNotFav.name, testData.privateUserMemberNotFav.name,
testData.privateUserMemberNotFav.name, testData.moderatedUserMemberNotFav.name
testData.moderatedUserMemberNotFav.name
]),
adminApiActions.sites.deleteSites([
testData.publicNotMemberFav.name,
testData.moderatedNotMemberFav.name,
testData.publicNotMemberNotFav.name,
testData.moderatedNotMemberNotFav.name,
testData.moderatedRequestedJoinFav.name,
testData.moderatedRequestedJoinNotFav.name
]),
userApi.trashcan.emptyTrash()
]); ]);
await adminApiActions.deleteSites([
testData.publicNotMemberFav.name,
testData.moderatedNotMemberFav.name,
testData.publicNotMemberNotFav.name,
testData.moderatedNotMemberNotFav.name,
testData.moderatedRequestedJoinFav.name,
testData.moderatedRequestedJoinNotFav.name
]);
await userActions.emptyTrashcan();
}); });
describe('on My Libraries', () => { describe('on My Libraries', () => {

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, ContentNodeSelectorDialog, RepoClient, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, ContentNodeSelectorDialog, RepoClient, Utils } from '@alfresco/aca-testing-shared';
describe('Copy content', () => { describe('Copy content', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -108,10 +108,14 @@ describe('Copy content', () => {
const { dataTable, toolbar } = page; const { dataTable, toolbar } = page;
const copyDialog = new ContentNodeSelectorDialog(); const copyDialog = new ContentNodeSelectorDialog();
const { searchInput } = page.header; const { searchInput } = page.header;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
const initialFavoritesTotalItems = await apis.user.favorites.getFavoritesTotalItems(); const initialFavoritesTotalItems = await apis.user.favorites.getFavoritesTotalItems();
@@ -124,7 +128,7 @@ describe('Copy content', () => {
destinationIdSearch = (await apis.user.nodes.createFolder(destinationSearch)).entry.id; destinationIdSearch = (await apis.user.nodes.createFolder(destinationSearch)).entry.id;
existingFileToCopyId = (await apis.user.nodes.createFile(existingFile, sourceId)).entry.id; existingFileToCopyId = (await apis.user.nodes.createFile(existingFile, sourceId)).entry.id;
await apis.user.shared.shareFileById(existingFileToCopyId); await userActions.shareNodes([existingFileToCopyId]);
await apis.user.favorites.addFavoriteById('file', existingFileToCopyId); await apis.user.favorites.addFavoriteById('file', existingFileToCopyId);
await apis.user.nodes.createFile(existingFile, destinationIdPF); await apis.user.nodes.createFile(existingFile, destinationIdPF);
@@ -152,7 +156,7 @@ describe('Copy content', () => {
fileInFolderId = (await apis.user.nodes.createFile(fileInFolder, folder1Id)).entry.id; fileInFolderId = (await apis.user.nodes.createFile(fileInFolder, folder1Id)).entry.id;
await apis.user.favorites.addFavoriteById('folder', folder1Id); await apis.user.favorites.addFavoriteById('folder', folder1Id);
await apis.user.favorites.addFavoriteById('file', fileInFolderId); await apis.user.favorites.addFavoriteById('file', fileInFolderId);
await apis.user.shared.shareFileById(fileInFolderId); await userActions.shareNodes([fileInFolderId]);
folderExistingId = (await apis.user.nodes.createFolder(folderExisting, sourceId)).entry.id; folderExistingId = (await apis.user.nodes.createFolder(folderExisting, sourceId)).entry.id;
await apis.user.favorites.addFavoriteById('folder', folderExistingId); await apis.user.favorites.addFavoriteById('folder', folderExistingId);
@@ -184,11 +188,7 @@ describe('Copy content', () => {
file3Id = (await apis.user.nodes.createFile(file3, sourceId)).entry.id; file3Id = (await apis.user.nodes.createFile(file3, sourceId)).entry.id;
file4Id = (await apis.user.nodes.createFile(file4, sourceId)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, sourceId)).entry.id;
await apis.user.shared.shareFileById(file1Id); await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id, fileLocked1Id]);
await apis.user.shared.shareFileById(file2Id);
await apis.user.shared.shareFileById(file3Id);
await apis.user.shared.shareFileById(file4Id);
await apis.user.shared.shareFileById(fileLocked1Id);
await apis.user.favorites.addFavoriteById('file', file1Id); await apis.user.favorites.addFavoriteById('file', file1Id);
await apis.user.favorites.addFavoriteById('file', file2Id); await apis.user.favorites.addFavoriteById('file', file2Id);

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, ContentNodeSelectorDialog, RepoClient, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, ContentNodeSelectorDialog, RepoClient, Utils } from '@alfresco/aca-testing-shared';
describe('Move content', () => { describe('Move content', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -62,10 +62,14 @@ describe('Move content', () => {
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable, toolbar } = page; const { dataTable, toolbar } = page;
const moveDialog = new ContentNodeSelectorDialog(); const moveDialog = new ContentNodeSelectorDialog();
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
await apis.user.sites.createSite(siteName); await apis.user.sites.createSite(siteName);
const docLibId = await apis.user.sites.getDocLibId(siteName); const docLibId = await apis.user.sites.getDocLibId(siteName);
@@ -420,20 +424,18 @@ describe('Move content', () => {
file1Id = (await apis.user.nodes.createFile(file1, sourceIdSF)).entry.id; file1Id = (await apis.user.nodes.createFile(file1, sourceIdSF)).entry.id;
const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id); await userActions.shareNodes([file1Id]);
file2Id = (await apis.user.nodes.createFile(file2, sourceIdSF)).entry.id; file2Id = (await apis.user.nodes.createFile(file2, sourceIdSF)).entry.id;
file3Id = (await apis.user.nodes.createFile(file3, sourceIdSF)).entry.id; file3Id = (await apis.user.nodes.createFile(file3, sourceIdSF)).entry.id;
await apis.user.shared.shareFileById(file2Id); await userActions.shareNodes([file2Id, file3Id]);
await apis.user.shared.shareFileById(file3Id);
existingFileId = (await apis.user.nodes.createFile(`${existingFile}.txt`, sourceIdSF)).entry.id; existingFileId = (await apis.user.nodes.createFile(`${existingFile}.txt`, sourceIdSF)).entry.id;
await apis.user.shared.shareFileById(existingFileId); await userActions.shareNodes([existingFileId]);
await apis.user.nodes.createFile(`${existingFile}.txt`, destinationIdSF); await apis.user.nodes.createFile(`${existingFile}.txt`, destinationIdSF);
file4Id = (await apis.user.nodes.createFile(file4, sourceIdSF)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, sourceIdSF)).entry.id;
await apis.user.shared.shareFileById(file4Id); await userActions.shareNodes([file4Id]);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 5 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 5 });
done(); done();

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, RepoClient, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, RepoClient, Utils } from '@alfresco/aca-testing-shared';
describe('Delete and undo delete', () => { describe('Delete and undo delete', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -35,14 +35,19 @@ describe('Delete and undo delete', () => {
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable, toolbar } = page; const { dataTable, toolbar } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async () => { beforeAll(async () => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
}); });
afterAll(async () => { afterAll(async () => {
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
}); });
describe('on Recent Files', () => { describe('on Recent Files', () => {
@@ -78,8 +83,8 @@ describe('Delete and undo delete', () => {
}); });
afterAll(async () => { afterAll(async () => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
}); });
it('[C280528] delete a file and check notification', async () => { it('[C280528] delete a file and check notification', async () => {
@@ -209,12 +214,9 @@ describe('Delete and undo delete', () => {
}); });
afterAll(async () => { afterAll(async () => {
await apis.user.nodes.unlockFile(fileLocked1Id); await userActions.unlockNodes([fileLocked1Id, fileLocked2Id, fileLocked3Id, fileLocked4Id]);
await apis.user.nodes.unlockFile(fileLocked2Id); await userActions.deleteNodes([parentId]);
await apis.user.nodes.unlockFile(fileLocked3Id); await userActions.emptyTrashcan();
await apis.user.nodes.unlockFile(fileLocked4Id);
await apis.user.nodes.deleteNodeById(parentId);
await apis.user.trashcan.emptyTrash();
}); });
it('[C217125] delete a file and check notification', async () => { it('[C217125] delete a file and check notification', async () => {
@@ -362,8 +364,8 @@ describe('Delete and undo delete', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });
@@ -498,12 +500,9 @@ describe('Delete and undo delete', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.unlockFile(fileLocked1Id); await userActions.unlockNodes([fileLocked1Id, fileLocked2Id, fileLocked3Id, fileLocked4Id]);
await apis.user.nodes.unlockFile(fileLocked2Id); await userActions.deleteNodes([parentId]);
await apis.user.nodes.unlockFile(fileLocked3Id); await userActions.emptyTrashcan();
await apis.user.nodes.unlockFile(fileLocked4Id);
await apis.user.nodes.deleteNodeById(parentId);
await apis.user.trashcan.emptyTrash();
done(); done();
}); });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, SearchResultsPage, RepoClient, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, SearchResultsPage, RepoClient, Utils } from '@alfresco/aca-testing-shared';
describe('Download', () => { describe('Download', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -77,9 +77,12 @@ describe('Download', () => {
let initialRecentTotalItems: number; let initialRecentTotalItems: number;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
initialRecentTotalItems = await apis.user.search.getTotalItems(username); initialRecentTotalItems = await apis.user.search.getTotalItems(username);
@@ -105,8 +108,7 @@ describe('Download', () => {
await apis.user.search.waitForApi(username, { expect: initialRecentTotalItems + 10 }); await apis.user.search.waitForApi(username, { expect: initialRecentTotalItems + 10 });
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(fileShared1Id); await userActions.shareNodes([fileShared1Id, fileShared2Id]);
await apis.user.shared.shareFileById(fileShared2Id);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 2 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 2 });
initialFavoritesTotalItems = await apis.user.favorites.getFavoritesTotalItems(); initialFavoritesTotalItems = await apis.user.favorites.getFavoritesTotalItems();
@@ -119,8 +121,8 @@ describe('Download', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });

View File

@@ -23,7 +23,17 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, ConfirmDialog, RepoClient } from '@alfresco/aca-testing-shared'; import {
AdminActions,
UserActions,
SITE_VISIBILITY,
SITE_ROLES,
LoginPage,
BrowsingPage,
Utils,
ConfirmDialog,
RepoClient
} from '@alfresco/aca-testing-shared';
describe('Library actions', () => { describe('Library actions', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -64,9 +74,12 @@ describe('Library actions', () => {
const confirmDialog = new ConfirmDialog(); const confirmDialog = new ConfirmDialog();
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
await adminApiActions.sites.createSite(siteSearchPublic1Admin); await adminApiActions.sites.createSite(siteSearchPublic1Admin);
await adminApiActions.sites.createSite(siteSearchPublic2Admin); await adminApiActions.sites.createSite(siteSearchPublic2Admin);
@@ -95,7 +108,7 @@ describe('Library actions', () => {
}); });
afterAll(async () => { afterAll(async () => {
await adminApiActions.sites.deleteSites([ await adminApiActions.deleteSites([
sitePublic1Admin, sitePublic1Admin,
siteSearchPublic1Admin, siteSearchPublic1Admin,
sitePublic2Admin, sitePublic2Admin,
@@ -104,9 +117,7 @@ describe('Library actions', () => {
sitePublic5Admin, sitePublic5Admin,
sitePublic6Admin, sitePublic6Admin,
sitePublic7Admin, sitePublic7Admin,
sitePublic8Admin sitePublic8Admin,
]);
await adminApiActions.sites.deleteSites([
siteSearchPublic2Admin, siteSearchPublic2Admin,
siteSearchPublic3Admin, siteSearchPublic3Admin,
siteSearchPublic4Admin, siteSearchPublic4Admin,
@@ -115,8 +126,9 @@ describe('Library actions', () => {
siteSearchModerated1Admin, siteSearchModerated1Admin,
siteSearchModerated2Admin siteSearchModerated2Admin
]); ]);
await apis.user.sites.deleteSite(sitePublicUser);
await apis.user.trashcan.emptyTrash(); await userActions.deleteSites([sitePublicUser]);
await userActions.emptyTrashcan();
}); });
describe('Join a public library', () => { describe('Join a public library', () => {

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, ConfirmDialog, RepoClient, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, ConfirmDialog, RepoClient, Utils } from '@alfresco/aca-testing-shared';
describe('Permanently delete from Trash', () => { describe('Permanently delete from Trash', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -49,16 +49,19 @@ describe('Permanently delete from Trash', () => {
const confirmDialog = new ConfirmDialog(); const confirmDialog = new ConfirmDialog();
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
filesIds = (await apis.user.nodes.createFiles([file1, file2, file3])).list.entries.map((entries: any) => entries.entry.id); filesIds = (await apis.user.nodes.createFiles([file1, file2, file3])).list.entries.map((entries: any) => entries.entry.id);
foldersIds = (await apis.user.nodes.createFolders([folder1, folder2])).list.entries.map((entries: any) => entries.entry.id); foldersIds = (await apis.user.nodes.createFolders([folder1, folder2])).list.entries.map((entries: any) => entries.entry.id);
await apis.user.sites.createSite(site); await apis.user.sites.createSite(site);
await apis.user.nodes.deleteNodesById(filesIds, false); await userActions.deleteNodes([...filesIds, ...foldersIds], false);
await apis.user.nodes.deleteNodesById(foldersIds, false); await userActions.deleteSites([site], false);
await apis.user.sites.deleteSite(site, false);
await loginPage.loginWith(username); await loginPage.loginWith(username);
done(); done();
@@ -70,7 +73,7 @@ describe('Permanently delete from Trash', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });

View File

@@ -24,7 +24,7 @@
*/ */
import { browser } from 'protractor'; import { browser } from 'protractor';
import { AdminActions, LoginPage, BrowsingPage, APP_ROUTES, RepoClient, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, APP_ROUTES, RepoClient, Utils } from '@alfresco/aca-testing-shared';
describe('Restore from Trash', () => { describe('Restore from Trash', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -37,15 +37,19 @@ describe('Restore from Trash', () => {
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable, toolbar } = page; const { dataTable, toolbar } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
await loginPage.loginWith(username); await loginPage.loginWith(username);
done(); done();
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });
@@ -61,8 +65,8 @@ describe('Restore from Trash', () => {
folderId = (await apis.user.nodes.createFolder(folder)).entry.id; folderId = (await apis.user.nodes.createFolder(folder)).entry.id;
await apis.user.sites.createSite(site); await apis.user.sites.createSite(site);
await apis.user.nodes.deleteNodesById([fileId, folderId], false); await userActions.deleteNodes([fileId, folderId], false);
await apis.user.sites.deleteSite(site, false); await userActions.deleteSites([site], false);
done(); done();
}); });
@@ -72,7 +76,7 @@ describe('Restore from Trash', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });
@@ -86,7 +90,7 @@ describe('Restore from Trash', () => {
await page.clickPersonalFilesAndWait(); await page.clickPersonalFilesAndWait();
expect(await page.dataTable.isItemPresent(file)).toBe(true, 'Item not displayed in list'); expect(await page.dataTable.isItemPresent(file)).toBe(true, 'Item not displayed in list');
await apis.user.nodes.deleteNodeById(fileId, false); await userActions.deleteNodes([fileId], false);
}); });
it('[C280438] restore folder', async () => { it('[C280438] restore folder', async () => {
@@ -99,7 +103,7 @@ describe('Restore from Trash', () => {
await page.clickPersonalFilesAndWait(); await page.clickPersonalFilesAndWait();
expect(await page.dataTable.isItemPresent(folder)).toBe(true, 'Item not displayed in list'); expect(await page.dataTable.isItemPresent(folder)).toBe(true, 'Item not displayed in list');
await apis.user.nodes.deleteNodeById(folderId, false); await userActions.deleteNodes([folderId], false);
}); });
it('[C290104] restore library', async () => { it('[C290104] restore library', async () => {
@@ -125,7 +129,7 @@ describe('Restore from Trash', () => {
expect(await page.dataTable.isItemPresent(file)).toBe(true, 'Item not displayed in list'); expect(await page.dataTable.isItemPresent(file)).toBe(true, 'Item not displayed in list');
expect(await page.dataTable.isItemPresent(folder)).toBe(true, 'Item not displayed in list'); expect(await page.dataTable.isItemPresent(folder)).toBe(true, 'Item not displayed in list');
await apis.user.nodes.deleteNodesById([fileId, folderId], false); await userActions.deleteNodes([fileId, folderId], false);
}); });
it('[C217181] View from notification', async () => { it('[C217181] View from notification', async () => {
@@ -136,7 +140,7 @@ describe('Restore from Trash', () => {
expect(await page.sidenav.isActive('Personal Files')).toBe(true, 'Personal Files sidebar link not active'); expect(await page.sidenav.isActive('Personal Files')).toBe(true, 'Personal Files sidebar link not active');
expect(await browser.getCurrentUrl()).toContain(APP_ROUTES.PERSONAL_FILES); expect(await browser.getCurrentUrl()).toContain(APP_ROUTES.PERSONAL_FILES);
await apis.user.nodes.deleteNodeById(fileId, false); await userActions.deleteNodes([fileId], false);
}); });
}); });
@@ -155,14 +159,13 @@ describe('Restore from Trash', () => {
beforeAll(async (done) => { beforeAll(async (done) => {
folder1Id = (await apis.user.nodes.createFolder(folder1)).entry.id; folder1Id = (await apis.user.nodes.createFolder(folder1)).entry.id;
file1Id1 = (await apis.user.nodes.createFile(file1, folder1Id)).entry.id; file1Id1 = (await apis.user.nodes.createFile(file1, folder1Id)).entry.id;
await apis.user.nodes.deleteNodeById(file1Id1, false); await userActions.deleteNodes([file1Id1], false);
file1Id2 = (await apis.user.nodes.createFile(file1, folder1Id)).entry.id; file1Id2 = (await apis.user.nodes.createFile(file1, folder1Id)).entry.id;
folder2Id = (await apis.user.nodes.createFolder(folder2)).entry.id; folder2Id = (await apis.user.nodes.createFolder(folder2)).entry.id;
file2Id = (await apis.user.nodes.createFile(file2, folder2Id)).entry.id; file2Id = (await apis.user.nodes.createFile(file2, folder2Id)).entry.id;
await apis.user.nodes.deleteNodeById(file2Id, false);
await apis.user.nodes.deleteNodeById(folder2Id, false);
await userActions.deleteNodes([file2Id, folder2Id], false);
done(); done();
}); });
@@ -172,7 +175,8 @@ describe('Restore from Trash', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await Promise.all([apis.user.nodes.deleteNodeById(file1Id2), apis.user.trashcan.emptyTrash()]); await userActions.deleteNodes([file1Id2]);
await userActions.emptyTrashcan();
done(); done();
}); });
@@ -217,20 +221,16 @@ describe('Restore from Trash', () => {
file1Id = (await apis.user.nodes.createFile(file1, folder1Id)).entry.id; file1Id = (await apis.user.nodes.createFile(file1, folder1Id)).entry.id;
folder2Id = (await apis.user.nodes.createFolder(folder2)).entry.id; folder2Id = (await apis.user.nodes.createFolder(folder2)).entry.id;
file2Id = (await apis.user.nodes.createFile(file2, folder2Id)).entry.id; file2Id = (await apis.user.nodes.createFile(file2, folder2Id)).entry.id;
await apis.user.nodes.deleteNodeById(file1Id, false);
await apis.user.nodes.deleteNodeById(folder1Id, false); await userActions.deleteNodes([file1Id, folder1Id, file2Id], false);
await apis.user.nodes.deleteNodeById(file2Id, false);
folder3Id = (await apis.user.nodes.createFolder(folder3)).entry.id; folder3Id = (await apis.user.nodes.createFolder(folder3)).entry.id;
file3Id = (await apis.user.nodes.createFile(file3, folder3Id)).entry.id; file3Id = (await apis.user.nodes.createFile(file3, folder3Id)).entry.id;
file4Id = (await apis.user.nodes.createFile(file4, folder3Id)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, folder3Id)).entry.id;
folder4Id = (await apis.user.nodes.createFolder(folder4)).entry.id; folder4Id = (await apis.user.nodes.createFolder(folder4)).entry.id;
file5Id = (await apis.user.nodes.createFile(file5, folder4Id)).entry.id; file5Id = (await apis.user.nodes.createFile(file5, folder4Id)).entry.id;
await apis.user.nodes.deleteNodeById(file3Id, false);
await apis.user.nodes.deleteNodeById(file4Id, false);
await apis.user.nodes.deleteNodeById(folder3Id, false);
await apis.user.nodes.deleteNodeById(file5Id, false);
await userActions.deleteNodes([file3Id, file4Id, folder3Id, file5Id], false);
await loginPage.loginWith(username); await loginPage.loginWith(username);
done(); done();
}); });
@@ -241,7 +241,7 @@ describe('Restore from Trash', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });

View File

@@ -24,7 +24,17 @@
*/ */
import { browser } from 'protractor'; import { browser } from 'protractor';
import { AdminActions, LoginPage, BrowsingPage, SITE_VISIBILITY, RepoClient, ShareDialog, Viewer, Utils } from '@alfresco/aca-testing-shared'; import {
AdminActions,
UserActions,
LoginPage,
BrowsingPage,
SITE_VISIBILITY,
RepoClient,
ShareDialog,
Viewer,
Utils
} from '@alfresco/aca-testing-shared';
describe('Share a file', () => { describe('Share a file', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -60,9 +70,13 @@ describe('Share a file', () => {
}; };
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
parentId = (await apis.user.nodes.createFolder(parent)).entry.id; parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
done(); done();
}); });
@@ -127,8 +141,7 @@ describe('Share a file', () => {
file9Id = (await apis.user.nodes.createFile(file9, parentId)).entry.id; file9Id = (await apis.user.nodes.createFile(file9, parentId)).entry.id;
initialTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file6Id, expiryDate); await userActions.shareNodes([file6Id, file7Id], expiryDate);
await apis.user.shared.shareFileById(file7Id, expiryDate);
await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 }); await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 });
}); });
@@ -312,8 +325,7 @@ describe('Share a file', () => {
file9Id = (await apis.user.nodes.createFile(file9, parentInSiteId)).entry.id; file9Id = (await apis.user.nodes.createFile(file9, parentInSiteId)).entry.id;
initialTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file6Id, expiryDate); await userActions.shareNodes([file6Id, file7Id], expiryDate);
await apis.user.shared.shareFileById(file7Id, expiryDate);
await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 }); await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 });
}); });
@@ -485,8 +497,7 @@ describe('Share a file', () => {
file9Id = (await apis.user.nodes.createFile(file9, parentId)).entry.id; file9Id = (await apis.user.nodes.createFile(file9, parentId)).entry.id;
initialTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file6Id, expiryDate); await userActions.shareNodes([file6Id, file7Id], expiryDate);
await apis.user.shared.shareFileById(file7Id, expiryDate);
await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 }); await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 });
}); });
@@ -660,13 +671,9 @@ describe('Share a file', () => {
file7Id = (await apis.user.nodes.createFile(file7, parentId)).entry.id; file7Id = (await apis.user.nodes.createFile(file7, parentId)).entry.id;
initialTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id); await userActions.shareNodes([file1Id, file2Id, file3Id]);
await apis.user.shared.shareFileById(file2Id); await userActions.shareNodes([file4Id, file5Id], expiryDate);
await apis.user.shared.shareFileById(file3Id); await userActions.shareNodes([file6Id, file7Id]);
await apis.user.shared.shareFileById(file4Id, expiryDate);
await apis.user.shared.shareFileById(file5Id, expiryDate);
await apis.user.shared.shareFileById(file6Id);
await apis.user.shared.shareFileById(file7Id);
await apis.user.shared.waitForApi({ expect: initialTotalItems + 7 }); await apis.user.shared.waitForApi({ expect: initialTotalItems + 7 });
}); });
@@ -820,8 +827,7 @@ describe('Share a file', () => {
await apis.user.favorites.addFavoriteById('file', file8Id); await apis.user.favorites.addFavoriteById('file', file8Id);
await apis.user.favorites.addFavoriteById('file', file9Id); await apis.user.favorites.addFavoriteById('file', file9Id);
await apis.user.shared.shareFileById(file6Id, expiryDate); await userActions.shareNodes([file6Id, file7Id], expiryDate);
await apis.user.shared.shareFileById(file7Id, expiryDate);
await apis.user.favorites.waitForApi({ expect: 9 }); await apis.user.favorites.waitForApi({ expect: 9 });
await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 }); await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 });
}); });
@@ -1002,8 +1008,7 @@ describe('Share a file', () => {
await apis.user.search.waitForNodes('search-f', { expect: initialSearchByTermTotalItems + 5 }); await apis.user.search.waitForNodes('search-f', { expect: initialSearchByTermTotalItems + 5 });
initialTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file6Id, expiryDate); await userActions.shareNodes([file6Id, file7Id], expiryDate);
await apis.user.shared.shareFileById(file7Id, expiryDate);
await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 }); await apis.user.shared.waitForApi({ expect: initialTotalItems + 2 });
}); });

View File

@@ -26,6 +26,7 @@
import { browser } from 'protractor'; import { browser } from 'protractor';
import { import {
AdminActions, AdminActions,
UserActions,
LoginPage, LoginPage,
BrowsingPage, BrowsingPage,
SITE_VISIBILITY, SITE_VISIBILITY,
@@ -71,10 +72,15 @@ describe('Unshare a file from Search Results', () => {
const contextMenu = dataTable.menu; const contextMenu = dataTable.menu;
const viewer = new Viewer(); const viewer = new Viewer();
const { searchInput } = page.header; const { searchInput } = page.header;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
parentId = (await apis.user.nodes.createFolder(parent)).entry.id; parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
const initialSearchByTermTotalItems = await apis.user.search.getSearchByTermTotalItems('search-file'); const initialSearchByTermTotalItems = await apis.user.search.getSearchByTermTotalItems('search-file');
@@ -84,11 +90,7 @@ describe('Unshare a file from Search Results', () => {
file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id;
const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id); await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id]);
await apis.user.shared.shareFileById(file2Id);
await apis.user.shared.shareFileById(file3Id);
await apis.user.shared.shareFileById(file4Id);
await adminApiActions.sites.createSite(sitePrivate, SITE_VISIBILITY.PRIVATE); await adminApiActions.sites.createSite(sitePrivate, SITE_VISIBILITY.PRIVATE);
const docLibId = await adminApiActions.sites.getDocLibId(sitePrivate); const docLibId = await adminApiActions.sites.getDocLibId(sitePrivate);
@@ -97,8 +99,8 @@ describe('Unshare a file from Search Results', () => {
await adminApiActions.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONSUMER.ROLE); await adminApiActions.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONSUMER.ROLE);
await adminApiActions.shared.shareFileById(fileSite1Id); await adminApiActions.shareNodes([fileSite1Id]);
await apis.user.shared.shareFileById(fileSite2Id); await userActions.shareNodes([fileSite2Id]);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 6 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 6 });
await apis.user.search.waitForNodes('search-file', { expect: initialSearchByTermTotalItems + 6 }); await apis.user.search.waitForNodes('search-file', { expect: initialSearchByTermTotalItems + 6 });

View File

@@ -26,6 +26,7 @@
import { browser } from 'protractor'; import { browser } from 'protractor';
import { import {
AdminActions, AdminActions,
UserActions,
LoginPage, LoginPage,
BrowsingPage, BrowsingPage,
SITE_VISIBILITY, SITE_VISIBILITY,
@@ -54,10 +55,15 @@ describe('Unshare a file', () => {
const confirmDialog = new ConfirmDialog(); const confirmDialog = new ConfirmDialog();
const contextMenu = dataTable.menu; const contextMenu = dataTable.menu;
const viewer = new Viewer(); const viewer = new Viewer();
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
parentId = (await apis.user.nodes.createFolder(parent)).entry.id; parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
await loginPage.loginWith(username); await loginPage.loginWith(username);
done(); done();
@@ -85,10 +91,8 @@ describe('Unshare a file', () => {
file3Id = (await apis.user.nodes.createFile(file3, parentId)).entry.id; file3Id = (await apis.user.nodes.createFile(file3, parentId)).entry.id;
file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id;
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id);
await apis.user.shared.shareFileById(file2Id); await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id]);
await apis.user.shared.shareFileById(file3Id);
await apis.user.shared.shareFileById(file4Id);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 });
done(); done();
}); });
@@ -213,10 +217,8 @@ describe('Unshare a file', () => {
file3Id = (await apis.user.nodes.createFile(file3, parentInSiteId)).entry.id; file3Id = (await apis.user.nodes.createFile(file3, parentInSiteId)).entry.id;
file4Id = (await apis.user.nodes.createFile(file4, parentInSiteId)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, parentInSiteId)).entry.id;
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id);
await apis.user.shared.shareFileById(file2Id); await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id]);
await apis.user.shared.shareFileById(file3Id);
await apis.user.shared.shareFileById(file4Id);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 });
done(); done();
}); });
@@ -333,10 +335,8 @@ describe('Unshare a file', () => {
file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id;
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id);
await apis.user.shared.shareFileById(file2Id); await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id]);
await apis.user.shared.shareFileById(file3Id);
await apis.user.shared.shareFileById(file4Id);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 });
done(); done();
}); });
@@ -452,10 +452,8 @@ describe('Unshare a file', () => {
file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id;
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id);
await apis.user.shared.shareFileById(file2Id); await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id]);
await apis.user.shared.shareFileById(file3Id);
await apis.user.shared.shareFileById(file4Id);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 4 });
done(); done();
}); });
@@ -571,10 +569,8 @@ describe('Unshare a file', () => {
file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id; file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id;
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id);
await apis.user.shared.shareFileById(file2Id); await userActions.shareNodes([file1Id, file2Id, file3Id, file4Id]);
await apis.user.shared.shareFileById(file3Id);
await apis.user.shared.shareFileById(file4Id);
await apis.user.favorites.addFavoriteById('file', file1Id); await apis.user.favorites.addFavoriteById('file', file1Id);
await apis.user.favorites.addFavoriteById('file', file2Id); await apis.user.favorites.addFavoriteById('file', file2Id);
@@ -709,12 +705,8 @@ describe('Unshare a file', () => {
await adminApiActions.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONSUMER.ROLE); await adminApiActions.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONSUMER.ROLE);
const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await adminApiActions.shared.shareFileById(file1FileLibId); await adminApiActions.shareNodes([file1FileLibId, file1SharedId, file1FavId]);
await apis.user.shared.shareFileById(file2FileLibId); await userActions.shareNodes([file2FileLibId, file2SharedId, file2FavId]);
await adminApiActions.shared.shareFileById(file1SharedId);
await apis.user.shared.shareFileById(file2SharedId);
await adminApiActions.shared.shareFileById(file1FavId);
await apis.user.shared.shareFileById(file2FavId);
await apis.user.favorites.addFavoriteById('file', file1FavId); await apis.user.favorites.addFavoriteById('file', file1FavId);
await apis.user.favorites.addFavoriteById('file', file2FavId); await apis.user.favorites.addFavoriteById('file', file2FavId);

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, RepoClient, InfoDrawer, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, RepoClient, InfoDrawer, Utils } from '@alfresco/aca-testing-shared';
const moment = require('moment'); const moment = require('moment');
describe('Comments', () => { describe('Comments', () => {
@@ -63,10 +63,14 @@ describe('Comments', () => {
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable } = page; const { dataTable } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
parentId = (await apis.user.nodes.createFolder(parent)).entry.id; parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
@@ -79,8 +83,8 @@ describe('Comments', () => {
fileWith1CommentId = (await apis.user.nodes.createFile(fileWith1Comment, parentId)).entry.id; fileWith1CommentId = (await apis.user.nodes.createFile(fileWith1Comment, parentId)).entry.id;
fileWith2CommentsId = (await apis.user.nodes.createFile(fileWith2Comments, parentId)).entry.id; fileWith2CommentsId = (await apis.user.nodes.createFile(fileWith2Comments, parentId)).entry.id;
comment1File2Entry = (await apis.user.comments.addComment(fileWith2CommentsId, 'first comment')).entry; comment1File2Entry = await userActions.createComment(fileWith2CommentsId, 'first comment');
comment2File2Entry = (await apis.user.comments.addComment(fileWith2CommentsId, 'second comment')).entry; comment2File2Entry = await userActions.createComment(fileWith2CommentsId, 'second comment');
const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFilesByIds([file2SharedId, fileWith1CommentId, fileWith2CommentsId]); await apis.user.shared.shareFilesByIds([file2SharedId, fileWith1CommentId, fileWith2CommentsId]);
@@ -97,7 +101,7 @@ describe('Comments', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId]);
done(); done();
}); });
@@ -351,7 +355,7 @@ describe('Comments', () => {
describe('Comment info display', () => { describe('Comment info display', () => {
beforeAll(async (done) => { beforeAll(async (done) => {
commentFile1Entry = (await apis.user.comments.addComment(fileWith1CommentId, 'this is my comment')).entry; commentFile1Entry = await userActions.createComment(fileWith1CommentId, 'this is my comment');
await apis.user.favorites.waitForApi({ expect: 4 }); await apis.user.favorites.waitForApi({ expect: 4 });
await apis.user.search.waitForApi(username, { expect: 7 }); await apis.user.search.waitForApi(username, { expect: 7 });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared';
describe('Favorites', () => { describe('Favorites', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -43,10 +43,14 @@ describe('Favorites', () => {
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable, breadcrumb } = page; const { dataTable, breadcrumb } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
await adminApiActions.sites.createSite(siteName, SITE_VISIBILITY.PUBLIC); await adminApiActions.sites.createSite(siteName, SITE_VISIBILITY.PUBLIC);
const docLibId = await adminApiActions.sites.getDocLibId(siteName); const docLibId = await adminApiActions.sites.getDocLibId(siteName);
@@ -64,10 +68,9 @@ describe('Favorites', () => {
await apis.user.favorites.addFavoriteById('file', file2Id); await apis.user.favorites.addFavoriteById('file', file2Id);
await apis.user.favorites.addFavoriteById('file', file3Id); await apis.user.favorites.addFavoriteById('file', file3Id);
await apis.user.favorites.addFavoriteById('file', file4Id); await apis.user.favorites.addFavoriteById('file', file4Id);
await apis.user.nodes.deleteNodeById(file3Id, false);
await apis.user.nodes.deleteNodeById(file4Id, false);
await apis.user.trashcan.restore(file4Id);
await userActions.deleteNodes([file3Id, file4Id], false);
await userActions.trashcanApi.restoreDeletedNode(file4Id);
await loginPage.loginWith(username); await loginPage.loginWith(username);
done(); done();
}); });
@@ -78,9 +81,9 @@ describe('Favorites', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await adminApiActions.sites.deleteSite(siteName); await adminApiActions.deleteSites([siteName]);
await apis.user.nodes.deleteNodes([favFolderName, parentFolder]); await userActions.deleteNodes([favFolderName, parentFolder]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });

View File

@@ -24,7 +24,7 @@
*/ */
import { browser } from 'protractor'; import { browser } from 'protractor';
import { AdminActions, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared';
describe('Generic errors', () => { describe('Generic errors', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -43,11 +43,16 @@ describe('Generic errors', () => {
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable } = page; const { dataTable } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await adminApiActions.createUser({ username: username2 }); await adminApiActions.createUser({ username: username2 });
await userActions.login(username, username);
parentId = (await apis.user.nodes.createFolder(parent)).entry.id; parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
file1Id = (await apis.user.nodes.createFile(file1, parentId)).entry.id; file1Id = (await apis.user.nodes.createFile(file1, parentId)).entry.id;
await apis.user.nodes.createFile(file2, parentId); await apis.user.nodes.createFile(file2, parentId);
@@ -57,8 +62,8 @@ describe('Generic errors', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });

View File

@@ -23,26 +23,29 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared';
describe('Special permissions', () => { describe('Special permissions', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
const password = username;
const apis = { const apis = {
user: new RepoClient(username, password) user: new RepoClient(username, username)
}; };
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable } = page; const { dataTable } = page;
const { searchInput } = page.header; const { searchInput } = page.header;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
let initialSharedTotalItems: number; let initialSharedTotalItems: number;
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
done(); done();
}); });
@@ -60,7 +63,7 @@ describe('Special permissions', () => {
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await adminApiActions.shared.shareFileById(fileId); await adminApiActions.shareNodes([fileId]);
await apis.user.nodes.editNodeContent(fileId, 'edited by user'); await apis.user.nodes.editNodeContent(fileId, 'edited by user');
await apis.user.search.waitForApi(username, { expect: 1 }); await apis.user.search.waitForApi(username, { expect: 1 });
@@ -134,7 +137,7 @@ describe('Special permissions', () => {
await apis.user.favorites.addFavoriteById('file', fileId); await apis.user.favorites.addFavoriteById('file', fileId);
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(fileId); await userActions.shareNodes([fileId]);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 1 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 1 });
await apis.user.search.waitForApi(username, { expect: 1 }); await apis.user.search.waitForApi(username, { expect: 1 });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, SITE_VISIBILITY, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, SITE_VISIBILITY, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared';
describe('Recent Files', () => { describe('Recent Files', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -47,15 +47,20 @@ describe('Recent Files', () => {
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable, breadcrumb } = page; const { dataTable, breadcrumb } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
folderId = (await apis.user.nodes.createFolders([folderName])).entry.id; folderId = (await apis.user.nodes.createFolders([folderName])).entry.id;
await apis.user.nodes.createFiles([fileName1], folderName); await apis.user.nodes.createFiles([fileName1], folderName);
file2Id = (await apis.user.nodes.createFiles([fileName2])).entry.id; file2Id = (await apis.user.nodes.createFiles([fileName2])).entry.id;
const id = (await apis.user.nodes.createFiles([fileName3])).entry.id; const id = (await apis.user.nodes.createFiles([fileName3])).entry.id;
await apis.user.nodes.deleteNodeById(id, false); await userActions.deleteNodes([id], false);
await apis.user.sites.createSite(siteName, SITE_VISIBILITY.PUBLIC); await apis.user.sites.createSite(siteName, SITE_VISIBILITY.PUBLIC);
const docLibId = await apis.user.sites.getDocLibId(siteName); const docLibId = await apis.user.sites.getDocLibId(siteName);
@@ -74,9 +79,9 @@ describe('Recent Files', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodesById([folderId, file2Id]); await userActions.deleteNodes([folderId, file2Id]);
await apis.user.sites.deleteSite(siteName); await userActions.deleteSites([siteName]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });

View File

@@ -70,7 +70,7 @@ describe('Shared Files', () => {
initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFilesByIds([file1Id, file2Id, file3Id, file4Id]); await apis.user.shared.shareFilesByIds([file1Id, file2Id, file3Id, file4Id]);
await adminApiActions.shared.shareFileById(nodeId); await adminApiActions.shareNodes([nodeId]);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 5 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 5 });
await apis.user.nodes.deleteNodeById(file2Id); await apis.user.nodes.deleteNodeById(file2Id);

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared';
describe('File / folder tooltips', () => { describe('File / folder tooltips', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -50,10 +50,15 @@ describe('File / folder tooltips', () => {
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable } = page; const { dataTable } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
parentId = (await apis.user.nodes.createFolder(parent)).entry.id; parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
file1Id = (await apis.user.nodes.createFile(file, parentId)).entry.id; file1Id = (await apis.user.nodes.createFile(file, parentId)).entry.id;
@@ -77,7 +82,8 @@ describe('File / folder tooltips', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await Promise.all([apis.user.nodes.deleteNodes([parent]), apis.user.trashcan.emptyTrash()]); await userActions.deleteNodes([parent]);
await userActions.emptyTrashcan();
done(); done();
}); });
@@ -267,8 +273,8 @@ describe('File / folder tooltips', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodes([parentForTrash]); await userActions.deleteNodes([parentForTrash]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, SITE_VISIBILITY, SITE_ROLES, LoginPage, BrowsingPage, Utils, RepoClient } from '@alfresco/aca-testing-shared';
describe('Trash', () => { describe('Trash', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -59,10 +59,15 @@ describe('Trash', () => {
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable, breadcrumb } = page; const { dataTable, breadcrumb } = page;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async () => { beforeAll(async () => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
fileAdminId = (await adminApiActions.nodes.createFiles([fileAdmin])).entry.id; fileAdminId = (await adminApiActions.nodes.createFiles([fileAdmin])).entry.id;
folderAdminId = (await adminApiActions.nodes.createFolders([folderAdmin])).entry.id; folderAdminId = (await adminApiActions.nodes.createFolders([folderAdmin])).entry.id;
await adminApiActions.sites.createSite(siteName, SITE_VISIBILITY.PUBLIC); await adminApiActions.sites.createSite(siteName, SITE_VISIBILITY.PUBLIC);
@@ -83,13 +88,11 @@ describe('Trash', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await Promise.all([ await adminApiActions.sites.deleteSite(siteName);
adminApiActions.sites.deleteSite(siteName), await adminApiActions.trashcanApi.deleteDeletedNode(fileAdminId);
adminApiActions.trashcan.permanentlyDelete(fileAdminId), await adminApiActions.trashcanApi.deleteDeletedNode(folderAdminId);
adminApiActions.trashcan.permanentlyDelete(folderAdminId), await apis.user.nodes.deleteNodeById(folderNotDeletedId);
apis.user.nodes.deleteNodeById(folderNotDeletedId), await userActions.emptyTrashcan();
apis.user.trashcan.emptyTrash()
]);
done(); done();
}); });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, Viewer, RepoClient, Utils } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, Viewer, RepoClient, Utils } from '@alfresco/aca-testing-shared';
describe('Single click on item name', () => { describe('Single click on item name', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -50,17 +50,22 @@ describe('Single click on item name', () => {
const { dataTable, breadcrumb } = page; const { dataTable, breadcrumb } = page;
const viewer = new Viewer(); const viewer = new Viewer();
const { searchInput } = page.header; const { searchInput } = page.header;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
file1Id = (await apis.user.nodes.createFile(file1)).entry.id; file1Id = (await apis.user.nodes.createFile(file1)).entry.id;
folder1Id = (await apis.user.nodes.createFolder(folder1)).entry.id; folder1Id = (await apis.user.nodes.createFolder(folder1)).entry.id;
deletedFile1Id = (await apis.user.nodes.createFile(deletedFile1)).entry.id; deletedFile1Id = (await apis.user.nodes.createFile(deletedFile1)).entry.id;
deletedFolder1Id = (await apis.user.nodes.createFolder(deletedFolder1)).entry.id; deletedFolder1Id = (await apis.user.nodes.createFolder(deletedFolder1)).entry.id;
await apis.user.nodes.deleteNodeById(deletedFile1Id, false);
await apis.user.nodes.deleteNodeById(deletedFolder1Id, false); await userActions.deleteNodes([deletedFile1Id, deletedFolder1Id], false);
await apis.user.sites.createSite(siteName); await apis.user.sites.createSite(siteName);
const docLibId = await apis.user.sites.getDocLibId(siteName); const docLibId = await apis.user.sites.getDocLibId(siteName);
@@ -71,10 +76,9 @@ describe('Single click on item name', () => {
}); });
afterAll(async () => { afterAll(async () => {
await apis.user.sites.deleteSite(siteName); await userActions.deleteSites([siteName]);
await apis.user.nodes.deleteNodeById(folder1Id); await userActions.deleteNodes([folder1Id, file1Id]);
await apis.user.nodes.deleteNodeById(file1Id); await userActions.emptyTrashcan();
await apis.user.trashcan.emptyTrash();
}); });
it('[C284899] Hyperlink does not appear for items in the Trash', async () => { it('[C284899] Hyperlink does not appear for items in the Trash', async () => {
@@ -128,7 +132,7 @@ describe('Single click on item name', () => {
describe('on Shared Files', () => { describe('on Shared Files', () => {
beforeAll(async () => { beforeAll(async () => {
const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(file1Id); await userActions.shareNodes([file1Id]);
await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 1 }); await apis.user.shared.waitForApi({ expect: initialSharedTotalItems + 1 });
}); });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { LoginPage, BrowsingPage, Utils, AdminActions, RepoClient } from '@alfresco/aca-testing-shared'; import { LoginPage, BrowsingPage, Utils, AdminActions, UserActions, RepoClient } from '@alfresco/aca-testing-shared';
describe('Pagination on multiple pages on Trash', () => { describe('Pagination on multiple pages on Trash', () => {
const random = Utils.random(); const random = Utils.random();
@@ -36,17 +36,21 @@ describe('Pagination on multiple pages on Trash', () => {
const userApi = new RepoClient(username, username); const userApi = new RepoClient(username, username);
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
const { dataTable, pagination } = page; const { dataTable, pagination } = page;
beforeAll(async () => { beforeAll(async () => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
filesDeletedIds = (await userApi.nodes.createFiles(filesForDelete)).list.entries.map((entries: any) => entries.entry.id); filesDeletedIds = (await userApi.nodes.createFiles(filesForDelete)).list.entries.map((entries: any) => entries.entry.id);
await userApi.nodes.deleteNodesById(filesDeletedIds, false); await userActions.deleteNodes(filesDeletedIds, false);
await userApi.trashcan.waitForApi({ expect: 101 }); await userActions.waitForTrashcanSize(101);
await loginPage.loginWith(username); await loginPage.loginWith(username);
await page.clickTrashAndWait(); await page.clickTrashAndWait();
@@ -57,7 +61,7 @@ describe('Pagination on multiple pages on Trash', () => {
}); });
afterAll(async () => { afterAll(async () => {
await userApi.trashcan.emptyTrash(); await userActions.emptyTrashcan();
}); });
it('[C280122] Pagination control default values', async () => { it('[C280122] Pagination control default values', async () => {

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { LoginPage, BrowsingPage, SearchResultsPage, Utils, AdminActions, RepoClient } from '@alfresco/aca-testing-shared'; import { LoginPage, BrowsingPage, SearchResultsPage, Utils, AdminActions, UserActions, RepoClient } from '@alfresco/aca-testing-shared';
describe('Pagination on single page', () => { describe('Pagination on single page', () => {
const random = Utils.random(); const random = Utils.random();
@@ -40,6 +40,7 @@ describe('Pagination on single page', () => {
const userApi = new RepoClient(username, username); const userApi = new RepoClient(username, username);
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const page = new BrowsingPage(); const page = new BrowsingPage();
@@ -48,12 +49,14 @@ describe('Pagination on single page', () => {
const searchResultsPage = new SearchResultsPage(); const searchResultsPage = new SearchResultsPage();
beforeAll(async () => { beforeAll(async () => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
const initialFavoriteTotalItems = await userApi.favorites.getFavoritesTotalItems(); const initialFavoriteTotalItems = await userApi.favorites.getFavoritesTotalItems();
const initialRecentFilesTotalItems = await userApi.search.getTotalItems(username); const initialRecentFilesTotalItems = await userApi.search.getTotalItems(username);
const initialSharedTotalItems = await userApi.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await userApi.shared.getSharedLinksTotalItems();
const initialTrashTotalItems = await userApi.trashcan.getDeletedNodesTotalItems(); const initialTrashTotalItems = await userActions.getTrashcanSize();
fileId = (await userApi.nodes.createFile(file)).entry.id; fileId = (await userApi.nodes.createFile(file)).entry.id;
fileInTrashId = (await userApi.nodes.createFile(fileInTrash)).entry.id; fileInTrashId = (await userApi.nodes.createFile(fileInTrash)).entry.id;
@@ -61,20 +64,20 @@ describe('Pagination on single page', () => {
await userApi.nodes.deleteNodeById(fileInTrashId, false); await userApi.nodes.deleteNodeById(fileInTrashId, false);
await userApi.favorites.addFavoriteById('file', fileId); await userApi.favorites.addFavoriteById('file', fileId);
await userApi.shared.shareFileById(fileId); await userActions.shareNodes([fileId]);
await Promise.all([ await userApi.favorites.waitForApi({ expect: initialFavoriteTotalItems + 2 });
userApi.favorites.waitForApi({ expect: initialFavoriteTotalItems + 2 }), await userApi.search.waitForApi(username, { expect: initialRecentFilesTotalItems + 1 });
userApi.search.waitForApi(username, { expect: initialRecentFilesTotalItems + 1 }), await userApi.shared.waitForApi({ expect: initialSharedTotalItems + 1 });
userApi.shared.waitForApi({ expect: initialSharedTotalItems + 1 }), await userActions.waitForTrashcanSize(initialTrashTotalItems + 1);
userApi.trashcan.waitForApi({ expect: initialTrashTotalItems + 1 })
]);
await loginPage.loginWith(username); await loginPage.loginWith(username);
}); });
afterAll(async () => { afterAll(async () => {
await Promise.all([userApi.nodes.deleteNodeById(fileId), userApi.sites.deleteSite(siteId), userApi.trashcan.emptyTrash()]); await userActions.deleteNodes([fileId]);
await userActions.deleteSites([siteId]);
await userActions.emptyTrashcan();
}); });
it('[C280112] page selector not displayed on Favorites', async () => { it('[C280112] page selector not displayed on Favorites', async () => {

View File

@@ -25,6 +25,7 @@
import { import {
AdminActions, AdminActions,
UserActions,
LoginPage, LoginPage,
BrowsingPage, BrowsingPage,
FILES, FILES,
@@ -59,9 +60,12 @@ describe('Viewer actions', () => {
const manageVersionsDialog = new ManageVersionsDialog(); const manageVersionsDialog = new ManageVersionsDialog();
const uploadNewVersionDialog = new UploadNewVersionDialog(); const uploadNewVersionDialog = new UploadNewVersionDialog();
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
done(); done();
}); });
@@ -125,9 +129,8 @@ describe('Viewer actions', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId, destinationId]);
await apis.user.nodes.deleteNodeById(destinationId); await userActions.emptyTrashcan();
await apis.user.trashcan.emptyTrash();
done(); done();
}); });
@@ -354,9 +357,9 @@ describe('Viewer actions', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.sites.deleteSite(siteName); await userActions.deleteSites([siteName]);
await apis.user.nodes.deleteNodeById(destinationId); await userActions.deleteNodes([destinationId]);
await apis.user.trashcan.emptyTrash(); await userActions.emptyTrashcan();
done(); done();
}); });
@@ -542,9 +545,8 @@ describe('Viewer actions', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId, destinationId]);
await apis.user.nodes.deleteNodeById(destinationId); await userActions.emptyTrashcan();
await apis.user.trashcan.emptyTrash();
done(); done();
}); });
@@ -741,9 +743,8 @@ describe('Viewer actions', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId, destinationId]);
await apis.user.nodes.deleteNodeById(destinationId); await userActions.emptyTrashcan();
await apis.user.trashcan.emptyTrash();
done(); done();
}); });
@@ -937,9 +938,8 @@ describe('Viewer actions', () => {
}); });
afterAll(async (done) => { afterAll(async (done) => {
await apis.user.nodes.deleteNodeById(parentId); await userActions.deleteNodes([parentId, destinationId]);
await apis.user.nodes.deleteNodeById(destinationId); await userActions.emptyTrashcan();
await apis.user.trashcan.emptyTrash();
done(); done();
}); });

View File

@@ -23,7 +23,7 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { AdminActions, LoginPage, BrowsingPage, FILES, SITE_VISIBILITY, RepoClient, Utils, Viewer } from '@alfresco/aca-testing-shared'; import { AdminActions, UserActions, LoginPage, BrowsingPage, FILES, SITE_VISIBILITY, RepoClient, Utils, Viewer } from '@alfresco/aca-testing-shared';
describe('Viewer general', () => { describe('Viewer general', () => {
const username = `user-${Utils.random()}`; const username = `user-${Utils.random()}`;
@@ -52,10 +52,15 @@ describe('Viewer general', () => {
const { dataTable } = page; const { dataTable } = page;
const viewer = new Viewer(); const viewer = new Viewer();
const { searchInput } = page.header; const { searchInput } = page.header;
const adminApiActions = new AdminActions(); const adminApiActions = new AdminActions();
const userActions = new UserActions();
beforeAll(async (done) => { beforeAll(async (done) => {
await adminApiActions.login();
await adminApiActions.createUser({ username }); await adminApiActions.createUser({ username });
await userActions.login(username, username);
parentId = (await apis.user.nodes.createFolder(parent)).entry.id; parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
xlsxFileId = (await apis.user.upload.uploadFile(xlsxFile, parentId)).entry.id; xlsxFileId = (await apis.user.upload.uploadFile(xlsxFile, parentId)).entry.id;
@@ -68,7 +73,7 @@ describe('Viewer general', () => {
await apis.user.upload.uploadFile(fileInSite, docLibSiteUserId); await apis.user.upload.uploadFile(fileInSite, docLibSiteUserId);
const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems(); const initialSharedTotalItems = await apis.user.shared.getSharedLinksTotalItems();
await apis.user.shared.shareFileById(xlsxFileId); await userActions.shareNodes([xlsxFileId]);
await apis.user.favorites.addFavoriteById('file', xlsxFileId); await apis.user.favorites.addFavoriteById('file', xlsxFileId);
await apis.user.favorites.waitForApi({ expect: 2 }); await apis.user.favorites.waitForApi({ expect: 2 });

View File

@@ -23,26 +23,14 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { RepoClient } from './repo-client/repo-client';
import { PersonEntry, NodeEntry, PeopleApi } from '@alfresco/js-api'; import { PersonEntry, NodeEntry, PeopleApi } from '@alfresco/js-api';
import { import { PersonModel, SitesApi, UploadApi, NodesApi, FavoritesApi, SearchApi, NodeContentTree, Person, SharedLinksApi } from './repo-client/apis';
PersonModel, import { UserActions } from './user-actions';
SitesApi, import { browser } from 'protractor';
UploadApi,
NodesApi,
FavoritesApi,
SearchApi,
NodeContentTree,
Person,
SharedLinksApi,
TrashcanApi
} from './repo-client/apis';
export class AdminActions {
private adminApi: RepoClient;
export class AdminActions extends UserActions {
constructor() { constructor() {
this.adminApi = new RepoClient(); super();
} }
sites: SitesApi = new SitesApi(); sites: SitesApi = new SitesApi();
@@ -51,78 +39,81 @@ export class AdminActions {
favorites: FavoritesApi = new FavoritesApi(); favorites: FavoritesApi = new FavoritesApi();
search: SearchApi = new SearchApi(); search: SearchApi = new SearchApi();
shared: SharedLinksApi = new SharedLinksApi(); shared: SharedLinksApi = new SharedLinksApi();
trashcan: TrashcanApi = new TrashcanApi();
async login(username?: string, password?: string) {
return super.login(username || browser.params.ADMIN_USERNAME, password || browser.params.ADMIN_PASSWORD);
}
async getDataDictionaryId(): Promise<string> { async getDataDictionaryId(): Promise<string> {
return this.adminApi.nodes.getNodeIdFromParent('Data Dictionary', '-root-'); return this.nodes.getNodeIdFromParent('Data Dictionary', '-root-');
} }
async getNodeTemplatesFolderId(): Promise<string> { async getNodeTemplatesFolderId(): Promise<string> {
return this.adminApi.nodes.getNodeIdFromParent('Node Templates', await this.getDataDictionaryId()); return this.nodes.getNodeIdFromParent('Node Templates', await this.getDataDictionaryId());
} }
async getSpaceTemplatesFolderId(): Promise<string> { async getSpaceTemplatesFolderId(): Promise<string> {
return this.adminApi.nodes.getNodeIdFromParent('Space Templates', await this.getDataDictionaryId()); return this.nodes.getNodeIdFromParent('Space Templates', await this.getDataDictionaryId());
} }
async createUser(user: PersonModel): Promise<PersonEntry> { async createUser(user: PersonModel): Promise<PersonEntry> {
const person = new Person(user); const person = new Person(user);
const peopleApi = new PeopleApi(this.adminApi.alfrescoApi); const peopleApi = new PeopleApi(this.alfrescoApi);
await this.adminApi.apiAuth(); await this.login();
return peopleApi.createPerson(person); return peopleApi.createPerson(person);
} }
async disableUser(username: string): Promise<PersonEntry> { async disableUser(username: string): Promise<PersonEntry> {
const peopleApi = new PeopleApi(this.adminApi.alfrescoApi); const peopleApi = new PeopleApi(this.alfrescoApi);
await this.adminApi.apiAuth(); await this.login();
return peopleApi.updatePerson(username, { enabled: false }); return peopleApi.updatePerson(username, { enabled: false });
} }
async changePassword(username: string, newPassword: string): Promise<PersonEntry> { async changePassword(username: string, newPassword: string): Promise<PersonEntry> {
const peopleApi = new PeopleApi(this.adminApi.alfrescoApi); const peopleApi = new PeopleApi(this.alfrescoApi);
await this.adminApi.apiAuth(); await this.login();
return peopleApi.updatePerson(username, { password: newPassword }); return peopleApi.updatePerson(username, { password: newPassword });
} }
async createNodeTemplate(name: string, title: string = '', description: string = '', author: string = ''): Promise<NodeEntry> { async createNodeTemplate(name: string, title: string = '', description: string = '', author: string = ''): Promise<NodeEntry> {
const templatesRootFolderId: string = await this.getNodeTemplatesFolderId(); const templatesRootFolderId: string = await this.getNodeTemplatesFolderId();
return this.adminApi.nodes.createFile(name, templatesRootFolderId, title, description, author); return this.nodes.createFile(name, templatesRootFolderId, title, description, author);
} }
async createNodeTemplatesHierarchy(hierarchy: NodeContentTree): Promise<any> { async createNodeTemplatesHierarchy(hierarchy: NodeContentTree): Promise<any> {
return this.adminApi.nodes.createContent(hierarchy, `Data Dictionary/Node Templates`); return this.nodes.createContent(hierarchy, `Data Dictionary/Node Templates`);
} }
async createSpaceTemplate(name: string, title: string = '', description: string = ''): Promise<NodeEntry> { async createSpaceTemplate(name: string, title: string = '', description: string = ''): Promise<NodeEntry> {
const templatesRootFolderId: string = await this.getSpaceTemplatesFolderId(); const templatesRootFolderId: string = await this.getSpaceTemplatesFolderId();
return this.adminApi.nodes.createFolder(name, templatesRootFolderId, title, description); return this.nodes.createFolder(name, templatesRootFolderId, title, description);
} }
async createSpaceTemplatesHierarchy(hierarchy: NodeContentTree): Promise<any> { async createSpaceTemplatesHierarchy(hierarchy: NodeContentTree): Promise<any> {
return this.adminApi.nodes.createContent(hierarchy, `Data Dictionary/Space Templates`); return this.nodes.createContent(hierarchy, `Data Dictionary/Space Templates`);
} }
async removeUserAccessOnNodeTemplate(nodeName: string): Promise<NodeEntry> { async removeUserAccessOnNodeTemplate(nodeName: string): Promise<NodeEntry> {
const templatesRootFolderId = await this.getNodeTemplatesFolderId(); const templatesRootFolderId = await this.getNodeTemplatesFolderId();
const nodeId: string = await this.adminApi.nodes.getNodeIdFromParent(nodeName, templatesRootFolderId); const nodeId: string = await this.nodes.getNodeIdFromParent(nodeName, templatesRootFolderId);
return this.adminApi.nodes.setInheritPermissions(nodeId, false); return this.nodes.setInheritPermissions(nodeId, false);
} }
async removeUserAccessOnSpaceTemplate(nodeName: string): Promise<NodeEntry> { async removeUserAccessOnSpaceTemplate(nodeName: string): Promise<NodeEntry> {
const templatesRootFolderId = await this.getSpaceTemplatesFolderId(); const templatesRootFolderId = await this.getSpaceTemplatesFolderId();
const nodeId: string = await this.adminApi.nodes.getNodeIdFromParent(nodeName, templatesRootFolderId); const nodeId: string = await this.nodes.getNodeIdFromParent(nodeName, templatesRootFolderId);
return this.adminApi.nodes.setInheritPermissions(nodeId, false); return this.nodes.setInheritPermissions(nodeId, false);
} }
async cleanupNodeTemplatesFolder(): Promise<void> { async cleanupNodeTemplatesFolder(): Promise<void> {
return this.adminApi.nodes.deleteNodeChildren(await this.getNodeTemplatesFolderId()); return this.nodes.deleteNodeChildren(await this.getNodeTemplatesFolderId());
} }
async cleanupSpaceTemplatesFolder(): Promise<void> { async cleanupSpaceTemplatesFolder(): Promise<void> {
@@ -130,14 +121,14 @@ export class AdminActions {
// folder links are deleted automatically when original folder is deleted // folder links are deleted automatically when original folder is deleted
// Software Engineering Project is the default folder template coming from ACS, should not be deleted // Software Engineering Project is the default folder template coming from ACS, should not be deleted
const nodesToDelete = (await this.adminApi.nodes.getNodeChildren(spaceTemplatesNodeId)).list.entries const nodesToDelete = (await this.nodes.getNodeChildren(spaceTemplatesNodeId)).list.entries
.filter((node) => node.entry.nodeType !== 'app:folderlink' && node.entry.name !== 'Software Engineering Project') .filter((node) => node.entry.nodeType !== 'app:folderlink' && node.entry.name !== 'Software Engineering Project')
.map((node) => node.entry.id); .map((node) => node.entry.id);
return this.adminApi.nodes.deleteNodesById(nodesToDelete); return this.nodes.deleteNodesById(nodesToDelete);
} }
async createLinkToFileId(originalFileId: string, destinationParentId: string): Promise<NodeEntry> { async createLinkToFileId(originalFileId: string, destinationParentId: string): Promise<NodeEntry> {
return this.adminApi.nodes.createFileLink(originalFileId, destinationParentId); return this.nodes.createFileLink(originalFileId, destinationParentId);
} }
async createLinkToFileName(originalFileName: string, originalFileParentId: string, destinationParentId?: string): Promise<NodeEntry> { async createLinkToFileName(originalFileName: string, originalFileParentId: string, destinationParentId?: string): Promise<NodeEntry> {
@@ -145,13 +136,13 @@ export class AdminActions {
destinationParentId = originalFileParentId; destinationParentId = originalFileParentId;
} }
const nodeId = await this.adminApi.nodes.getNodeIdFromParent(originalFileName, originalFileParentId); const nodeId = await this.nodes.getNodeIdFromParent(originalFileName, originalFileParentId);
return this.createLinkToFileId(nodeId, destinationParentId); return this.createLinkToFileId(nodeId, destinationParentId);
} }
async createLinkToFolderId(originalFolderId: string, destinationParentId: string): Promise<NodeEntry> { async createLinkToFolderId(originalFolderId: string, destinationParentId: string): Promise<NodeEntry> {
return this.adminApi.nodes.createFolderLink(originalFolderId, destinationParentId); return this.nodes.createFolderLink(originalFolderId, destinationParentId);
} }
async createLinkToFolderName(originalFolderName: string, originalFolderParentId: string, destinationParentId?: string): Promise<NodeEntry> { async createLinkToFolderName(originalFolderName: string, originalFolderParentId: string, destinationParentId?: string): Promise<NodeEntry> {
@@ -159,7 +150,7 @@ export class AdminActions {
destinationParentId = originalFolderParentId; destinationParentId = originalFolderParentId;
} }
const nodeId = await this.adminApi.nodes.getNodeIdFromParent(originalFolderName, originalFolderParentId); const nodeId = await this.nodes.getNodeIdFromParent(originalFolderName, originalFolderParentId);
return this.createLinkToFolderId(nodeId, destinationParentId); return this.createLinkToFolderId(nodeId, destinationParentId);
} }

View File

@@ -26,5 +26,6 @@
export * from './repo-client/apis'; export * from './repo-client/apis';
export * from './repo-client/repo-client'; export * from './repo-client/repo-client';
export * from './admin-actions'; export * from './admin-actions';
export * from './user-actions';
export * from './browser-utils'; export * from './browser-utils';
export * from './utils'; export * from './utils';

View File

@@ -1,45 +0,0 @@
/*!
* @license
* Alfresco Example Content Application
*
* Copyright (C) 2005 - 2020 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
*
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
import { RepoApi } from '../repo-api';
import { CommentsApi as AdfCommentsApi } from '@alfresco/js-api';
export class CommentsApi extends RepoApi {
commentsApi = new AdfCommentsApi(this.alfrescoJsApi);
constructor(username?: string, password?: string) {
super(username, password);
}
async addComment(nodeId: string, comment: string) {
try {
await this.apiAuth();
return await this.commentsApi.createComment(nodeId, { content: comment });
} catch (error) {
this.handleError(`${this.constructor.name} ${this.addComment.name}`, error);
return null;
}
}
}

View File

@@ -23,7 +23,6 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
export * from './comments/comments-api';
export * from './favorites/favorites-api'; export * from './favorites/favorites-api';
export * from './nodes/node-body-create'; export * from './nodes/node-body-create';
export * from './nodes/node-content-tree'; export * from './nodes/node-content-tree';
@@ -33,6 +32,5 @@ export * from './queries/queries-api';
export * from './search/search-api'; export * from './search/search-api';
export * from './shared-links/shared-links-api'; export * from './shared-links/shared-links-api';
export * from './sites/sites-api'; export * from './sites/sites-api';
export * from './trashcan/trashcan-api';
export * from './upload/upload-api'; export * from './upload/upload-api';
export * from './repo-api'; export * from './repo-api';

View File

@@ -480,6 +480,7 @@ export class NodesApi extends RepoApi {
} }
} }
/* @deprecated check {UserActions.unlockNodes} instead. */
async unlockFile(nodeId: string): Promise<NodeEntry | null> { async unlockFile(nodeId: string): Promise<NodeEntry | null> {
try { try {
await this.apiAuth(); await this.apiAuth();

View File

@@ -164,13 +164,12 @@ export class SitesApi extends RepoApi {
} }
async deleteSites(siteIds: string[], permanent: boolean = true) { async deleteSites(siteIds: string[], permanent: boolean = true) {
try { if (siteIds && siteIds.length > 0) {
return siteIds.reduce(async (previous, current) => { await this.apiAuth();
await previous;
return this.deleteSite(current, permanent); for (const siteId of siteIds) {
}, Promise.resolve()); await this.sitesApi.deleteSite(siteId, { permanent });
} catch (error) { }
this.handleError(`SitesApi deleteSites : catch : `, error);
} }
} }

View File

@@ -1,113 +0,0 @@
/*!
* @license
* Alfresco Example Content Application
*
* Copyright (C) 2005 - 2020 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
*
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
import { RepoApi } from '../repo-api';
import { Logger } from '@alfresco/adf-testing';
import { Utils } from '../../../../utilities/utils';
import { TrashcanApi as AdfTrashcanApi } from '@alfresco/js-api';
export class TrashcanApi extends RepoApi {
trashcanApi = new AdfTrashcanApi(this.alfrescoJsApi);
constructor(username?: string, password?: string) {
super(username, password);
}
async permanentlyDelete(id: string) {
try {
await this.apiAuth();
return await this.trashcanApi.deleteDeletedNode(id);
} catch (error) {
this.handleError(`TrashcanApi permanentlyDelete : catch : `, error);
}
}
async restore(id: string) {
try {
await this.apiAuth();
return await this.trashcanApi.restoreDeletedNode(id);
} catch (error) {
this.handleError(`TrashcanApi restore : catch : `, error);
return null;
}
}
async getDeletedNodes() {
const opts = {
maxItems: 1000
};
try {
await this.apiAuth();
return await this.trashcanApi.listDeletedNodes(opts);
} catch (error) {
this.handleError(`TrashcanApi getDeletedNodes : catch : `, error);
return null;
}
}
async getDeletedNodesTotalItems(): Promise<number> {
const opts = {
maxItems: 1000
};
try {
await this.apiAuth();
return (await this.trashcanApi.listDeletedNodes(opts)).list.pagination.totalItems;
} catch (error) {
this.handleError(`TrashcanApi getDeletedNodesTotalItems : catch : `, error);
return -1;
}
}
async emptyTrash() {
try {
const ids = (await this.getDeletedNodes()).list.entries.map((entries) => entries.entry.id);
return await ids.reduce(async (previous, current) => {
await previous;
return this.permanentlyDelete(current);
}, Promise.resolve());
} catch (error) {
this.handleError(`TrashcanApi emptyTrash : catch : `, error);
}
}
async waitForApi(data: { expect: number }) {
try {
const deletedFiles = async () => {
const totalItems = await this.getDeletedNodesTotalItems();
if (totalItems !== data.expect) {
return Promise.reject(totalItems);
} else {
return Promise.resolve(totalItems);
}
};
return await Utils.retryCall(deletedFiles);
} catch (error) {
Logger.error(`TrashcanApi waitForApi : catch : `);
Logger.error(`\tExpected: ${data.expect} items, but found ${error}`);
}
}
}

View File

@@ -24,9 +24,12 @@
*/ */
import { browser } from 'protractor'; import { browser } from 'protractor';
import { NodesApi, CommentsApi, SitesApi, FavoritesApi, QueriesApi, SharedLinksApi, TrashcanApi, SearchApi, UploadApi } from './apis'; import { NodesApi, SitesApi, FavoritesApi, QueriesApi, SharedLinksApi, SearchApi, UploadApi } from './apis';
import { AlfrescoApi } from '@alfresco/js-api'; import { AlfrescoApi } from '@alfresco/js-api';
/**
* @deprecated Use {AdminActions} or {UserActions} instead.
*/
export class RepoClient { export class RepoClient {
alfrescoApi: AlfrescoApi; alfrescoApi: AlfrescoApi;
@@ -43,10 +46,6 @@ export class RepoClient {
return new NodesApi(this.username, this.password); return new NodesApi(this.username, this.password);
} }
get comments(): CommentsApi {
return new CommentsApi(this.username, this.password);
}
get sites(): SitesApi { get sites(): SitesApi {
return new SitesApi(this.username, this.password); return new SitesApi(this.username, this.password);
} }
@@ -59,10 +58,6 @@ export class RepoClient {
return new SharedLinksApi(this.username, this.password); return new SharedLinksApi(this.username, this.password);
} }
get trashcan(): TrashcanApi {
return new TrashcanApi(this.username, this.password);
}
get search(): SearchApi { get search(): SearchApi {
return new SearchApi(this.username, this.password); return new SearchApi(this.username, this.password);
} }

View File

@@ -0,0 +1,165 @@
/*!
* @license
* Alfresco Example Content Application
*
* Copyright (C) 2005 - 2020 Alfresco Software Limited
*
* This file is part of the Alfresco Example Content Application.
* If the software was purchased under a paid Alfresco license, the terms of
* the paid license agreement will prevail. Otherwise, the software is
* provided under the following open source license terms:
*
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
import { AlfrescoApi, Comment, CommentsApi, NodesApi, TrashcanApi, SitesApi, SharedlinksApi } from '@alfresco/js-api';
import { browser } from 'protractor';
import { Utils } from './utils';
export class UserActions {
protected readonly alfrescoApi: AlfrescoApi;
readonly commentsApi: CommentsApi;
readonly nodesApi: NodesApi;
readonly trashcanApi: TrashcanApi;
readonly sitesApi: SitesApi;
readonly sharedLinksApi: SharedlinksApi;
protected username: string;
protected password: string;
constructor() {
this.alfrescoApi = new AlfrescoApi();
this.alfrescoApi.setConfig(browser.params.config);
this.commentsApi = new CommentsApi(this.alfrescoApi);
this.nodesApi = new NodesApi(this.alfrescoApi);
this.trashcanApi = new TrashcanApi(this.alfrescoApi);
this.sitesApi = new SitesApi(this.alfrescoApi);
this.sharedLinksApi = new SharedlinksApi(this.alfrescoApi);
}
async login(username: string, password: string) {
this.username = username || this.username;
this.password = password || this.password;
return this.alfrescoApi.login(this.username, this.password);
}
async logout(): Promise<any> {
await this.alfrescoApi.login(this.username, this.password);
return this.alfrescoApi.logout();
}
async createComment(nodeId: string, content: string): Promise<Comment> {
const comment = await this.commentsApi.createComment(nodeId, { content });
return comment?.entry;
}
/**
* Delete multiple nodes.
* @param nodeIds The list of node IDs to delete.
* @param permanent Delete permanently, without moving to the trashcan? (default: true)
*/
async deleteNodes(nodeIds: string[], permanent: boolean = true): Promise<any> {
for (const nodeId of nodeIds) {
await this.nodesApi.deleteNode(nodeId, { permanent });
}
}
/**
* Empties the trashcan. Uses multiple batches 1000 nodes each.
*/
async emptyTrashcan(): Promise<any> {
const nodes = await this.trashcanApi.listDeletedNodes({
maxItems: 1000
});
if (nodes?.list?.entries && nodes?.list?.entries?.length > 0) {
const ids = nodes.list.entries.map((entries) => entries.entry.id);
for (const nodeId of ids) {
await this.trashcanApi.deleteDeletedNode(nodeId);
}
await this.emptyTrashcan();
}
}
/**
* Returns the amount of deleted nodes in the trashcan.
* TODO: limited to 1000 items only, needs improvements.
*/
async getTrashcanSize(): Promise<number> {
const response = await this.trashcanApi.listDeletedNodes({
maxItems: 1000
});
return response?.list?.pagination?.totalItems || 0;
}
/**
* Performs multiple calls to retrieve the size of the trashcan until the expectedSize is reached.
* Used with eventual consistency calls.
* @param expectedSize Size of the trashcan to wait for.
*/
async waitForTrashcanSize(expectedSize: number): Promise<number> {
return Utils.retryCall(async () => {
const totalItems = await this.getTrashcanSize();
if (totalItems !== expectedSize) {
return Promise.reject(totalItems);
} else {
return Promise.resolve(totalItems);
}
});
}
/**
* Unlock multiple nodes.
* @param nodeIds The list of node IDs to unlock.
*/
async unlockNodes(nodeIds: string[]): Promise<any> {
for (const nodeId of nodeIds) {
await this.nodesApi.unlockNode(nodeId);
}
}
/**
* Delete multiple sites/libraries.
* @param siteIds The list of the site/library IDs to delete.
* @param permanent Delete permanently, without moving to the trashcan? (default: true)
*/
async deleteSites(siteIds: string[], permanent: boolean = true) {
if (siteIds && siteIds.length > 0) {
for (const siteId of siteIds) {
await this.sitesApi.deleteSite(siteId, { permanent });
}
}
}
/**
* Creates shared links for the given nodes.
* @param nodeIds The list of node IDs to share.
* @param expiresAt (optional) Expiration date.
*/
async shareNodes(nodeIds: string[], expiresAt?: Date): Promise<any> {
for (const nodeId of nodeIds) {
await this.sharedLinksApi.createSharedLink({
nodeId,
expiresAt
});
}
}
}