mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-12 17:04:46 +00:00
[ACA-990] add tests for Recent Files, Shared Files and location redirect (#105)
* add tests for Recent Files and Shared Files list views add tests for location redirect * small fix
This commit is contained in:
parent
39458aa97a
commit
43b020ca51
@ -34,6 +34,7 @@ export class DataTable extends Component {
|
|||||||
row: 'tr',
|
row: 'tr',
|
||||||
selectedRow: 'tr.is-selected',
|
selectedRow: 'tr.is-selected',
|
||||||
cell: 'td',
|
cell: 'td',
|
||||||
|
locationLink: 'app-location-link',
|
||||||
|
|
||||||
emptyListContainer: 'td.adf-no-content-container',
|
emptyListContainer: 'td.adf-no-content-container',
|
||||||
emptyFolderDragAndDrop: '.adf-empty-list_template .adf-empty-folder',
|
emptyFolderDragAndDrop: '.adf-empty-list_template .adf-empty-folder',
|
||||||
@ -45,6 +46,7 @@ export class DataTable extends Component {
|
|||||||
head: ElementFinder = this.component.element(by.css(DataTable.selectors.head));
|
head: ElementFinder = this.component.element(by.css(DataTable.selectors.head));
|
||||||
body: ElementFinder = this.component.element(by.css(DataTable.selectors.body));
|
body: ElementFinder = this.component.element(by.css(DataTable.selectors.body));
|
||||||
cell = by.css(DataTable.selectors.cell);
|
cell = by.css(DataTable.selectors.cell);
|
||||||
|
locationLink = by.css(DataTable.selectors.locationLink);
|
||||||
emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer));
|
emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer));
|
||||||
emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop));
|
emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop));
|
||||||
emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle));
|
emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle));
|
||||||
@ -142,6 +144,15 @@ export class DataTable extends Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getItemLocation(name: string) {
|
||||||
|
const rowLocator = by.cssContainingText(DataTable.selectors.row, name);
|
||||||
|
return this.body.element(rowLocator).element(this.locationLink);
|
||||||
|
}
|
||||||
|
|
||||||
|
clickItemLocation(name: string) {
|
||||||
|
return this.getItemLocation(name).click();
|
||||||
|
}
|
||||||
|
|
||||||
// empty state methods
|
// empty state methods
|
||||||
isEmptyList(): promise.Promise<boolean> {
|
isEmptyList(): promise.Promise<boolean> {
|
||||||
return this.emptyList.isPresent();
|
return this.emptyList.isPresent();
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ElementFinder, ElementArrayFinder, by } from 'protractor';
|
import { ElementFinder, ElementArrayFinder, by, promise } from 'protractor';
|
||||||
import { Menu } from '../menu/menu';
|
import { Menu } from '../menu/menu';
|
||||||
import { Component } from '../component';
|
import { Component } from '../component';
|
||||||
|
|
||||||
@ -34,4 +34,22 @@ export class ToolbarBreadcrumb extends Component {
|
|||||||
getNthItem(nth: number): ElementFinder {
|
getNthItem(nth: number): ElementFinder {
|
||||||
return this.items.get(nth - 1);
|
return this.items.get(nth - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getItemsCount(): promise.Promise<number> {
|
||||||
|
return this.items.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
getFirstItemName(): promise.Promise<string> {
|
||||||
|
return this.items.get(0).getAttribute('title');
|
||||||
|
}
|
||||||
|
|
||||||
|
getCurrentItem(): promise.Promise<ElementFinder> {
|
||||||
|
return this.getItemsCount()
|
||||||
|
.then(count => this.getNthItem(count));
|
||||||
|
}
|
||||||
|
|
||||||
|
getCurrentItemName(): promise.Promise<string> {
|
||||||
|
return this.getCurrentItem()
|
||||||
|
.then(node => node.getAttribute('title'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ describe('Favorites', () => {
|
|||||||
const logoutPage = new LogoutPage();
|
const logoutPage = new LogoutPage();
|
||||||
const favoritesPage = new BrowsingPage();
|
const favoritesPage = new BrowsingPage();
|
||||||
const { dataTable } = favoritesPage;
|
const { dataTable } = favoritesPage;
|
||||||
|
const { breadcrumb } = favoritesPage.toolbar;
|
||||||
|
|
||||||
beforeAll(done => {
|
beforeAll(done => {
|
||||||
apis.admin.people.createUser(username)
|
apis.admin.people.createUser(username)
|
||||||
@ -64,7 +65,7 @@ describe('Favorites', () => {
|
|||||||
|
|
||||||
afterAll(done => {
|
afterAll(done => {
|
||||||
Promise.all([
|
Promise.all([
|
||||||
apis.admin.sites.deleteSite(siteName, true),
|
apis.admin.sites.deleteSite(siteName),
|
||||||
apis.user.nodes.deleteNodes([ folderName ]),
|
apis.user.nodes.deleteNodes([ folderName ]),
|
||||||
logoutPage.load()
|
logoutPage.load()
|
||||||
])
|
])
|
||||||
@ -113,4 +114,36 @@ describe('Favorites', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - item in user Home', () => {
|
||||||
|
dataTable.clickItemLocation(folderName)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('Personal Files');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in folder', () => {
|
||||||
|
dataTable.clickItemLocation(fileName2)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe(folderName);
|
||||||
|
})
|
||||||
|
.then(() => breadcrumb.getFirstItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('Personal Files');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in site', () => {
|
||||||
|
dataTable.clickItemLocation(fileName1)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe(siteName);
|
||||||
|
})
|
||||||
|
.then(() => breadcrumb.getFirstItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('File Libraries');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -54,6 +54,7 @@ describe('File Libraries', () => {
|
|||||||
.then(() => apis.admin.sites.addSiteMember(sitePublic, username, SITE_ROLES.SITE_CONSUMER))
|
.then(() => apis.admin.sites.addSiteMember(sitePublic, username, SITE_ROLES.SITE_CONSUMER))
|
||||||
.then(() => apis.admin.sites.addSiteMember(siteModerated, username, SITE_ROLES.SITE_MANAGER))
|
.then(() => apis.admin.sites.addSiteMember(siteModerated, username, SITE_ROLES.SITE_MANAGER))
|
||||||
.then(() => apis.admin.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONTRIBUTOR))
|
.then(() => apis.admin.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONTRIBUTOR))
|
||||||
|
|
||||||
.then(() => loginPage.load())
|
.then(() => loginPage.load())
|
||||||
.then(() => loginPage.loginWith(username))
|
.then(() => loginPage.loginWith(username))
|
||||||
.then(done);
|
.then(done);
|
||||||
@ -67,10 +68,10 @@ describe('File Libraries', () => {
|
|||||||
|
|
||||||
afterAll(done => {
|
afterAll(done => {
|
||||||
Promise.all([
|
Promise.all([
|
||||||
apis.admin.sites.deleteSite(sitePublic, true),
|
apis.admin.sites.deleteSite(sitePublic),
|
||||||
apis.admin.sites.deleteSite(siteModerated, true),
|
apis.admin.sites.deleteSite(siteModerated),
|
||||||
apis.admin.sites.deleteSite(sitePrivate, true),
|
apis.admin.sites.deleteSite(sitePrivate),
|
||||||
apis.admin.sites.deleteSite(adminSite, true),
|
apis.admin.sites.deleteSite(adminSite),
|
||||||
logoutPage.load()
|
logoutPage.load()
|
||||||
])
|
])
|
||||||
.then(done);
|
.then(done);
|
||||||
|
@ -17,24 +17,23 @@
|
|||||||
|
|
||||||
import { browser } from 'protractor';
|
import { browser } from 'protractor';
|
||||||
|
|
||||||
import { APP_ROUTES } from '../../configs';
|
import { SIDEBAR_LABELS } from '../../configs';
|
||||||
import { LoginPage, LogoutPage, BrowsingPage } from '../../pages/pages';
|
import { LoginPage, LogoutPage, BrowsingPage } from '../../pages/pages';
|
||||||
import { Utils } from '../../utilities/utils';
|
import { Utils } from '../../utilities/utils';
|
||||||
import { RepoClient, NodeContentTree } from '../../utilities/repo-client/repo-client';
|
import { RepoClient } from '../../utilities/repo-client/repo-client';
|
||||||
|
|
||||||
describe('Personal Files', () => {
|
describe('Personal Files', () => {
|
||||||
const username = `user-${Utils.random()}`;
|
const username = `user-${Utils.random()}`;
|
||||||
const password = username;
|
|
||||||
|
|
||||||
const apis = {
|
const apis = {
|
||||||
admin: new RepoClient(),
|
admin: new RepoClient(),
|
||||||
user: new RepoClient(username, password)
|
user: new RepoClient(username, username)
|
||||||
};
|
};
|
||||||
|
|
||||||
const loginPage = new LoginPage();
|
const loginPage = new LoginPage();
|
||||||
const logoutPage = new LogoutPage();
|
const logoutPage = new LogoutPage();
|
||||||
const personalFilesPage = new BrowsingPage(APP_ROUTES.PERSONAL_FILES);
|
const personalFilesPage = new BrowsingPage();
|
||||||
const dataTable = personalFilesPage.dataTable;
|
const { dataTable } = personalFilesPage;
|
||||||
|
|
||||||
const adminFolder = `admin-folder-${Utils.random()}`;
|
const adminFolder = `admin-folder-${Utils.random()}`;
|
||||||
|
|
||||||
@ -44,7 +43,7 @@ describe('Personal Files', () => {
|
|||||||
beforeAll(done => {
|
beforeAll(done => {
|
||||||
Promise
|
Promise
|
||||||
.all([
|
.all([
|
||||||
apis.admin.people.createUser(username, password),
|
apis.admin.people.createUser(username),
|
||||||
apis.admin.nodes.createFolders([ adminFolder ])
|
apis.admin.nodes.createFolders([ adminFolder ])
|
||||||
])
|
])
|
||||||
.then(() => apis.user.nodes.createFolders([ userFolder ]))
|
.then(() => apis.user.nodes.createFolders([ userFolder ]))
|
||||||
@ -71,14 +70,13 @@ describe('Personal Files', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(done => {
|
beforeEach(done => {
|
||||||
personalFilesPage.load()
|
personalFilesPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)
|
||||||
.then(() => dataTable.waitForHeader())
|
.then(() => dataTable.waitForHeader())
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(done => {
|
afterAll(done => {
|
||||||
logoutPage.load()
|
logoutPage.load().then(done);
|
||||||
.then(done);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has "Data Dictionary" folder', () => {
|
it('has "Data Dictionary" folder', () => {
|
||||||
@ -93,19 +91,18 @@ describe('Personal Files', () => {
|
|||||||
describe(`Regular user's personal files`, () => {
|
describe(`Regular user's personal files`, () => {
|
||||||
beforeAll(done => {
|
beforeAll(done => {
|
||||||
loginPage.load()
|
loginPage.load()
|
||||||
.then(() => loginPage.loginWith(username, password))
|
.then(() => loginPage.loginWith(username))
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(done => {
|
beforeEach(done => {
|
||||||
personalFilesPage.load()
|
personalFilesPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.PERSONAL_FILES)
|
||||||
.then(() => dataTable.waitForHeader())
|
.then(() => dataTable.waitForHeader())
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(done => {
|
afterAll(done => {
|
||||||
logoutPage.load()
|
logoutPage.load().then(done);
|
||||||
.then(done);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has the correct columns', () => {
|
it('has the correct columns', () => {
|
||||||
@ -150,24 +147,5 @@ describe('Personal Files', () => {
|
|||||||
.toBe(true, 'user file is missing');
|
.toBe(true, 'user file is missing');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Some tests regarding selection, breadcrumb and toolbar
|
|
||||||
// probably they can be move to a different suite
|
|
||||||
describe('Item selection', () => {
|
|
||||||
it('has toolbar when selected', done => {
|
|
||||||
const { actions } = personalFilesPage.toolbar;
|
|
||||||
|
|
||||||
dataTable
|
|
||||||
.clickOnItemName(userFolder)
|
|
||||||
.then(() => {
|
|
||||||
expect(actions.isEmpty()).toBe(false, 'Toolbar to be present');
|
|
||||||
})
|
|
||||||
.then(() => actions.openMoreMenu())
|
|
||||||
.then(menu => {
|
|
||||||
expect(menu.items.count()).toBeGreaterThan(0, 'More actions has items');
|
|
||||||
})
|
|
||||||
.then(done);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
141
e2e/suites/list-views/recent-files.test.ts
Normal file
141
e2e/suites/list-views/recent-files.test.ts
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Copyright 2017 Alfresco Software, Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { browser, by } from 'protractor';
|
||||||
|
|
||||||
|
import { APP_ROUTES, SITE_VISIBILITY, SITE_ROLES, SIDEBAR_LABELS } from '../../configs';
|
||||||
|
import { LoginPage, LogoutPage, BrowsingPage } from '../../pages/pages';
|
||||||
|
import { Utils } from '../../utilities/utils';
|
||||||
|
import { RepoClient, NodeContentTree } from '../../utilities/repo-client/repo-client';
|
||||||
|
|
||||||
|
describe('Recent Files', () => {
|
||||||
|
const username = `user-${Utils.random()}`;
|
||||||
|
const password = username;
|
||||||
|
|
||||||
|
const folderName = `folder-${Utils.random()}`;
|
||||||
|
let folderId;
|
||||||
|
const fileName1 = `file-${Utils.random()}.txt`;
|
||||||
|
|
||||||
|
const fileName2 = `file-${Utils.random()}.txt`;
|
||||||
|
let file2Id;
|
||||||
|
|
||||||
|
const apis = {
|
||||||
|
admin: new RepoClient(),
|
||||||
|
user: new RepoClient(username, password)
|
||||||
|
};
|
||||||
|
|
||||||
|
const loginPage = new LoginPage();
|
||||||
|
const logoutPage = new LogoutPage();
|
||||||
|
const recentFilesPage = new BrowsingPage();
|
||||||
|
const { dataTable } = recentFilesPage;
|
||||||
|
const { breadcrumb } = recentFilesPage.toolbar;
|
||||||
|
|
||||||
|
beforeAll(done => {
|
||||||
|
apis.admin.people.createUser(username)
|
||||||
|
.then(() => apis.user.nodes.createFolders([ folderName ]))
|
||||||
|
.then(resp => folderId = resp.data.entry.id)
|
||||||
|
.then(() => apis.user.nodes.createFiles([ fileName1 ], folderName))
|
||||||
|
|
||||||
|
.then(() => apis.user.nodes.createFiles([ fileName2 ]))
|
||||||
|
.then(resp => file2Id = resp.data.entry.id)
|
||||||
|
|
||||||
|
.then(() => loginPage.load())
|
||||||
|
.then(() => loginPage.loginWith(username))
|
||||||
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(done => {
|
||||||
|
recentFilesPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.RECENT_FILES)
|
||||||
|
.then(() => dataTable.isEmptyList())
|
||||||
|
.then(empty => {
|
||||||
|
if (empty) {
|
||||||
|
browser.sleep(3000);
|
||||||
|
recentFilesPage.refresh();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(() => dataTable.waitForHeader())
|
||||||
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(done => {
|
||||||
|
Promise.all([
|
||||||
|
apis.user.nodes.deleteNodesById([ folderId, file2Id ]),
|
||||||
|
logoutPage.load()
|
||||||
|
])
|
||||||
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('has the correct columns', () => {
|
||||||
|
const labels = [ 'Name', 'Location', 'Size', 'Modified' ];
|
||||||
|
const elements = labels.map(label => dataTable.getColumnHeaderByLabel(label));
|
||||||
|
|
||||||
|
expect(dataTable.getColumnHeaders().count()).toBe(4 + 1, 'Incorrect number of columns');
|
||||||
|
|
||||||
|
elements.forEach((element, index) => {
|
||||||
|
expect(element.isPresent()).toBe(true, `"${labels[index]}" is missing`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('displays the files added by the current user in the last 30 days', () => {
|
||||||
|
expect(dataTable.countRows()).toEqual(2, 'Incorrect number of sites displayed');
|
||||||
|
expect(dataTable.getRowByName(fileName1).isPresent()).toBe(true, `${fileName1} not displayed`);
|
||||||
|
expect(dataTable.getRowByName(fileName2).isPresent()).toBe(true, `${fileName2} not displayed`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column displays the parent folder of the file', () => {
|
||||||
|
const itemsLocations = {
|
||||||
|
[fileName2]: 'Personal Files',
|
||||||
|
[fileName1]: folderName
|
||||||
|
};
|
||||||
|
|
||||||
|
dataTable.getRows()
|
||||||
|
.map((row) => {
|
||||||
|
return row.all(dataTable.cell).map(cell => cell.getText());
|
||||||
|
})
|
||||||
|
.then((rowCells) => {
|
||||||
|
return rowCells.reduce((acc, cell) => {
|
||||||
|
acc[cell[1]] = cell[2];
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
})
|
||||||
|
.then((recentList) => {
|
||||||
|
Object.keys(itemsLocations).forEach((item) => {
|
||||||
|
expect(recentList[item]).toEqual(itemsLocations[item]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in user Home', () => {
|
||||||
|
dataTable.clickItemLocation(fileName1)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe(folderName);
|
||||||
|
})
|
||||||
|
.then(() => breadcrumb.getFirstItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('Personal Files');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in folder', () => {
|
||||||
|
dataTable.clickItemLocation(fileName2)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('Personal Files');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
147
e2e/suites/list-views/shared-files.test.ts
Normal file
147
e2e/suites/list-views/shared-files.test.ts
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Copyright 2017 Alfresco Software, Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { browser, by } from 'protractor';
|
||||||
|
|
||||||
|
import { APP_ROUTES, SITE_VISIBILITY, SITE_ROLES, SIDEBAR_LABELS } from '../../configs';
|
||||||
|
import { LoginPage, LogoutPage, BrowsingPage } from '../../pages/pages';
|
||||||
|
import { Utils } from '../../utilities/utils';
|
||||||
|
import { RepoClient, NodeContentTree } from '../../utilities/repo-client/repo-client';
|
||||||
|
|
||||||
|
describe('Shared Files', () => {
|
||||||
|
const username = `user-${Utils.random()}`;
|
||||||
|
const password = username;
|
||||||
|
|
||||||
|
const siteName = `site-${Utils.random()}`;
|
||||||
|
const fileAdmin = `file-${Utils.random()}.txt`;
|
||||||
|
|
||||||
|
const folderUser = `folder-${Utils.random()}`;
|
||||||
|
const fileUser = `file-${Utils.random()}.txt`;
|
||||||
|
|
||||||
|
const apis = {
|
||||||
|
admin: new RepoClient(),
|
||||||
|
user: new RepoClient(username, password)
|
||||||
|
};
|
||||||
|
|
||||||
|
const loginPage = new LoginPage();
|
||||||
|
const logoutPage = new LogoutPage();
|
||||||
|
const sharedFilesPage = new BrowsingPage();
|
||||||
|
const { dataTable } = sharedFilesPage;
|
||||||
|
const { breadcrumb } = sharedFilesPage.toolbar;
|
||||||
|
|
||||||
|
beforeAll(done => {
|
||||||
|
apis.admin.people.createUser(username)
|
||||||
|
.then(() => apis.admin.sites.createSite(siteName, SITE_VISIBILITY.PUBLIC))
|
||||||
|
.then(() => apis.admin.sites.addSiteMember(siteName, username, SITE_ROLES.SITE_CONSUMER))
|
||||||
|
.then(() => apis.admin.nodes.createFiles([ fileAdmin ], `Sites/${siteName}/documentLibrary`))
|
||||||
|
.then(resp => apis.admin.shared.shareFileById(resp.data.entry.id))
|
||||||
|
|
||||||
|
.then(() => apis.user.nodes.createFolders([ folderUser ]))
|
||||||
|
.then(() => apis.user.nodes.createFiles([ fileUser ], folderUser))
|
||||||
|
.then(resp => apis.user.shared.shareFileById(resp.data.entry.id))
|
||||||
|
|
||||||
|
.then(() => loginPage.load())
|
||||||
|
.then(() => loginPage.loginWith(username))
|
||||||
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(done => {
|
||||||
|
sharedFilesPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.SHARED_FILES)
|
||||||
|
.then(() => dataTable.isEmptyList())
|
||||||
|
.then(empty => {
|
||||||
|
if (empty) {
|
||||||
|
browser.sleep(5000);
|
||||||
|
sharedFilesPage.refresh();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(() => dataTable.waitForHeader())
|
||||||
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(done => {
|
||||||
|
Promise.all([
|
||||||
|
apis.admin.sites.deleteSite(siteName),
|
||||||
|
apis.user.nodes.deleteNodes([ folderUser ]),
|
||||||
|
logoutPage.load()
|
||||||
|
])
|
||||||
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('has the correct columns', () => {
|
||||||
|
const labels = [ 'Name', 'Location', 'Size', 'Modified', 'Modified by', 'Shared by' ];
|
||||||
|
const elements = labels.map(label => dataTable.getColumnHeaderByLabel(label));
|
||||||
|
|
||||||
|
expect(dataTable.getColumnHeaders().count()).toBe(6 + 1, 'Incorrect number of columns');
|
||||||
|
|
||||||
|
elements.forEach((element, index) => {
|
||||||
|
expect(element.isPresent()).toBe(true, `"${labels[index]}" is missing`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('displays the files shared by everyone', () => {
|
||||||
|
expect(dataTable.countRows()).toEqual(2, 'Incorrect number of items displayed');
|
||||||
|
expect(dataTable.getRowByName(fileAdmin).isPresent()).toBe(true, `${fileAdmin} not displayed`);
|
||||||
|
expect(dataTable.getRowByName(fileUser).isPresent()).toBe(true, `${fileUser} not displayed`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column displays the parent folder of the file', () => {
|
||||||
|
const itemsLocations = {
|
||||||
|
[fileAdmin]: siteName,
|
||||||
|
[fileUser]: folderUser
|
||||||
|
};
|
||||||
|
|
||||||
|
dataTable.getRows()
|
||||||
|
.map((row) => {
|
||||||
|
return row.all(dataTable.cell).map(cell => cell.getText());
|
||||||
|
})
|
||||||
|
.then((rowCells) => {
|
||||||
|
return rowCells.reduce((acc, cell) => {
|
||||||
|
acc[cell[1]] = cell[2];
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
})
|
||||||
|
.then((recentList) => {
|
||||||
|
Object.keys(itemsLocations).forEach((item) => {
|
||||||
|
expect(recentList[item]).toEqual(itemsLocations[item]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in user Home', () => {
|
||||||
|
dataTable.clickItemLocation(fileUser)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe(folderUser);
|
||||||
|
})
|
||||||
|
.then(() => breadcrumb.getFirstItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('Personal Files');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in site', () => {
|
||||||
|
dataTable.clickItemLocation(fileAdmin)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe(siteName);
|
||||||
|
})
|
||||||
|
.then(() => breadcrumb.getFirstItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('File Libraries');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -48,6 +48,7 @@ describe('Trash', () => {
|
|||||||
const logoutPage = new LogoutPage();
|
const logoutPage = new LogoutPage();
|
||||||
const trashPage = new BrowsingPage();
|
const trashPage = new BrowsingPage();
|
||||||
const { dataTable } = trashPage;
|
const { dataTable } = trashPage;
|
||||||
|
const { breadcrumb } = trashPage.toolbar;
|
||||||
|
|
||||||
beforeAll(done => {
|
beforeAll(done => {
|
||||||
apis.admin.people.createUser(username)
|
apis.admin.people.createUser(username)
|
||||||
@ -64,11 +65,8 @@ describe('Trash', () => {
|
|||||||
.then(() => apis.user.nodes.createFolders([ folderUser ])
|
.then(() => apis.user.nodes.createFolders([ folderUser ])
|
||||||
.then(resp => folderUserId = resp.data.entry.id))
|
.then(resp => folderUserId = resp.data.entry.id))
|
||||||
|
|
||||||
.then(() => apis.admin.nodes.deleteNodeById(fileAdminId, false))
|
.then(() => apis.admin.nodes.deleteNodesById([ fileAdminId, folderAdminId ], false))
|
||||||
.then(() => apis.admin.nodes.deleteNodeById(folderAdminId, false))
|
.then(() => apis.user.nodes.deleteNodesById([ fileSiteId, fileUserId, folderUserId ], false))
|
||||||
.then(() => apis.user.nodes.deleteNodeById(fileSiteId, false))
|
|
||||||
.then(() => apis.user.nodes.deleteNodeById(fileUserId, false))
|
|
||||||
.then(() => apis.user.nodes.deleteNodeById(folderUserId, false))
|
|
||||||
|
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
@ -76,11 +74,7 @@ describe('Trash', () => {
|
|||||||
afterAll(done => {
|
afterAll(done => {
|
||||||
Promise.all([
|
Promise.all([
|
||||||
apis.admin.sites.deleteSite(siteName),
|
apis.admin.sites.deleteSite(siteName),
|
||||||
apis.admin.trashcan.permanentlyDelete(fileAdminId),
|
apis.admin.trashcan.emptyTrash()
|
||||||
apis.admin.trashcan.permanentlyDelete(folderAdminId),
|
|
||||||
apis.admin.trashcan.permanentlyDelete(fileSiteId),
|
|
||||||
apis.user.trashcan.permanentlyDelete(fileUserId),
|
|
||||||
apis.user.trashcan.permanentlyDelete(folderUserId)
|
|
||||||
])
|
])
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
@ -91,7 +85,11 @@ describe('Trash', () => {
|
|||||||
beforeAll(done => {
|
beforeAll(done => {
|
||||||
loginPage.load()
|
loginPage.load()
|
||||||
.then(() => loginPage.loginWithAdmin())
|
.then(() => loginPage.loginWithAdmin())
|
||||||
.then(() => trashPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH))
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(done => {
|
||||||
|
trashPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH)
|
||||||
.then(() => dataTable.waitForHeader())
|
.then(() => dataTable.waitForHeader())
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
@ -126,7 +124,11 @@ describe('Trash', () => {
|
|||||||
beforeAll(done => {
|
beforeAll(done => {
|
||||||
loginPage.load()
|
loginPage.load()
|
||||||
.then(() => loginPage.loginWith(username))
|
.then(() => loginPage.loginWith(username))
|
||||||
.then(() => trashPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH))
|
.then(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(done => {
|
||||||
|
trashPage.sidenav.navigateToLinkByLabel(SIDEBAR_LABELS.TRASH)
|
||||||
.then(() => dataTable.waitForHeader())
|
.then(() => dataTable.waitForHeader())
|
||||||
.then(done);
|
.then(done);
|
||||||
});
|
});
|
||||||
@ -152,6 +154,27 @@ describe('Trash', () => {
|
|||||||
expect(dataTable.getRowByName(fileSite).isPresent()).toBe(true, `${fileSite} not displayed`);
|
expect(dataTable.getRowByName(fileSite).isPresent()).toBe(true, `${fileSite} not displayed`);
|
||||||
expect(dataTable.getRowByName(fileUser).isPresent()).toBe(true, `${fileUser} not displayed`);
|
expect(dataTable.getRowByName(fileUser).isPresent()).toBe(true, `${fileUser} not displayed`);
|
||||||
expect(dataTable.getRowByName(folderUser).isPresent()).toBe(true, `${folderUser} not displayed`);
|
expect(dataTable.getRowByName(folderUser).isPresent()).toBe(true, `${folderUser} not displayed`);
|
||||||
|
expect(dataTable.getRowByName(fileAdmin).isPresent()).toBe(false, `${fileAdmin} is displayed`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in user Home', () => {
|
||||||
|
dataTable.clickItemLocation(fileUser)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('Personal Files');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Location column redirect - file in site', () => {
|
||||||
|
dataTable.clickItemLocation(fileSite)
|
||||||
|
.then(() => breadcrumb.getCurrentItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe(siteName);
|
||||||
|
})
|
||||||
|
.then(() => breadcrumb.getFirstItemName())
|
||||||
|
.then(name => {
|
||||||
|
expect(name).toBe('File Libraries');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user