mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +00:00
[ACA-1088] add tests for search results page and actions on search results (#1051)
* add tests for search results page and actions on search results * fix selector and add more tests * split unshare tests * fix tests * add more tests and TestRail ids
This commit is contained in:
committed by
Denys Vuika
parent
b69ed7da28
commit
deea3465e0
@@ -57,7 +57,13 @@ export class DataTable extends Component {
|
||||
|
||||
emptyListTitle: '.adf-empty-content__title',
|
||||
emptyListSubtitle: '.adf-empty-content__subtitle',
|
||||
emptyListText: '.adf-empty-content__text'
|
||||
emptyListText: '.adf-empty-content__text',
|
||||
|
||||
emptySearchText: '.empty-search__text',
|
||||
|
||||
searchResultsRow: 'aca-search-results-row',
|
||||
searchResultsRowLine: '.line',
|
||||
searchResultsNameLink: '.link'
|
||||
};
|
||||
|
||||
head: ElementFinder = this.component.element(by.css(DataTable.selectors.head));
|
||||
@@ -69,6 +75,8 @@ export class DataTable extends Component {
|
||||
emptyListSubtitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListSubtitle));
|
||||
emptyListText: ElementArrayFinder = this.component.all(by.css(DataTable.selectors.emptyListText));
|
||||
|
||||
emptySearchText: ElementFinder = this.component.element(by.css(DataTable.selectors.emptySearchText));
|
||||
|
||||
menu: Menu = new Menu();
|
||||
|
||||
constructor(ancestor?: ElementFinder) {
|
||||
@@ -76,12 +84,12 @@ export class DataTable extends Component {
|
||||
}
|
||||
|
||||
// Wait methods (waits for elements)
|
||||
waitForHeader() {
|
||||
return browser.wait(EC.presenceOf(this.head), BROWSER_WAIT_TIMEOUT, '--- timeout waitForHeader ---');
|
||||
async waitForHeader() {
|
||||
return await browser.wait(EC.presenceOf(this.head), BROWSER_WAIT_TIMEOUT, '--- timeout waitForHeader ---');
|
||||
}
|
||||
|
||||
waitForBody() {
|
||||
return browser.wait(EC.presenceOf(this.body), BROWSER_WAIT_TIMEOUT, '--- timeout waitForBody ---');
|
||||
async waitForBody() {
|
||||
return await browser.wait(EC.presenceOf(this.body), BROWSER_WAIT_TIMEOUT, '--- timeout waitForBody ---');
|
||||
}
|
||||
|
||||
async waitForEmptyState() {
|
||||
@@ -166,20 +174,28 @@ export class DataTable extends Component {
|
||||
return this.body.element(by.cssContainingText(DataTable.selectors.row, name));
|
||||
}
|
||||
|
||||
getRowCells(name: string, location: string = '') {
|
||||
return this.getRowByName(name, location).all(by.css(DataTable.selectors.cell));
|
||||
}
|
||||
|
||||
async getRowCellsCount(itemName: string) {
|
||||
return await this.getRowCells(itemName).count();
|
||||
}
|
||||
|
||||
getRowFirstCell(name: string, location: string = '') {
|
||||
return this.getRowByName(name, location).all(by.css(DataTable.selectors.cell)).get(0);
|
||||
return this.getRowCells(name, location).get(0);
|
||||
}
|
||||
|
||||
getRowNameCell(name: string) {
|
||||
return this.getRowByName(name).all(by.css(DataTable.selectors.cell)).get(1);
|
||||
getRowNameCell(name: string, location: string = '') {
|
||||
return this.getRowCells(name, location).get(1);
|
||||
}
|
||||
|
||||
getRowNameCellText(name: string) {
|
||||
return this.getRowNameCell(name).$('span');
|
||||
getRowNameCellSpan(name: string, location: string = '') {
|
||||
return this.getRowNameCell(name, location).$('span');
|
||||
}
|
||||
|
||||
async getItemNameTooltip(name: string) {
|
||||
return await this.getRowNameCellText(name).getAttribute('title');
|
||||
async getItemNameTooltip(name: string, location: string = '') {
|
||||
return await this.getRowNameCellSpan(name, location).getAttribute('title');
|
||||
}
|
||||
|
||||
async hasCheckMarkIcon(itemName: string, location: string = '') {
|
||||
@@ -266,7 +282,6 @@ export class DataTable extends Component {
|
||||
}
|
||||
|
||||
async rightClickOnMultipleSelection() {
|
||||
await this.wait();
|
||||
const itemFromSelection = this.getSelectedRows().get(0);
|
||||
await browser.actions().click(itemFromSelection, protractor.Button.RIGHT).perform();
|
||||
}
|
||||
@@ -330,6 +345,10 @@ export class DataTable extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
async getEmptySearchResultsText() {
|
||||
return await this.emptySearchText.getText();
|
||||
}
|
||||
|
||||
async getCellsContainingName(name: string) {
|
||||
const rows = this.getRows().all(by.cssContainingText(DataTable.selectors.cell, name));
|
||||
return rows.map(async cell => await cell.getText());
|
||||
@@ -370,4 +389,53 @@ export class DataTable extends Component {
|
||||
}, {});
|
||||
}
|
||||
|
||||
getSearchResultsRowByName(name: string, location: string = '') {
|
||||
if (location) {
|
||||
return this.body.all(by.cssContainingText(DataTable.selectors.searchResultsRow, name))
|
||||
.filter(async (elem) => await browser.isElementPresent(elem.element(by.cssContainingText(DataTable.selectors.searchResultsRowLine, location))))
|
||||
.first();
|
||||
}
|
||||
return this.body.element(by.cssContainingText(DataTable.selectors.searchResultsRow, name));
|
||||
}
|
||||
|
||||
getSearchResultRowLines(name: string, location: string = '') {
|
||||
return this.getSearchResultsRowByName(name, location).all(by.css(DataTable.selectors.searchResultsRowLine));
|
||||
}
|
||||
|
||||
async getSearchResultLinesCount(name: string, location: string = '') {
|
||||
return await this.getSearchResultRowLines(name, location).count();
|
||||
}
|
||||
|
||||
getSearchResultNthLine(name: string, location: string = '', index: number) {
|
||||
return this.getSearchResultRowLines(name, location).get(index);
|
||||
}
|
||||
|
||||
async getSearchResultNameAndTitle(name: string, location: string = '') {
|
||||
return await this.getSearchResultNthLine(name, location, 0).getText();
|
||||
}
|
||||
|
||||
async getSearchResultDescription(name: string, location: string = '') {
|
||||
return await this.getSearchResultNthLine(name, location, 1).getText();
|
||||
}
|
||||
|
||||
async getSearchResultModified(name: string, location: string = '') {
|
||||
return await this.getSearchResultNthLine(name, location, 2).getText();
|
||||
}
|
||||
|
||||
async getSearchResultLocation(name: string, location: string = '') {
|
||||
return await this.getSearchResultNthLine(name, location, 3).getText();
|
||||
}
|
||||
|
||||
getSearchResultNameLink(itemName: string, location: string = '') {
|
||||
return this.getSearchResultsRowByName(itemName, location).$(DataTable.selectors.searchResultsNameLink);
|
||||
}
|
||||
|
||||
async hasLinkOnSearchResultName(itemName: string, location: string = '') {
|
||||
return await this.getSearchResultNameLink(itemName, location).isPresent();
|
||||
}
|
||||
|
||||
async clickSearchResultNameLink(itemName: string, location: string = '') {
|
||||
await this.getSearchResultNameLink(itemName, location).click();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -109,7 +109,7 @@ export class ConfirmDialog extends Component {
|
||||
}
|
||||
|
||||
async clickCancel() {
|
||||
return await this.clickButton('Cancel');
|
||||
return await this.cancelButton.click();
|
||||
}
|
||||
|
||||
async clickKeep() {
|
||||
|
@@ -68,8 +68,8 @@ export class LoginComponent extends Component {
|
||||
await this.enterPassword(password);
|
||||
}
|
||||
|
||||
submit() {
|
||||
return this.submitButton.click();
|
||||
async submit() {
|
||||
await this.submitButton.click();
|
||||
}
|
||||
|
||||
async clickPasswordVisibility() {
|
||||
|
@@ -82,7 +82,6 @@ export class Menu extends Component {
|
||||
}
|
||||
|
||||
async waitForMenuToOpen() {
|
||||
await browser.wait(EC.presenceOf(browser.element(by.css('.cdk-overlay-backdrop'))), BROWSER_WAIT_TIMEOUT);
|
||||
await browser.wait(EC.presenceOf(browser.element(by.css('.mat-menu-panel'))), BROWSER_WAIT_TIMEOUT);
|
||||
await browser.wait(EC.visibilityOf(this.items.get(0)), BROWSER_WAIT_TIMEOUT);
|
||||
}
|
||||
|
@@ -167,9 +167,4 @@ export class SearchInput extends Component {
|
||||
await this.searchBar.sendKeys(text);
|
||||
await this.searchBar.sendKeys(protractor.Key.ENTER);
|
||||
}
|
||||
|
||||
async searchForTextAndCloseSearchOptions(text: string) {
|
||||
await this.searchFor(text);
|
||||
await Utils.pressEscape();
|
||||
}
|
||||
}
|
||||
|
@@ -25,6 +25,7 @@
|
||||
|
||||
import { browser, by, ElementFinder, ExpectedConditions as EC, until } from 'protractor';
|
||||
import { BROWSER_WAIT_TIMEOUT, USE_HASH_STRATEGY } from './../configs';
|
||||
import { Utils } from '../utilities/utils';
|
||||
|
||||
export abstract class Page {
|
||||
protected static locators = {
|
||||
@@ -81,6 +82,16 @@ export abstract class Page {
|
||||
await browser.wait(EC.visibilityOf(this.dialogContainer), BROWSER_WAIT_TIMEOUT);
|
||||
}
|
||||
|
||||
async isDialogOpen() {
|
||||
return await browser.isElementPresent(this.dialogContainer);
|
||||
}
|
||||
|
||||
async closeOpenDialogs() {
|
||||
while (await this.isDialogOpen()) {
|
||||
await Utils.pressEscape();
|
||||
}
|
||||
}
|
||||
|
||||
async refresh() {
|
||||
await browser.refresh();
|
||||
await this.waitForApp();
|
||||
|
@@ -23,13 +23,14 @@
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { browser, ElementFinder } from 'protractor';
|
||||
import { browser, by } from 'protractor';
|
||||
import { BrowsingPage } from './browsing-page';
|
||||
|
||||
export class SearchResultsPage extends BrowsingPage {
|
||||
|
||||
private static selectors = {
|
||||
root: 'aca-search-results',
|
||||
|
||||
filter: 'adf-search-filter',
|
||||
expansionPanel: 'mat-expansion-panel',
|
||||
size: '#expansion-panel-SEARCH.CATEGORIES.SIZE',
|
||||
@@ -41,17 +42,18 @@ export class SearchResultsPage extends BrowsingPage {
|
||||
location: '#expansion-panel-SEARCH.CATEGORIES.LOCATION',
|
||||
|
||||
resultsContent: 'adf-search-results__content',
|
||||
resultsContentHeader: 'adf-search-results__content-header',
|
||||
resultsContentHeader: '.adf-search-results__content-header',
|
||||
resultsInfoText: 'adf-search-results--info-text',
|
||||
resultsFacets: 'adf-search-results__facets',
|
||||
|
||||
sortingPicker: 'adf-sorting-picker'
|
||||
};
|
||||
|
||||
root: ElementFinder = browser.$(SearchResultsPage.selectors.root);
|
||||
|
||||
waitForResults() {
|
||||
return this.dataTable.waitForBody();
|
||||
async waitForResults() {
|
||||
return await this.dataTable.waitForBody();
|
||||
}
|
||||
|
||||
async getResultsHeader() {
|
||||
return await browser.element(by.css(SearchResultsPage.selectors.resultsContentHeader)).getText();
|
||||
}
|
||||
}
|
||||
|
@@ -576,7 +576,7 @@ describe('Context menu actions - multiple selection : ', () => {
|
||||
it('correct actions appear when multiple files are selected - [C291831]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-inSite-file');
|
||||
await searchInput.searchFor('my-inSite-file');
|
||||
await dataTable.selectMultipleItems([ file1Site, file2Site ]);
|
||||
await dataTable.rightClickOnMultipleSelection();
|
||||
|
||||
@@ -596,7 +596,7 @@ describe('Context menu actions - multiple selection : ', () => {
|
||||
it('correct actions appear when multiple locked files are selected - [C297632]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-inSite-file');
|
||||
await searchInput.searchFor('my-inSite-file');
|
||||
await dataTable.selectMultipleItems([ fileLocked1Site, fileLocked2Site ]);
|
||||
await dataTable.rightClickOnMultipleSelection();
|
||||
|
||||
@@ -616,7 +616,7 @@ describe('Context menu actions - multiple selection : ', () => {
|
||||
it('correct actions appear when multiple folders are selected - [C291832]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-inSite-folder');
|
||||
await searchInput.searchFor('my-inSite-folder');
|
||||
await dataTable.selectMultipleItems([ folder1Site, folder2Site ]);
|
||||
await dataTable.rightClickOnMultipleSelection();
|
||||
|
||||
@@ -636,7 +636,7 @@ describe('Context menu actions - multiple selection : ', () => {
|
||||
it('correct actions appear when both files and folders are selected - [C291833]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-inSite-f');
|
||||
await searchInput.searchFor('my-inSite-f');
|
||||
await dataTable.selectMultipleItems([ file1Site, file2Site, folder1Site, folder2Site ]);
|
||||
await dataTable.rightClickOnMultipleSelection();
|
||||
|
||||
|
@@ -359,7 +359,7 @@ describe('Context menu actions - single selection : ', () => {
|
||||
it('Available actions for a library - Search Results - user is a member - [C291812]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(siteName);
|
||||
await searchInput.searchFor(siteName);
|
||||
await dataTable.rightClickOnItem(siteName);
|
||||
|
||||
expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed');
|
||||
@@ -371,7 +371,7 @@ describe('Context menu actions - single selection : ', () => {
|
||||
it('Available actions for a library - Search Results - user is not a member - [C291813]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(adminPublic);
|
||||
await searchInput.searchFor(adminPublic);
|
||||
await dataTable.rightClickOnItem(adminPublic);
|
||||
|
||||
expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed');
|
||||
@@ -383,7 +383,7 @@ describe('Context menu actions - single selection : ', () => {
|
||||
it('Available actions for a moderated library - Search Results - user requested to join - [C291814]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(adminModerated);
|
||||
await searchInput.searchFor(adminModerated);
|
||||
await dataTable.rightClickOnItem(adminModerated);
|
||||
|
||||
expect(await dataTable.hasContextMenu()).toBe(true, 'Context menu is not displayed');
|
||||
@@ -632,7 +632,7 @@ describe('Context menu actions - single selection : ', () => {
|
||||
it('Context menu has the correct actions for a file - [C291827]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(fileSiteUser);
|
||||
await searchInput.searchFor(fileSiteUser);
|
||||
await dataTable.rightClickOnItem(fileSiteUser);
|
||||
|
||||
expect(await contextMenu.isEditOfflinePresent()).toBe(true, `Edit offline is not displayed for ${fileSiteUser}`);
|
||||
@@ -654,7 +654,7 @@ describe('Context menu actions - single selection : ', () => {
|
||||
it('Context menu has the correct actions for a locked file - [C297638]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(fileLocked);
|
||||
await searchInput.searchFor(fileLocked);
|
||||
await dataTable.rightClickOnItem(fileLocked);
|
||||
|
||||
expect(await contextMenu.isEditOfflinePresent()).toBe(false, `Edit offline is displayed for ${fileLocked}`);
|
||||
@@ -676,7 +676,7 @@ describe('Context menu actions - single selection : ', () => {
|
||||
it('Context menu has the correct actions for a folder - [C291828]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(folderSiteUser);
|
||||
await searchInput.searchFor(folderSiteUser);
|
||||
await dataTable.rightClickOnItem(folderSiteUser);
|
||||
|
||||
expect(await contextMenu.isDownloadPresent()).toBe(true, `Download is not displayed for ${folderSiteUser}`);
|
||||
|
@@ -36,6 +36,7 @@ describe('Copy content', () => {
|
||||
const destinationRF = `destinationRecent-${Utils.random()}`; let destinationIdRF;
|
||||
const destinationSF = `destinationShared-${Utils.random()}`; let destinationIdSF;
|
||||
const destinationFav = `destinationFav-${Utils.random()}`; let destinationIdFav;
|
||||
const destinationSearch = `destinationSearch-${Utils.random()}`; let destinationIdSearch;
|
||||
|
||||
const file1 = `file1-${Utils.random()}.txt`; let file1Id;
|
||||
|
||||
@@ -48,7 +49,7 @@ describe('Copy content', () => {
|
||||
const existingFile = `existing-${Utils.random()}`; let existingFileId;
|
||||
|
||||
const existingFolder = `existing-${Utils.random()}`;
|
||||
let existingId1, existingId2, existingId2RF, existingId2SF, existingId2Fav;
|
||||
let existingId1, existingId2, existingId2RF, existingId2SF, existingId2Fav, existingId2Search;
|
||||
const file2InFolder = `file2InFolder-${Utils.random()}.txt`;
|
||||
const file3InFolder = `file3InFolder-${Utils.random()}.txt`;
|
||||
|
||||
@@ -57,6 +58,7 @@ describe('Copy content', () => {
|
||||
const folderSiteRF = `folderSiteRecent-${Utils.random()}`;
|
||||
const folderSiteSF = `folderSiteShared-${Utils.random()}`;
|
||||
const folderSiteFav = `folderSiteFav-${Utils.random()}`;
|
||||
const folderSiteSearch = `folderSiteSearch-${Utils.random()}`;
|
||||
|
||||
const apis = {
|
||||
admin: new RepoClient(),
|
||||
@@ -67,6 +69,7 @@ describe('Copy content', () => {
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable, toolbar } = page;
|
||||
const copyDialog = new CopyMoveDialog();
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -76,6 +79,7 @@ describe('Copy content', () => {
|
||||
destinationIdRF = (await apis.user.nodes.createFolder(destinationRF)).entry.id;
|
||||
destinationIdSF = (await apis.user.nodes.createFolder(destinationSF)).entry.id;
|
||||
destinationIdFav = (await apis.user.nodes.createFolder(destinationFav)).entry.id;
|
||||
destinationIdSearch = (await apis.user.nodes.createFolder(destinationSearch)).entry.id;
|
||||
|
||||
file1Id = (await apis.user.nodes.createFile(file1, sourceId)).entry.id;
|
||||
await apis.user.shared.shareFileById(file1Id);
|
||||
@@ -99,17 +103,20 @@ describe('Copy content', () => {
|
||||
await apis.user.nodes.createFile(`${existingFile}.txt`, destinationIdRF);
|
||||
await apis.user.nodes.createFile(`${existingFile}.txt`, destinationIdSF);
|
||||
await apis.user.nodes.createFile(`${existingFile}.txt`, destinationIdFav);
|
||||
await apis.user.nodes.createFile(`${existingFile}.txt`, destinationIdSearch);
|
||||
|
||||
existingId1 = (await apis.user.nodes.createFolder(existingFolder, sourceId)).entry.id;
|
||||
existingId2 = (await apis.user.nodes.createFolder(existingFolder, destinationIdPF)).entry.id;
|
||||
existingId2RF = (await apis.user.nodes.createFolder(existingFolder, destinationIdRF)).entry.id;
|
||||
existingId2SF = (await apis.user.nodes.createFolder(existingFolder, destinationIdSF)).entry.id;
|
||||
existingId2Fav = (await apis.user.nodes.createFolder(existingFolder, destinationIdFav)).entry.id;
|
||||
existingId2Search = (await apis.user.nodes.createFolder(existingFolder, destinationIdSearch)).entry.id;
|
||||
await apis.user.nodes.createFile(file2InFolder, existingId1);
|
||||
await apis.user.nodes.createFile(file3InFolder, existingId2);
|
||||
await apis.user.nodes.createFile(file3InFolder, existingId2RF);
|
||||
await apis.user.nodes.createFile(file3InFolder, existingId2SF);
|
||||
await apis.user.nodes.createFile(file3InFolder, existingId2Fav);
|
||||
await apis.user.nodes.createFile(file3InFolder, existingId2Search);
|
||||
await apis.user.favorites.addFavoriteById('folder', existingId1);
|
||||
|
||||
await apis.user.sites.createSite(siteName);
|
||||
@@ -118,6 +125,7 @@ describe('Copy content', () => {
|
||||
await apis.user.nodes.createFolder(folderSiteRF, docLibId);
|
||||
await apis.user.nodes.createFolder(folderSiteSF, docLibId);
|
||||
await apis.user.nodes.createFolder(folderSiteFav, docLibId);
|
||||
await apis.user.nodes.createFolder(folderSiteSearch, docLibId);
|
||||
|
||||
await apis.user.shared.waitForApi({ expect: 4 });
|
||||
await apis.user.favorites.waitForApi({ expect: 7 });
|
||||
@@ -128,10 +136,6 @@ describe('Copy content', () => {
|
||||
|
||||
afterAll(async (done) => {
|
||||
await apis.user.nodes.deleteNodeById(sourceId);
|
||||
await apis.user.nodes.deleteNodeById(destinationIdPF);
|
||||
await apis.user.nodes.deleteNodeById(destinationIdRF);
|
||||
await apis.user.nodes.deleteNodeById(destinationIdSF);
|
||||
await apis.user.nodes.deleteNodeById(destinationIdFav);
|
||||
await apis.user.sites.deleteSite(siteName);
|
||||
done();
|
||||
});
|
||||
@@ -144,6 +148,11 @@ describe('Copy content', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async done => {
|
||||
await apis.user.nodes.deleteNodeById(destinationIdPF);
|
||||
done();
|
||||
});
|
||||
|
||||
it('Copy a file - [C217135]', async () => {
|
||||
await dataTable.selectItem(file1);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
@@ -273,6 +282,11 @@ describe('Copy content', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async done => {
|
||||
await apis.user.nodes.deleteNodeById(destinationIdRF);
|
||||
done();
|
||||
});
|
||||
|
||||
it('Copy a file - [C280194]', async () => {
|
||||
await dataTable.selectItem(file1, source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
@@ -351,6 +365,11 @@ describe('Copy content', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async done => {
|
||||
await apis.user.nodes.deleteNodeById(destinationIdSF);
|
||||
done();
|
||||
});
|
||||
|
||||
it('Copy a file - [C280206]', async () => {
|
||||
await dataTable.selectItem(file1, source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
@@ -431,6 +450,11 @@ describe('Copy content', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async done => {
|
||||
await apis.user.nodes.deleteNodeById(destinationIdFav);
|
||||
done();
|
||||
});
|
||||
|
||||
it('Copy a file - [C280218]', async () => {
|
||||
await dataTable.selectItem(file1);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
@@ -553,4 +577,156 @@ describe('Copy content', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('from Search Results', () => {
|
||||
beforeEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async done => {
|
||||
await apis.user.nodes.deleteNodeById(destinationIdSearch);
|
||||
done();
|
||||
});
|
||||
|
||||
it('Copy a file - [C306932]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(file1);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(file1, source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
await copyDialog.selectLocation('Personal Files');
|
||||
await copyDialog.selectDestination(destinationSearch);
|
||||
await copyDialog.clickCopy();
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain('Copied 1 item');
|
||||
expect(msg).toContain('Undo');
|
||||
|
||||
await copyDialog.waitForDialogToClose();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(destinationSearch);
|
||||
expect(await dataTable.isItemPresent(file1)).toBe(true, `${file1} not present in destination folder`);
|
||||
});
|
||||
|
||||
it('Copy a folder with content - [C306943]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(folder1);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(folder1, source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
await copyDialog.selectLocation('Personal Files');
|
||||
await copyDialog.selectDestination(destinationSearch);
|
||||
await copyDialog.clickCopy();
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain('Copied 1 item');
|
||||
expect(msg).toContain('Undo');
|
||||
|
||||
await copyDialog.waitForDialogToClose();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(destinationSearch);
|
||||
expect(await dataTable.isItemPresent(folder1)).toBe(true, `${folder1} not present in destination folder`);
|
||||
expect(await dataTable.isItemPresent(fileInFolder)).toBe(false, `${fileInFolder} is present in destination`);
|
||||
|
||||
await dataTable.doubleClickOnRowByName(folder1);
|
||||
expect(await dataTable.isItemPresent(fileInFolder)).toBe(true, `${fileInFolder} is not present in parent folder`);
|
||||
});
|
||||
|
||||
it('Copy multiple items - [C306944]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('file');
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectMultipleItems([file2, file3], source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
await copyDialog.selectLocation('Personal Files');
|
||||
await copyDialog.selectDestination(destinationSearch);
|
||||
await copyDialog.clickCopy();
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain('Copied 2 items');
|
||||
expect(msg).toContain('Undo');
|
||||
|
||||
await copyDialog.waitForDialogToClose();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(destinationSearch);
|
||||
expect(await dataTable.isItemPresent(file2)).toBe(true, `${file2} not present in destination folder`);
|
||||
expect(await dataTable.isItemPresent(file3)).toBe(true, `${file3} not present in destination folder`);
|
||||
});
|
||||
|
||||
it('Copy a file with a name that already exists on the destination - [C306933]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(existingFile);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(existingFile, source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
await copyDialog.selectLocation('Personal Files');
|
||||
await copyDialog.selectDestination(destinationSearch);
|
||||
await copyDialog.clickCopy();
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain('Copied 1 item');
|
||||
expect(msg).toContain('Undo');
|
||||
|
||||
await copyDialog.waitForDialogToClose();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(destinationSearch);
|
||||
expect(await dataTable.isItemPresent(`${existingFile}.txt`)).toBe(true, `${existingFile}.txt not present in destination folder`);
|
||||
expect(await dataTable.isItemPresent(`${existingFile}-1.txt`)).toBe(true, `${existingFile}-1.txt not present in destination folder`);
|
||||
});
|
||||
|
||||
it('Copy a folder with a name that already exists on the destination - [C306934]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(existingFolder);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(existingFolder, source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
await copyDialog.selectLocation('Personal Files');
|
||||
await copyDialog.selectDestination(destinationSearch);
|
||||
await copyDialog.clickCopy();
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain('Copied 1 item');
|
||||
expect(msg).toContain('Undo');
|
||||
|
||||
await copyDialog.waitForDialogToClose();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(destinationSearch);
|
||||
expect(await dataTable.isItemPresent(existingFolder)).toBe(true, `${existingFolder} not present in destination folder`);
|
||||
await dataTable.doubleClickOnRowByName(existingFolder);
|
||||
expect(await dataTable.isItemPresent(file2InFolder)).toBe(true, `${file2InFolder} not present in destination folder`);
|
||||
expect(await dataTable.isItemPresent(file3InFolder)).toBe(true, `${file3InFolder} not present in destination folder`);
|
||||
});
|
||||
|
||||
it('Copy items into a library - [C306942]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('file');
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectMultipleItems([file1, file2], source);
|
||||
await toolbar.clickMoreActionsCopy();
|
||||
await copyDialog.selectLocation('File Libraries');
|
||||
await copyDialog.doubleClickOnRow(siteName);
|
||||
await copyDialog.doubleClickOnRow('documentLibrary');
|
||||
await copyDialog.selectDestination(folderSiteSearch);
|
||||
await copyDialog.clickCopy();
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain('Copied 2 items');
|
||||
expect(msg).toContain('Undo');
|
||||
|
||||
await copyDialog.waitForDialogToClose();
|
||||
await page.goToMyLibraries();
|
||||
await dataTable.doubleClickOnRowByName(siteName);
|
||||
await dataTable.doubleClickOnRowByName(folderSiteSearch);
|
||||
|
||||
expect(await dataTable.isItemPresent(file1)).toBe(true, `${file1} not present in destination folder`);
|
||||
expect(await dataTable.isItemPresent(file2)).toBe(true, `${file2} not present in destination folder`);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -273,7 +273,7 @@ describe('Download', () => {
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('*Search*');
|
||||
await searchInput.searchFor('*Search*');
|
||||
done();
|
||||
});
|
||||
|
||||
|
@@ -39,7 +39,8 @@ describe('Edit folder', () => {
|
||||
const folderNameToEdit = `folder-${Utils.random()}`;
|
||||
const duplicateFolderName = `folder-${Utils.random()}`;
|
||||
|
||||
const folderNameEdited = `folder-${Utils.random()}`;
|
||||
const folderNameEdited = `folder-renamed-${Utils.random()}`;
|
||||
const folderNameEdited2 = `folder-search-renamed-${Utils.random()}`;
|
||||
const folderDescriptionEdited = 'description edited';
|
||||
|
||||
const sitePrivate = `site-private-${Utils.random()}`;
|
||||
@@ -54,6 +55,10 @@ describe('Edit folder', () => {
|
||||
const folderFavoriteToEdit = `folder-fav-${Utils.random()}`; let folderFavoriteToEditId;
|
||||
const folderFavoriteDuplicate = `folder-fav-${Utils.random()}`; let folderFavoriteDuplicateId;
|
||||
|
||||
const folderSearch = `folder-search-${Utils.random()}`;
|
||||
const folderSearchToEdit = `folder-search-${Utils.random()}`; let folderSearchToEditId;
|
||||
const folderSearchDuplicate = `folder-search-${Utils.random()}`;
|
||||
|
||||
const apis = {
|
||||
admin: new RepoClient(),
|
||||
user: new RepoClient(username, username)
|
||||
@@ -63,6 +68,7 @@ describe('Edit folder', () => {
|
||||
const page = new BrowsingPage();
|
||||
const editDialog = new CreateOrEditFolderDialog();
|
||||
const { dataTable, toolbar } = page;
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -86,6 +92,10 @@ describe('Edit folder', () => {
|
||||
folderFavoriteToEditId = (await apis.user.nodes.createFolder(folderFavoriteToEdit)).entry.id;
|
||||
folderFavoriteDuplicateId = (await apis.user.nodes.createFolder(folderFavoriteDuplicate)).entry.id;
|
||||
|
||||
await apis.user.nodes.createFolder(folderSearch);
|
||||
folderSearchToEditId = (await apis.user.nodes.createFolder(folderSearchToEdit)).entry.id;
|
||||
await apis.user.nodes.createFolder(folderSearchDuplicate);
|
||||
|
||||
await apis.user.favorites.addFavoriteById('folder', folderFavoriteId);
|
||||
await apis.user.favorites.addFavoriteById('folder', folderFavoriteToEditId);
|
||||
await apis.user.favorites.addFavoriteById('folder', folderFavoriteDuplicateId);
|
||||
@@ -98,7 +108,7 @@ describe('Edit folder', () => {
|
||||
await Promise.all([
|
||||
apis.admin.sites.deleteSite(sitePrivate),
|
||||
apis.user.sites.deleteSite(siteName),
|
||||
apis.user.nodes.deleteNodesById([ parentId, folderFavoriteToEditId, folderFavoriteDuplicateId ])
|
||||
apis.user.nodes.deleteNodesById([ parentId, folderFavoriteToEditId, folderFavoriteDuplicateId, folderSearchToEditId ])
|
||||
]);
|
||||
done();
|
||||
});
|
||||
@@ -288,4 +298,51 @@ describe('Edit folder', () => {
|
||||
expect(await editDialog.isDialogOpen()).toBe(true, 'dialog is not present');
|
||||
});
|
||||
});
|
||||
|
||||
describe('on Search Results', () => {
|
||||
beforeAll(async (done) => {
|
||||
await apis.user.search.waitForNodes('folder-search', { expect: 3 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('properties are modified when pressing OK - [C306947]', async () => {
|
||||
await page.clickPersonalFiles();
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchFor(folderSearchToEdit);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(folderSearchToEdit);
|
||||
await toolbar.openMoreMenu();
|
||||
await toolbar.menu.clickEditFolder();
|
||||
await editDialog.waitForDialogToOpen();
|
||||
await editDialog.enterDescription(folderDescriptionEdited);
|
||||
await editDialog.enterName(folderNameEdited2);
|
||||
await editDialog.clickUpdate();
|
||||
await editDialog.waitForDialogToClose();
|
||||
|
||||
await page.refresh();
|
||||
expect(await dataTable.isItemPresent(folderNameEdited2)).toBe(true, 'Folder not displayed');
|
||||
const desc = await apis.user.nodes.getNodeProperty(folderSearchToEditId, 'cm:description');
|
||||
expect(desc).toEqual(folderDescriptionEdited);
|
||||
});
|
||||
|
||||
it('with duplicate folder name - [C306948]', async () => {
|
||||
await page.clickPersonalFiles();
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchFor(folderSearch);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(folderSearch);
|
||||
await toolbar.openMoreMenu();
|
||||
await toolbar.menu.clickEditFolder();
|
||||
await editDialog.waitForDialogToOpen();
|
||||
await editDialog.enterName(folderSearchDuplicate);
|
||||
await editDialog.clickUpdate();
|
||||
|
||||
expect(await page.getSnackBarMessage()).toEqual(`There's already a folder with this name. Try a different name.`);
|
||||
expect(await editDialog.isDialogOpen()).toBe(true, 'dialog is not present');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -35,10 +35,15 @@ describe('Edit offline', () => {
|
||||
const fileLocked = `file-locked-${Utils.random()}.docx`; let fileLockedId;
|
||||
const fileLocked2 = `file-locked2-${Utils.random()}.docx`; let fileLocked2Id;
|
||||
|
||||
const fileSearch1 = `file-search-1-${Utils.random()}.docx`; let fileSearch1Id;
|
||||
const fileSearchLocked = `file-search-locked-${Utils.random()}.docx`; let fileSearchLockedId;
|
||||
const fileSearchLocked2 = `file-search-locked2-${Utils.random()}.docx`; let fileSearchLocked2Id;
|
||||
|
||||
const parentPF = `parentPersonal-${Utils.random()}`; let parentPFId;
|
||||
const parentSF = `parentShared-${Utils.random()}`; let parentSFId;
|
||||
const parentRF = `parentRecent-${Utils.random()}`; let parentRFId;
|
||||
const parentFav = `parentFav-${Utils.random()}`; let parentFavId;
|
||||
const parentSearch = `parentSearch-${Utils.random()}`; let parentSearchId;
|
||||
|
||||
const apis = {
|
||||
admin: new RepoClient(),
|
||||
@@ -48,6 +53,7 @@ describe('Edit offline', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable, toolbar } = page;
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -56,6 +62,7 @@ describe('Edit offline', () => {
|
||||
parentSFId = (await apis.user.nodes.createFolder(parentSF)).entry.id;
|
||||
parentRFId = (await apis.user.nodes.createFolder(parentRF)).entry.id;
|
||||
parentFavId = (await apis.user.nodes.createFolder(parentFav)).entry.id;
|
||||
parentSearchId = (await apis.user.nodes.createFolder(parentSearch)).entry.id;
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -65,6 +72,7 @@ describe('Edit offline', () => {
|
||||
await apis.user.nodes.deleteNodeById(parentSFId);
|
||||
await apis.user.nodes.deleteNodeById(parentRFId);
|
||||
await apis.user.nodes.deleteNodeById(parentFavId);
|
||||
await apis.user.nodes.deleteNodeById(parentSearchId);
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -143,7 +151,7 @@ describe('Edit offline', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
xit('File is locked and downloaded when clicking Edit Offline - []', async () => {
|
||||
xit('File is locked and downloaded when clicking Edit Offline - [C306950]', async () => {
|
||||
await dataTable.selectItem(file1, parentSF);
|
||||
await toolbar.clickMoreActionsEditOffline();
|
||||
|
||||
@@ -151,13 +159,13 @@ describe('Edit offline', () => {
|
||||
expect(await apis.user.nodes.isFileLockedWrite(file1Id)).toBe(true, `${file1} is not locked`);
|
||||
});
|
||||
|
||||
xit('Lock information is displayed - []', async () => {
|
||||
xit('Lock information is displayed - [C306951]', async () => {
|
||||
expect(await dataTable.isItemPresent(fileLocked2, parentSF)).toBe(true, `${fileLocked2} is not displayed`);
|
||||
expect(await dataTable.hasLockIcon(fileLocked2, parentSF)).toBe(true, `${fileLocked2} does not have a lock icon`);
|
||||
expect(await dataTable.getLockOwner(fileLocked2, parentSF)).toContain(username, `${fileLocked2} does not have correct lock owner info`);
|
||||
});
|
||||
|
||||
xit('Cancel Editing unlocks the file - []', async () => {
|
||||
xit('Cancel Editing unlocks the file - [C306952]', async () => {
|
||||
await dataTable.selectItem(fileLocked);
|
||||
await toolbar.clickMoreActionsCancelEditing();
|
||||
await dataTable.clearSelection();
|
||||
@@ -243,7 +251,7 @@ describe('Edit offline', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
xit('File is locked and downloaded when clicking Edit Offline - []', async () => {
|
||||
xit('File is locked and downloaded when clicking Edit Offline - [C306956]', async () => {
|
||||
await dataTable.selectItem(file1);
|
||||
await toolbar.clickMoreActionsEditOffline();
|
||||
|
||||
@@ -251,13 +259,13 @@ describe('Edit offline', () => {
|
||||
expect(await apis.user.nodes.isFileLockedWrite(file1Id)).toBe(true, `${file1} is not locked`);
|
||||
});
|
||||
|
||||
xit('Lock information is displayed - []', async () => {
|
||||
xit('Lock information is displayed - [C306957]', async () => {
|
||||
expect(await dataTable.isItemPresent(fileLocked2)).toBe(true, `${fileLocked2} is not displayed`);
|
||||
expect(await dataTable.hasLockIcon(fileLocked2)).toBe(true, `${fileLocked2} does not have a lock icon`);
|
||||
expect(await dataTable.getLockOwner(fileLocked2)).toContain(username, `${fileLocked2} does not have correct lock owner info`);
|
||||
});
|
||||
|
||||
xit('Cancel Editing unlocks the file - []', async () => {
|
||||
xit('Cancel Editing unlocks the file - [C306958]', async () => {
|
||||
await dataTable.selectItem(fileLocked);
|
||||
await toolbar.clickMoreActionsCancelEditing();
|
||||
await dataTable.clearSelection();
|
||||
@@ -267,4 +275,58 @@ describe('Edit offline', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('on Search Results', () => {
|
||||
beforeAll(async (done) => {
|
||||
fileSearch1Id = (await apis.user.upload.uploadFileWithRename(FILES.docxFile, parentSearchId, fileSearch1)).entry.id;
|
||||
fileSearchLockedId = (await apis.user.upload.uploadFileWithRename(FILES.docxFile, parentSearchId, fileSearchLocked)).entry.id;
|
||||
fileSearchLocked2Id = (await apis.user.upload.uploadFileWithRename(FILES.docxFile, parentSearchId, fileSearchLocked2)).entry.id;
|
||||
|
||||
await apis.user.nodes.lockFile(fileSearchLockedId);
|
||||
await apis.user.nodes.lockFile(fileSearchLocked2Id);
|
||||
|
||||
await apis.user.search.waitForNodes('file-search', { expect: 3 });
|
||||
|
||||
await loginPage.loginWith(username);
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('file-search');
|
||||
await dataTable.waitForBody();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
done();
|
||||
});
|
||||
|
||||
it('File is locked and downloaded when clicking Edit Offline - [C306953]', async () => {
|
||||
await dataTable.selectItem(fileSearch1);
|
||||
await toolbar.clickMoreActionsEditOffline();
|
||||
|
||||
expect(await Utils.fileExistsOnOS(fileSearch1)).toBe(true, 'File not found in download location');
|
||||
expect(await apis.user.nodes.isFileLockedWrite(fileSearch1Id)).toBe(true, `${fileSearch1} is not locked`);
|
||||
});
|
||||
|
||||
// TODO: enable when ACA-2314 is fixed
|
||||
xit('Lock information is displayed - [C306954]', async () => {
|
||||
expect(await dataTable.isItemPresent(fileSearchLocked2, parentSearch)).toBe(true, `${fileSearchLocked2} is not displayed`);
|
||||
expect(await dataTable.hasLockIcon(fileSearchLocked2, parentSearch)).toBe(true, `${fileSearchLocked2} does not have a lock icon`);
|
||||
expect(await dataTable.getLockOwner(fileSearchLocked2, parentSearch)).toContain(username, `${fileSearchLocked2} does not have correct lock owner info`);
|
||||
});
|
||||
|
||||
it('Cancel Editing unlocks the file - [C306955]', async () => {
|
||||
await dataTable.selectItem(fileSearchLocked);
|
||||
await toolbar.clickMoreActionsCancelEditing();
|
||||
await dataTable.clearSelection();
|
||||
|
||||
expect(await apis.user.nodes.isFileLockedWrite(fileSearchLockedId)).toBe(false, `${fileSearchLocked} is still locked`);
|
||||
// TODO: enable when ACA-2314 is fixed
|
||||
// expect(await dataTable.hasLockIcon(fileSearchLocked, parentSearch)).toBe(false, `${fileSearchLocked} has a lock icon`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -36,10 +36,26 @@ describe('Library actions', () => {
|
||||
const sitePublic2Admin = `admin-public2-${Utils.random()}`;
|
||||
const sitePublic3Admin = `admin-public3-${Utils.random()}`;
|
||||
const sitePublic4Admin = `admin-public4-${Utils.random()}`;
|
||||
const sitePublic5Admin = `admin-public5-${Utils.random()}`;
|
||||
const sitePublic6Admin = `admin-public6-${Utils.random()}`;
|
||||
const sitePublic7Admin = `admin-public7-${Utils.random()}`;
|
||||
const sitePublic8Admin = `admin-public8-${Utils.random()}`;
|
||||
|
||||
const sitePublicUser = `user-public1-${Utils.random()}`;
|
||||
const siteForDelete1 = `user-public2-${Utils.random()}`;
|
||||
const siteForDelete2 = `user-public3-${Utils.random()}`;
|
||||
|
||||
const siteModerated1Admin = `admin-moderated1-${Utils.random()}`;
|
||||
const siteModerated2Admin = `admin-moderated2-${Utils.random()}`;
|
||||
|
||||
const sitePublicUser = `user-public-${Utils.random()}`;
|
||||
const siteSearchModerated1Admin = `site-moderated-search-1-${Utils.random()}`;
|
||||
const siteSearchModerated2Admin = `site-moderated-search-2-${Utils.random()}`;
|
||||
|
||||
const siteSearchPublic1Admin = `site-public-search-1-${Utils.random()}`;
|
||||
const siteSearchPublic2Admin = `site-public-search-2-${Utils.random()}`;
|
||||
const siteSearchPublic3Admin = `site-public-search-3-${Utils.random()}`;
|
||||
const siteSearchPublic4Admin = `site-public-search-4-${Utils.random()}`;
|
||||
const siteSearchForDelete = `site-public-search-5-${Utils.random()}`;
|
||||
|
||||
const apis = {
|
||||
admin: new RepoClient(),
|
||||
@@ -49,30 +65,23 @@ describe('Library actions', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable, toolbar } = page;
|
||||
const { searchInput } = page.header;
|
||||
|
||||
const confirmDialog = new ConfirmDialog();
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
await apis.admin.sites.createSite(sitePublic1Admin);
|
||||
await apis.admin.sites.createSite(sitePublic2Admin);
|
||||
await apis.admin.sites.createSite(sitePublic3Admin);
|
||||
await apis.admin.sites.createSite(sitePublic4Admin);
|
||||
await apis.admin.sites.createSite(siteModerated1Admin, SITE_VISIBILITY.MODERATED);
|
||||
await apis.admin.sites.createSite(siteModerated2Admin, SITE_VISIBILITY.MODERATED);
|
||||
|
||||
await apis.user.sites.createSite(sitePublicUser);
|
||||
await apis.admin.sites.createSite(siteSearchPublic1Admin);
|
||||
await apis.admin.sites.createSite(siteSearchPublic2Admin);
|
||||
await apis.admin.sites.createSite(siteSearchPublic3Admin);
|
||||
await apis.admin.sites.createSite(siteSearchPublic4Admin);
|
||||
await apis.admin.sites.createSite(siteSearchModerated1Admin, SITE_VISIBILITY.MODERATED);
|
||||
await apis.admin.sites.createSite(siteSearchModerated2Admin, SITE_VISIBILITY.MODERATED);
|
||||
await apis.user.sites.createSite(siteSearchForDelete);
|
||||
|
||||
await apis.admin.sites.addSiteMember(sitePublic2Admin, username, SITE_ROLES.SITE_COLLABORATOR.ROLE);
|
||||
await apis.admin.sites.addSiteMember(sitePublic3Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.admin.sites.addSiteMember(sitePublic4Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
|
||||
await apis.user.favorites.addFavoriteById('site', sitePublic1Admin);
|
||||
await apis.user.favorites.addFavoriteById('site', sitePublic3Admin);
|
||||
await apis.user.favorites.addFavoriteById('site', siteModerated1Admin);
|
||||
await apis.user.favorites.addFavoriteById('site', siteModerated2Admin);
|
||||
|
||||
await apis.user.sites.requestToJoin(siteModerated2Admin);
|
||||
await apis.user.queries.waitForSites('site-public-search', { expect: 5 });
|
||||
await apis.user.queries.waitForSites('site-moderated-search', { expect: 2 });
|
||||
|
||||
await loginPage.loginWith(username);
|
||||
done();
|
||||
@@ -80,22 +89,43 @@ describe('Library actions', () => {
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await dataTable.clearSelection();
|
||||
await page.header.expandSideNav();
|
||||
await page.clickPersonalFiles();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await apis.admin.sites.deleteSite(sitePublic1Admin);
|
||||
await apis.admin.sites.deleteSite(siteSearchPublic1Admin);
|
||||
await apis.admin.sites.deleteSite(sitePublic2Admin);
|
||||
await apis.admin.sites.deleteSite(sitePublic3Admin);
|
||||
await apis.admin.sites.deleteSite(sitePublic4Admin);
|
||||
await apis.admin.sites.deleteSite(sitePublic5Admin);
|
||||
await apis.admin.sites.deleteSite(sitePublic6Admin);
|
||||
await apis.admin.sites.deleteSite(sitePublic7Admin);
|
||||
await apis.admin.sites.deleteSite(sitePublic8Admin);
|
||||
|
||||
await apis.admin.sites.deleteSite(siteSearchPublic2Admin);
|
||||
await apis.admin.sites.deleteSite(siteSearchPublic3Admin);
|
||||
await apis.admin.sites.deleteSite(siteSearchPublic4Admin);
|
||||
await apis.admin.sites.deleteSite(siteModerated1Admin);
|
||||
await apis.admin.sites.deleteSite(siteModerated2Admin);
|
||||
await apis.admin.sites.deleteSite(siteSearchModerated1Admin);
|
||||
await apis.admin.sites.deleteSite(siteSearchModerated2Admin);
|
||||
await apis.user.sites.deleteSite(sitePublicUser);
|
||||
await apis.admin.trashcan.emptyTrash();
|
||||
done();
|
||||
});
|
||||
|
||||
it('Join a public library - Favorite Libraries - [C290105]', async () => {
|
||||
describe('Join a public library', () => {
|
||||
|
||||
beforeAll(async done => {
|
||||
await apis.admin.sites.createSite(sitePublic1Admin);
|
||||
await apis.user.favorites.addFavoriteById('site', sitePublic1Admin);
|
||||
done();
|
||||
});
|
||||
|
||||
it('from Favorite Libraries - [C290105]', async () => {
|
||||
await page.goToFavoriteLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic1Admin);
|
||||
await toolbar.clickJoin();
|
||||
@@ -103,7 +133,30 @@ describe('Library actions', () => {
|
||||
expect(await dataTable.getLibraryRole(sitePublic1Admin)).toEqual('Consumer');
|
||||
});
|
||||
|
||||
it('Join a moderated library - Favorite Libraries - [C290109]', async () => {
|
||||
it('from Search Results - [C306959]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(siteSearchPublic1Admin);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(siteSearchPublic1Admin);
|
||||
await toolbar.clickJoin();
|
||||
|
||||
expect(await dataTable.getLibraryRole(siteSearchPublic1Admin)).toEqual('Consumer');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Join a moderated library', () => {
|
||||
|
||||
beforeAll(async done => {
|
||||
await apis.admin.sites.createSite(siteModerated1Admin, SITE_VISIBILITY.MODERATED);
|
||||
await apis.user.favorites.addFavoriteById('site', siteModerated1Admin);
|
||||
await apis.user.queries.waitForSites(siteSearchModerated1Admin, { expect: 1 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('from Favorite Libraries - [C290109]', async () => {
|
||||
await page.goToFavoriteLibrariesAndWait();
|
||||
await dataTable.selectItem(siteModerated1Admin);
|
||||
await toolbar.clickJoin();
|
||||
@@ -113,7 +166,41 @@ describe('Library actions', () => {
|
||||
expect(hasJoinRequest).toBe(true, `Join request does not exist on ${siteModerated1Admin}`);
|
||||
});
|
||||
|
||||
it('Leave a library - My Libraries - [C290106]', async () => {
|
||||
it('from Search Results - [C306960]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(siteSearchModerated1Admin);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(siteSearchModerated1Admin);
|
||||
await toolbar.clickJoin();
|
||||
|
||||
expect(await dataTable.getLibraryRole(siteSearchModerated1Admin)).toEqual('');
|
||||
const hasJoinRequest = await apis.user.sites.hasMembershipRequest(siteSearchModerated1Admin);
|
||||
expect(hasJoinRequest).toBe(true, `Join request does not exist on ${siteSearchModerated1Admin}`);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Leave a library', () => {
|
||||
|
||||
beforeAll(async done => {
|
||||
await apis.admin.sites.createSite(sitePublic2Admin);
|
||||
await apis.admin.sites.createSite(sitePublic3Admin);
|
||||
await apis.admin.sites.createSite(sitePublic4Admin);
|
||||
await apis.admin.sites.createSite(sitePublic5Admin);
|
||||
await apis.user.sites.createSite(sitePublicUser);
|
||||
await apis.user.favorites.addFavoriteById('site', sitePublic3Admin);
|
||||
await apis.admin.sites.addSiteMember(sitePublic2Admin, username, SITE_ROLES.SITE_COLLABORATOR.ROLE);
|
||||
await apis.admin.sites.addSiteMember(sitePublic3Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.admin.sites.addSiteMember(siteSearchPublic2Admin, username, SITE_ROLES.SITE_CONTRIBUTOR.ROLE);
|
||||
await apis.admin.sites.addSiteMember(sitePublic4Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.admin.sites.addSiteMember(sitePublic5Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.user.queries.waitForSites(siteSearchPublic2Admin, { expect: 1 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('from My Libraries - [C290106]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic2Admin);
|
||||
await toolbar.clickLeave();
|
||||
@@ -124,7 +211,7 @@ describe('Library actions', () => {
|
||||
expect(await dataTable.isItemPresent(sitePublic2Admin)).toBe(false, `${sitePublic2Admin} is displayed`);
|
||||
});
|
||||
|
||||
it('Leave a library - Favorite Libraries - [C290110]', async () => {
|
||||
it('from Favorite Libraries - [C290110]', async () => {
|
||||
await page.goToFavoriteLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic3Admin);
|
||||
await toolbar.clickLeave();
|
||||
@@ -135,6 +222,21 @@ describe('Library actions', () => {
|
||||
expect(await dataTable.isItemPresent(sitePublic3Admin)).toBe(true, `${sitePublic3Admin} is not displayed`);
|
||||
});
|
||||
|
||||
it('from Search Results - [C306961]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(siteSearchPublic2Admin);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(siteSearchPublic2Admin);
|
||||
await toolbar.clickLeave();
|
||||
await page.waitForDialog();
|
||||
await confirmDialog.clickOk();
|
||||
|
||||
expect(await page.getSnackBarMessage()).toEqual(`You have left the library`);
|
||||
expect(await dataTable.isItemPresent(siteSearchPublic2Admin)).toBe(true, `${siteSearchPublic2Admin} is not displayed`);
|
||||
});
|
||||
|
||||
it('Confirmation dialog UI - [C290136]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic4Admin);
|
||||
@@ -150,13 +252,13 @@ describe('Library actions', () => {
|
||||
|
||||
it('Cancel Leave library - [C290111]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic4Admin);
|
||||
await dataTable.selectItem(sitePublic5Admin);
|
||||
await toolbar.clickLeave();
|
||||
await page.waitForDialog();
|
||||
|
||||
expect(await confirmDialog.isCancelEnabled()).toBe(true, 'Cancel button is not enabled');
|
||||
await confirmDialog.clickCancel();
|
||||
expect(await dataTable.isItemPresent(sitePublic4Admin)).toBe(true, `${sitePublic4Admin} was deleted`);
|
||||
expect(await dataTable.isItemPresent(sitePublic5Admin)).toBe(true, `${sitePublic5Admin} was deleted`);
|
||||
});
|
||||
|
||||
it('Leave a library - failure notification - [C290107]', async () => {
|
||||
@@ -168,8 +270,20 @@ describe('Library actions', () => {
|
||||
|
||||
expect(await page.getSnackBarMessage()).toEqual(`Cannot leave this library`);
|
||||
});
|
||||
});
|
||||
|
||||
it('Cancel join - Favorite Libraries - [C290108]', async () => {
|
||||
describe('Cancel join', () => {
|
||||
|
||||
beforeAll(async done => {
|
||||
await apis.admin.sites.createSite(siteModerated2Admin, SITE_VISIBILITY.MODERATED);
|
||||
await apis.user.favorites.addFavoriteById('site', siteModerated2Admin);
|
||||
await apis.user.sites.requestToJoin(siteModerated2Admin);
|
||||
await apis.user.sites.requestToJoin(siteSearchModerated2Admin);
|
||||
await apis.user.queries.waitForSites(siteSearchModerated2Admin, { expect: 1 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('from Favorite Libraries - [C290108]', async () => {
|
||||
await page.goToFavoriteLibrariesAndWait();
|
||||
await dataTable.selectItem(siteModerated2Admin);
|
||||
await toolbar.clickButton('Cancel join request');
|
||||
@@ -180,4 +294,138 @@ describe('Library actions', () => {
|
||||
expect(hasJoinRequest).toBe(false, `Join request exists on ${siteModerated2Admin}`);
|
||||
});
|
||||
|
||||
it('from Search Results - [C306962]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(siteSearchModerated2Admin);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(siteSearchModerated2Admin);
|
||||
await toolbar.clickButton('Cancel join request');
|
||||
|
||||
expect(await page.getSnackBarMessage()).toEqual(`Canceled the request to join the library`);
|
||||
|
||||
const hasJoinRequest = await apis.user.sites.hasMembershipRequest(siteSearchModerated2Admin);
|
||||
expect(hasJoinRequest).toBe(false, `Join request exists on ${siteSearchModerated2Admin}`);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Mark library as favorite', () => {
|
||||
|
||||
beforeAll(async done => {
|
||||
await apis.admin.sites.createSite(sitePublic6Admin);
|
||||
await apis.admin.sites.addSiteMember(sitePublic6Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.user.queries.waitForSites(siteSearchPublic3Admin, { expect: 1 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('from My Libraries - [C289974]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic6Admin);
|
||||
await toolbar.clickMoreActionsFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(sitePublic6Admin, { expect: true })).toBe(true, `${sitePublic6Admin} not favorite`);
|
||||
});
|
||||
|
||||
it('from on Search Results - [C306963]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(siteSearchPublic3Admin);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(siteSearchPublic3Admin);
|
||||
await toolbar.clickMoreActionsFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(siteSearchPublic3Admin, { expect: true })).toBe(true, `${siteSearchPublic3Admin} not favorite`);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Remove library from favorites', () => {
|
||||
|
||||
beforeAll(async done => {
|
||||
await apis.admin.sites.createSite(sitePublic7Admin);
|
||||
await apis.admin.sites.createSite(sitePublic8Admin);
|
||||
await apis.user.favorites.addFavoriteById('site', sitePublic7Admin);
|
||||
await apis.user.favorites.addFavoriteById('site', sitePublic8Admin);
|
||||
await apis.user.favorites.addFavoriteById('site', siteSearchPublic4Admin);
|
||||
await apis.admin.sites.addSiteMember(sitePublic7Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.admin.sites.addSiteMember(sitePublic8Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.admin.sites.addSiteMember(siteSearchPublic4Admin, username, SITE_ROLES.SITE_MANAGER.ROLE);
|
||||
await apis.user.queries.waitForSites(siteSearchPublic4Admin, { expect: 1 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('from My Libraries - [C289975]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic7Admin);
|
||||
await toolbar.clickMoreActionsRemoveFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(sitePublic7Admin, { expect: false })).toBe(false, `${sitePublic7Admin} still favorite`);
|
||||
});
|
||||
|
||||
it('from Favorite Libraries - [C289976]', async () => {
|
||||
await page.goToFavoriteLibrariesAndWait();
|
||||
await dataTable.selectItem(sitePublic8Admin);
|
||||
await toolbar.clickMoreActionsRemoveFavorite();
|
||||
|
||||
expect(await dataTable.isItemPresent(sitePublic8Admin)).toBe(false, `${sitePublic8Admin} is displayed`);
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(sitePublic8Admin, { expect: false })).toBe(false, `${sitePublic8Admin} still favorite`);
|
||||
});
|
||||
|
||||
it('from Search Results - [C306964]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(siteSearchPublic4Admin);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(siteSearchPublic4Admin);
|
||||
await toolbar.clickMoreActionsRemoveFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(siteSearchPublic4Admin, { expect: false })).toBe(false, `${siteSearchPublic4Admin} still favorite`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Delete a library', () => {
|
||||
|
||||
beforeAll(async done => {
|
||||
await apis.user.sites.createSite(siteForDelete1);
|
||||
await apis.user.sites.createSite(siteForDelete2);
|
||||
await apis.user.queries.waitForSites(siteSearchForDelete, { expect: 1 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('from My Libraries - [C289988]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(siteForDelete1);
|
||||
await toolbar.clickMoreActionsDelete();
|
||||
|
||||
expect(await page.getSnackBarMessage()).toEqual(`Library deleted`);
|
||||
expect(await dataTable.isItemPresent(siteForDelete1)).toBe(false, `${siteForDelete1} still displayed`);
|
||||
});
|
||||
|
||||
it('from Favorite Libraries - [C289991]', async () => {
|
||||
await page.goToFavoriteLibrariesAndWait();
|
||||
await dataTable.selectItem(siteForDelete2);
|
||||
await toolbar.clickMoreActionsDelete();
|
||||
|
||||
expect(await page.getSnackBarMessage()).toEqual(`Library deleted`);
|
||||
expect(await dataTable.isItemPresent(siteForDelete2)).toBe(false, `${siteForDelete2} still displayed`);
|
||||
});
|
||||
|
||||
it('from Search Results - [C306965]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(siteSearchForDelete);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(siteSearchForDelete);
|
||||
await toolbar.clickMoreActionsDelete();
|
||||
|
||||
expect(await page.getSnackBarMessage()).toEqual(`Library deleted`);
|
||||
expect(await dataTable.isItemPresent(siteSearchForDelete)).toBe(false, `${siteSearchForDelete} still displayed`);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -24,7 +24,7 @@
|
||||
*/
|
||||
|
||||
import { LoginPage, BrowsingPage } from '../../pages/pages';
|
||||
import { SITE_VISIBILITY, SITE_ROLES } from '../../configs';
|
||||
import { SITE_VISIBILITY } from '../../configs';
|
||||
import { RepoClient } from '../../utilities/repo-client/repo-client';
|
||||
import { Utils } from '../../utilities/utils';
|
||||
|
||||
@@ -47,6 +47,19 @@ describe('Mark items as favorites', () => {
|
||||
|
||||
let fileNotFavUIId, fileFavUIId, fileNotFav1Id, fileNotFav2Id, fileNotFav3Id, fileNotFav4Id, fileFav1Id, fileFav2Id, fileFav3Id, fileFav4Id, folderId, parentId;
|
||||
|
||||
const fileSearchNotFav1 = `search-fileNotFav1-${Utils.random()}.txt`;
|
||||
const fileSearchNotFav2 = `search-fileNotFav2-${Utils.random()}.txt`;
|
||||
const fileSearchNotFav3 = `search-fileNotFav3-${Utils.random()}.txt`;
|
||||
const fileSearchNotFav4 = `search-fileNotFav4-${Utils.random()}.txt`;
|
||||
const fileSearchFav1 = `search-fileFav1-${Utils.random()}.txt`;
|
||||
const fileSearchFav2 = `search-fileFav2-${Utils.random()}.txt`;
|
||||
const fileSearchFav3 = `search-fileFav3-${Utils.random()}.txt`;
|
||||
const fileSearchFav4 = `search-fileFav4-${Utils.random()}.txt`;
|
||||
const folderSearch = `search-folder-${Utils.random()}`;
|
||||
|
||||
let fileSearchNotFav1Id, fileSearchNotFav2Id, fileSearchNotFav3Id, fileSearchNotFav4Id;
|
||||
let fileSearchFav1Id, fileSearchFav2Id, fileSearchFav3Id, fileSearchFav4Id, folderSearchId;
|
||||
|
||||
const apis = {
|
||||
admin: new RepoClient(),
|
||||
user: new RepoClient(username, username)
|
||||
@@ -55,6 +68,7 @@ describe('Mark items as favorites', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable, toolbar } = page;
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -73,8 +87,19 @@ describe('Mark items as favorites', () => {
|
||||
fileFav4Id = (await apis.user.nodes.createFile(fileFav4, parentId)).entry.id;
|
||||
folderId = (await apis.user.nodes.createFolder(folder, parentId)).entry.id;
|
||||
|
||||
fileSearchNotFav1Id = (await apis.user.nodes.createFile(fileSearchNotFav1, parentId)).entry.id;
|
||||
fileSearchNotFav2Id = (await apis.user.nodes.createFile(fileSearchNotFav2, parentId)).entry.id;
|
||||
fileSearchNotFav3Id = (await apis.user.nodes.createFile(fileSearchNotFav3, parentId)).entry.id;
|
||||
fileSearchNotFav4Id = (await apis.user.nodes.createFile(fileSearchNotFav4, parentId)).entry.id;
|
||||
fileSearchFav1Id = (await apis.user.nodes.createFile(fileSearchFav1, parentId)).entry.id;
|
||||
fileSearchFav2Id = (await apis.user.nodes.createFile(fileSearchFav2, parentId)).entry.id;
|
||||
fileSearchFav3Id = (await apis.user.nodes.createFile(fileSearchFav3, parentId)).entry.id;
|
||||
fileSearchFav4Id = (await apis.user.nodes.createFile(fileSearchFav4, parentId)).entry.id;
|
||||
folderSearchId = (await apis.user.nodes.createFolder(folderSearch, parentId)).entry.id;
|
||||
|
||||
await apis.user.favorites.addFavoritesByIds('file', [ fileFavUIId, fileFav1Id, fileFav2Id, fileFav3Id, fileFav4Id ]);
|
||||
await apis.user.favorites.waitForApi({ expect: 5 });
|
||||
await apis.user.favorites.addFavoritesByIds('file', [ fileSearchFav1Id, fileSearchFav2Id, fileSearchFav3Id, fileSearchFav4Id ]);
|
||||
await apis.user.favorites.waitForApi({ expect: 9 });
|
||||
|
||||
await apis.user.shared.shareFilesByIds([ fileFav1Id, fileFav2Id, fileFav3Id, fileFav4Id ]);
|
||||
await apis.user.shared.shareFilesByIds([ fileNotFav1Id, fileNotFav2Id, fileNotFav3Id, fileNotFav4Id ]);
|
||||
@@ -89,12 +114,17 @@ describe('Mark items as favorites', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
done();
|
||||
});
|
||||
|
||||
describe('on Personal Files', () => {
|
||||
afterAll(async (done) => {
|
||||
await apis.user.favorites.addFavoritesByIds('file', [ fileFavUIId, fileFav1Id, fileFav2Id, fileFav3Id, fileFav4Id ]);
|
||||
await apis.user.favorites.addFavoriteById('folder', folderId);
|
||||
await apis.user.favorites.removeFavoritesByIds([ fileNotFavUIId , fileNotFav1Id, fileNotFav2Id, fileNotFav3Id, fileNotFav4Id ]);
|
||||
await apis.user.favorites.waitForApi({ expect: 6 });
|
||||
await apis.user.favorites.waitForApi({ expect: 10 });
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -176,7 +206,7 @@ describe('Mark items as favorites', () => {
|
||||
afterAll(async (done) => {
|
||||
await apis.user.favorites.addFavoritesByIds('file', [ fileFav1Id, fileFav2Id, fileFav3Id, fileFav4Id ]);
|
||||
await apis.user.favorites.removeFavoritesByIds([ fileNotFav1Id, fileNotFav2Id, fileNotFav3Id, fileNotFav4Id ]);
|
||||
await apis.user.favorites.waitForApi({ expect: 6 });
|
||||
await apis.user.favorites.waitForApi({ expect: 10 });
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -229,7 +259,7 @@ describe('Mark items as favorites', () => {
|
||||
afterAll(async (done) => {
|
||||
await apis.user.favorites.addFavoritesByIds('file', [ fileFav1Id, fileFav2Id, fileFav3Id, fileFav4Id ]);
|
||||
await apis.user.favorites.removeFavoritesByIds([ fileNotFav1Id, fileNotFav2Id, fileNotFav3Id, fileNotFav4Id ]);
|
||||
await apis.user.favorites.waitForApi({ expect: 6 });
|
||||
await apis.user.favorites.waitForApi({ expect: 10 });
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -282,7 +312,7 @@ describe('Mark items as favorites', () => {
|
||||
afterAll(async (done) => {
|
||||
await apis.user.favorites.addFavoritesByIds('file', [ fileFav1Id, fileFav2Id, fileFav3Id, fileFav4Id ]);
|
||||
await apis.user.favorites.removeFavoritesByIds([ fileNotFav1Id, fileNotFav2Id, fileNotFav3Id, fileNotFav4Id ]);
|
||||
await apis.user.favorites.waitForApi({ expect: 6 });
|
||||
await apis.user.favorites.waitForApi({ expect: 10 });
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -319,6 +349,73 @@ describe('Mark items as favorites', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('on Search Results', () => {
|
||||
beforeAll(async done => {
|
||||
await apis.user.search.waitForNodes('search-f', { expect: 9 });
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async done => {
|
||||
await page.header.expandSideNav();
|
||||
await page.clickPersonalFiles();
|
||||
done();
|
||||
});
|
||||
|
||||
it('favorite a file - [C306966]', async () => {
|
||||
await dataTable.selectItem(fileSearchNotFav1);
|
||||
await toolbar.clickMoreActionsFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchNotFav1Id, { expect: true })).toBe(true, `${fileSearchNotFav1} not marked as favorite`);
|
||||
});
|
||||
|
||||
it('favorite a folder - [C306971]', async () => {
|
||||
await dataTable.selectItem(folderSearch);
|
||||
await toolbar.clickMoreActionsFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(folderSearchId, { expect: true })).toBe(true, `${folderSearch} not marked as favorite`);
|
||||
});
|
||||
|
||||
it('unfavorite an item - [C306967]', async () => {
|
||||
await dataTable.selectItem(fileSearchFav1);
|
||||
await toolbar.clickMoreActionsRemoveFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchFav1Id, { expect: false })).toBe(false, `${fileSearchFav1} is marked as favorite`);
|
||||
});
|
||||
|
||||
it('favorite multiple items - all unfavorite - [C306968]', async () => {
|
||||
await dataTable.selectMultipleItems([ fileSearchNotFav2, fileSearchNotFav3 ]);
|
||||
await toolbar.clickMoreActionsFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchNotFav2Id, { expect: true })).toBe(true, `${fileSearchNotFav2} not marked as favorite`);
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchNotFav3Id, { expect: true })).toBe(true, `${fileSearchNotFav3} not marked as favorite`);
|
||||
});
|
||||
|
||||
it('favorite multiple items - some favorite and some unfavorite - [C306970]', async () => {
|
||||
await dataTable.selectMultipleItems([ fileSearchNotFav4, fileSearchFav2 ]);
|
||||
await toolbar.clickMoreActionsFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchNotFav4Id, { expect: true })).toBe(true, `${fileSearchNotFav4} not marked as favorite`);
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchFav2Id, { expect: true })).toBe(true, `${fileSearchFav2} not marked as favorite`);
|
||||
});
|
||||
|
||||
it('unfavorite multiple items - [C306969]', async () => {
|
||||
await dataTable.selectMultipleItems([ fileSearchFav3, fileSearchFav4 ])
|
||||
await toolbar.clickMoreActionsRemoveFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchFav3Id, { expect: false })).toBe(false, `${fileSearchFav3} marked as favorite`);
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSearchFav4Id, { expect: false })).toBe(false, `${fileSearchFav4} marked as favorite`);
|
||||
});
|
||||
});
|
||||
|
||||
describe ('on File Libraries', () => {
|
||||
const siteName = `site-public-${Utils.random()}`;
|
||||
|
||||
@@ -423,60 +520,4 @@ describe('Mark items as favorites', () => {
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(fileSiteFav4Id, { expect: true })).toBe(true, 'item not marked as favorite');
|
||||
});
|
||||
});
|
||||
|
||||
describe('on a library', () => {
|
||||
const adminSite1 = `adminSite1-${Utils.random()}`;
|
||||
const adminSite2 = `adminSite2-${Utils.random()}`;
|
||||
const adminSite3 = `adminSite3-${Utils.random()}`;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.sites.createSite(adminSite1);
|
||||
await apis.admin.sites.createSite(adminSite2);
|
||||
await apis.admin.sites.createSite(adminSite3);
|
||||
await apis.admin.sites.addSiteMember(adminSite1, username, SITE_ROLES.SITE_CONSUMER.ROLE);
|
||||
await apis.admin.sites.addSiteMember(adminSite2, username, SITE_ROLES.SITE_CONSUMER.ROLE);
|
||||
await apis.admin.sites.addSiteMember(adminSite3, username, SITE_ROLES.SITE_CONSUMER.ROLE);
|
||||
|
||||
await apis.user.favorites.addFavoriteById('site', adminSite2);
|
||||
await apis.user.favorites.addFavoriteById('site', adminSite3);
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await apis.admin.sites.deleteSite(adminSite1);
|
||||
await apis.admin.sites.deleteSite(adminSite2);
|
||||
await apis.admin.sites.deleteSite(adminSite3);
|
||||
done();
|
||||
});
|
||||
|
||||
it('Mark a library as favorite - [C289974]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(adminSite1);
|
||||
await toolbar.clickMoreActionsFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(adminSite1, { expect: true })).toBe(true, `${adminSite1} not favorite`);
|
||||
});
|
||||
|
||||
it('Remove a library from favorites - on My Libraries - [C289975]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.selectItem(adminSite2);
|
||||
await toolbar.clickMoreActionsRemoveFavorite();
|
||||
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(adminSite2, { expect: false })).toBe(false, `${adminSite2} still favorite`);
|
||||
});
|
||||
|
||||
it('Remove a library from favorites - on Favorite Libraries - [C289976]', async () => {
|
||||
await page.goToFavoriteLibrariesAndWait();
|
||||
await dataTable.selectItem(adminSite3);
|
||||
await toolbar.clickMoreActionsRemoveFavorite();
|
||||
|
||||
expect(await dataTable.isItemPresent(adminSite3)).toBe(false, `${adminSite3} is displayed`);
|
||||
expect(await apis.user.favorites.isFavoriteWithRetry(adminSite3, { expect: false })).toBe(false, `${adminSite3} still favorite`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -49,6 +49,7 @@ describe('Share a file', () => {
|
||||
const shareDialog = new ShareDialog();
|
||||
const viewer = new Viewer();
|
||||
const contextMenu = dataTable.menu;
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -154,10 +155,6 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file3Id);
|
||||
expect(await apis.user.nodes.isFileShared(file3Id)).toBe(true, `${file3} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file3)).toBe(true, `${file3} is not in the Shared files list`);
|
||||
});
|
||||
|
||||
it('Copy shared file URL - [C286330]', async () => {
|
||||
@@ -244,6 +241,7 @@ describe('Share a file', () => {
|
||||
|
||||
it('Share a file from the context menu - [C286345]', async () => {
|
||||
await dataTable.rightClickOnItem(file9);
|
||||
await contextMenu.waitForMenuToOpen();
|
||||
await contextMenu.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
@@ -252,10 +250,6 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file9Id);
|
||||
expect(await apis.user.nodes.isFileShared(file9Id)).toBe(true, `${file9} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file9)).toBe(true, `${file9} is not in the Shared files list`);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -305,6 +299,7 @@ describe('Share a file', () => {
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -350,10 +345,6 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file3Id);
|
||||
expect(await apis.user.nodes.isFileShared(file3Id)).toBe(true, `${file3} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file3)).toBe(true, `${file3} is not in the Shared files list`);
|
||||
});
|
||||
|
||||
it('Copy shared file URL - [C286642]', async () => {
|
||||
@@ -440,6 +431,7 @@ describe('Share a file', () => {
|
||||
|
||||
it('Share a file from the context menu - [C286647]', async () => {
|
||||
await dataTable.rightClickOnItem(file9);
|
||||
await contextMenu.waitForMenuToOpen();
|
||||
await contextMenu.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
@@ -448,10 +440,6 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file9Id);
|
||||
expect(await apis.user.nodes.isFileShared(file9Id)).toBe(true, `${file9} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file9)).toBe(true, `${file9} is not in the Shared files list`);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -484,13 +472,13 @@ describe('Share a file', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
await page.clickRecentFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -544,10 +532,6 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file3Id);
|
||||
expect(await apis.user.nodes.isFileShared(file3Id)).toBe(true, `${file3} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file3)).toBe(true, `${file3} is not in the Shared files list`);
|
||||
});
|
||||
|
||||
it('Copy shared file URL - [C286660]', async () => {
|
||||
@@ -634,6 +618,7 @@ describe('Share a file', () => {
|
||||
|
||||
it('Share a file from the context menu - [C286665]', async () => {
|
||||
await dataTable.rightClickOnItem(file9);
|
||||
await contextMenu.waitForMenuToOpen();
|
||||
await contextMenu.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
@@ -642,10 +627,6 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file9Id);
|
||||
expect(await apis.user.nodes.isFileShared(file9Id)).toBe(true, `${file9} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file9)).toBe(true, `${file9} is not in the Shared files list`);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -680,13 +661,13 @@ describe('Share a file', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
await page.clickSharedFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -791,6 +772,7 @@ describe('Share a file', () => {
|
||||
|
||||
it('Open Share dialog from context menu - [C286656]', async () => {
|
||||
await dataTable.rightClickOnItem(file7);
|
||||
await contextMenu.waitForMenuToOpen();
|
||||
await contextMenu.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
@@ -853,6 +835,7 @@ describe('Share a file', () => {
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -906,10 +889,6 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file3Id);
|
||||
expect(await apis.user.nodes.isFileShared(file3Id)).toBe(true, `${file3} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file3)).toBe(true, `${file3} is not in the Shared files list`);
|
||||
});
|
||||
|
||||
it('Copy shared file URL - [C286669]', async () => {
|
||||
@@ -996,6 +975,7 @@ describe('Share a file', () => {
|
||||
|
||||
it('Share a file from the context menu - [C286674]', async () => {
|
||||
await dataTable.rightClickOnItem(file9);
|
||||
await contextMenu.waitForMenuToOpen();
|
||||
await contextMenu.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
@@ -1004,10 +984,124 @@ describe('Share a file', () => {
|
||||
const sharedId = await apis.user.nodes.getSharedId(file9Id);
|
||||
expect(await apis.user.nodes.isFileShared(file9Id)).toBe(true, `${file9} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file9)).toBe(true, `${file9} is not in the Shared files list`);
|
||||
describe('from Search Results', () => {
|
||||
const file3 = `search-file3-${Utils.random()}.txt`; let file3Id;
|
||||
const file5 = `search-file5-${Utils.random()}.txt`; let file5Id;
|
||||
const file6 = `search-file6-${Utils.random()}.txt`; let file6Id;
|
||||
const file7 = `search-file7-${Utils.random()}.txt`; let file7Id;
|
||||
const file9 = `search-file9-${Utils.random()}.txt`; let file9Id;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
file3Id = (await apis.user.nodes.createFile(file3, parentId)).entry.id;
|
||||
file5Id = (await apis.user.nodes.createFile(file5, parentId)).entry.id;
|
||||
file6Id = (await apis.user.nodes.createFile(file6, parentId)).entry.id;
|
||||
file7Id = (await apis.user.nodes.createFile(file7, parentId)).entry.id;
|
||||
file9Id = (await apis.user.nodes.createFile(file9, parentId)).entry.id;
|
||||
await apis.user.shared.shareFileById(file6Id, expiryDate);
|
||||
await apis.user.shared.shareFileById(file7Id, expiryDate);
|
||||
await apis.user.shared.waitForApi({ expect: 2 });
|
||||
await apis.user.search.waitForNodes('search-f', { expect: 5 });
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(async done => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await apis.user.nodes.deleteNodeById(file3Id);
|
||||
await apis.user.nodes.deleteNodeById(file5Id);
|
||||
await apis.user.nodes.deleteNodeById(file6Id);
|
||||
await apis.user.nodes.deleteNodeById(file7Id);
|
||||
await apis.user.nodes.deleteNodeById(file9Id);
|
||||
await apis.user.shared.waitForApi({ expect: 0 });
|
||||
done();
|
||||
});
|
||||
|
||||
it('Share a file - [C306975]', async () => {
|
||||
await dataTable.selectItem(file3);
|
||||
await toolbar.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
const url = await shareDialog.getLinkUrl();
|
||||
await Utils.pressEscape();
|
||||
const sharedId = await apis.user.nodes.getSharedId(file3Id);
|
||||
expect(await apis.user.nodes.isFileShared(file3Id)).toBe(true, `${file3} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
});
|
||||
|
||||
it('Share a file with expiration date - [C306977]', async () => {
|
||||
await dataTable.selectItem(file5);
|
||||
await toolbar.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
await shareDialog.clickExpirationToggle();
|
||||
expect(await shareDialog.isExpireToggleEnabled()).toBe(true, 'Expire toggle not checked');
|
||||
expect(await shareDialog.dateTimePicker.isCalendarOpen()).toBe(true, 'Calendar not opened');
|
||||
const date = await shareDialog.dateTimePicker.setDefaultDay();
|
||||
await shareDialog.dateTimePicker.waitForDateTimePickerToClose();
|
||||
|
||||
const setDate = (`${date}`).replace(',', '');
|
||||
const inputDate = await shareDialog.getExpireDate();
|
||||
|
||||
expect(new Date(inputDate)).toEqual(new Date(setDate));
|
||||
|
||||
const expireDateProperty = await apis.user.nodes.getSharedExpiryDate(file5Id);
|
||||
|
||||
expect(Utils.formatDate(expireDateProperty)).toEqual(Utils.formatDate(inputDate));
|
||||
});
|
||||
|
||||
it('Expire date is displayed correctly - [C306978]', async () => {
|
||||
await dataTable.selectItem(file6);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
const expireProperty = await apis.user.nodes.getSharedExpiryDate(file6Id);
|
||||
expect(expireProperty).toEqual(expiryDate);
|
||||
expect(await shareDialog.isExpireToggleEnabled()).toBe(true, 'Expiration is not checked');
|
||||
expect(Utils.formatDate(await shareDialog.getExpireDate())).toEqual(Utils.formatDate(expiryDate));
|
||||
});
|
||||
|
||||
it('Disable the share link expiration - [C306979]', async () => {
|
||||
await dataTable.selectItem(file7);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isExpireToggleEnabled()).toBe(true, 'Expiration is not checked');
|
||||
expect(await shareDialog.getExpireDate()).not.toBe('', 'Expire date input is empty');
|
||||
|
||||
await shareDialog.clickExpirationToggle();
|
||||
expect(await shareDialog.isExpireToggleEnabled()).toBe(false, 'Expiration is checked');
|
||||
expect(await shareDialog.getExpireDate()).toBe('', 'Expire date input is not empty');
|
||||
|
||||
await shareDialog.clickClose();
|
||||
expect(await apis.user.nodes.getSharedExpiryDate(file7Id)).toBe(undefined, `${file7} link still has expiration`);
|
||||
});
|
||||
|
||||
it('Share a file from the context menu - [C306981]', async () => {
|
||||
await dataTable.rightClickOnItem(file9);
|
||||
await contextMenu.waitForMenuToOpen();
|
||||
await contextMenu.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
const url = await shareDialog.getLinkUrl();
|
||||
await Utils.pressEscape();
|
||||
const sharedId = await apis.user.nodes.getSharedId(file9Id);
|
||||
expect(await apis.user.nodes.isFileShared(file9Id)).toBe(true, `${file9} is not shared`);
|
||||
expect(url).toContain(sharedId);
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -49,6 +49,7 @@ describe('Single click on item name', () => {
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable, breadcrumb } = page;
|
||||
const viewer = new Viewer();
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -198,4 +199,43 @@ describe('Single click on item name', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('on Search Results', () => {
|
||||
beforeEach(async done => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
it('Hyperlink appears when mouse over a file - [C306988]', async () => {
|
||||
await searchInput.searchFor(file1);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await dataTable.hasLinkOnSearchResultName(file1)).toBe(true, 'Link on name is missing');
|
||||
});
|
||||
|
||||
it('File preview opens when clicking the hyperlink - [C306989]', async () => {
|
||||
await searchInput.searchFor(file1);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.clickSearchResultNameLink(file1);
|
||||
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened');
|
||||
|
||||
await Utils.pressEscape();
|
||||
});
|
||||
|
||||
it('Navigate inside the folder when clicking the hyperlink - [C306990]', async () => {
|
||||
await searchInput.searchFor(folder1);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.clickSearchResultNameLink(folder1);
|
||||
|
||||
expect(await breadcrumb.getCurrentItemName()).toBe(folder1);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -217,7 +217,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291823]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-file');
|
||||
await searchInput.searchFor('my-file');
|
||||
await dataTable.selectMultipleItems([file1, file2]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for selected files`);
|
||||
@@ -335,7 +335,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291818]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(file1);
|
||||
await searchInput.searchFor(file1);
|
||||
await dataTable.selectItem(file1);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(true, `View is not displayed for ${file1}`);
|
||||
@@ -428,7 +428,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291819]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(folder1);
|
||||
await searchInput.searchFor(folder1);
|
||||
await dataTable.selectItem(folder1);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, `View is displayed for ${folder1}`);
|
||||
@@ -541,7 +541,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291824]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-file');
|
||||
await searchInput.searchFor('my-file');
|
||||
await dataTable.selectMultipleItems([file1, file2]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed');
|
||||
@@ -630,7 +630,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291825]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-folder');
|
||||
await searchInput.searchFor('my-folder');
|
||||
await dataTable.selectMultipleItems([folder1, folder2]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed');
|
||||
@@ -719,7 +719,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291826]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-f');
|
||||
await searchInput.searchFor('my-f');
|
||||
await dataTable.selectMultipleItems([file1, folder1]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed');
|
||||
@@ -822,7 +822,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291829]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(file1);
|
||||
await searchInput.searchFor(file1);
|
||||
await dataTable.rightClickOnItem(file1);
|
||||
|
||||
expect(await contextMenu.isEditOfflinePresent()).toBe(false, `Edit offline is displayed for ${file1}`);
|
||||
@@ -898,7 +898,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291830]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(folder1);
|
||||
await searchInput.searchFor(folder1);
|
||||
await dataTable.rightClickOnItem(folder1);
|
||||
|
||||
expect(await contextMenu.isDownloadPresent()).toBe(true, `Download is not displayed for ${folder1}`);
|
||||
@@ -990,7 +990,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291834]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-file');
|
||||
await searchInput.searchFor('my-file');
|
||||
await dataTable.selectMultipleItems([file1, file2]);
|
||||
await dataTable.rightClickOnMultipleSelection();
|
||||
|
||||
@@ -1066,7 +1066,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291835]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-folder');
|
||||
await searchInput.searchFor('my-folder');
|
||||
await dataTable.selectMultipleItems([folder1, folder2]);
|
||||
await dataTable.rightClickOnMultipleSelection();
|
||||
|
||||
@@ -1141,7 +1141,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C291836]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-f');
|
||||
await searchInput.searchFor('my-f');
|
||||
await dataTable.selectMultipleItems([file1, folder1]);
|
||||
await dataTable.rightClickOnMultipleSelection();
|
||||
|
||||
@@ -1162,7 +1162,6 @@ describe('Special permissions available actions : ', () => {
|
||||
describe('toolbar actions appear correctly in the viewer', () => {
|
||||
beforeEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await dataTable.clearSelection();
|
||||
await page.clickPersonalFiles();
|
||||
done();
|
||||
});
|
||||
@@ -1254,6 +1253,36 @@ describe('Special permissions available actions : ', () => {
|
||||
|
||||
await toolbar.closeMoreMenu();
|
||||
});
|
||||
|
||||
it('file from Search Results - [C306991]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchFor(docxFile);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.doubleClickOnRowByName(docxFile);
|
||||
await viewer.waitForViewerToOpen();
|
||||
|
||||
expect(await viewerToolbar.isViewPresent()).toBe(false, `View is displayed`);
|
||||
expect(await viewerToolbar.isDownloadPresent()).toBe(true, `Download is not displayed`);
|
||||
expect(await viewerToolbar.isPrintPresent()).toBe(true, `Print is not displayed`);
|
||||
expect(await viewerToolbar.isFullScreenPresent()).toBe(true, `Full screen is not displayed`);
|
||||
expect(await viewerToolbar.isSharedLinkSettingsPresent()).toBe(true, 'Shared link settings is not displayed');
|
||||
expect(await viewerToolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed`);
|
||||
|
||||
await viewerToolbar.openMoreMenu();
|
||||
|
||||
expect(await viewerToolbar.menu.isEditOfflinePresent()).toBe(false, `Edit offline is displayed`);
|
||||
expect(await viewerToolbar.menu.isCancelEditingPresent()).toBe(false, `Cancel editing is displayed`);
|
||||
expect(await viewerToolbar.menu.isToggleRemoveFavoritePresent()).toBe(true, `Remove favorite is not displayed`);
|
||||
expect(await viewerToolbar.menu.isSharePresent()).toBe(false, `Share is displayed in More actions`);
|
||||
expect(await viewerToolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed`);
|
||||
expect(await viewerToolbar.menu.isMovePresent()).toBe(false, `Move is displayed`);
|
||||
expect(await viewerToolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed`);
|
||||
expect(await viewerToolbar.menu.isManageVersionsPresent()).toBe(true, `Manage versions is not displayed`);
|
||||
expect(await viewerToolbar.menu.isUploadNewVersionPresent()).toBe(false, `Upload new version is displayed`);
|
||||
|
||||
await toolbar.closeMoreMenu();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1345,7 +1374,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C297653]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(file1);
|
||||
await searchInput.searchFor(file1);
|
||||
await dataTable.selectItem(file1);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(true, `View is not displayed for ${file1}`);
|
||||
@@ -1463,6 +1492,36 @@ describe('Special permissions available actions : ', () => {
|
||||
|
||||
await viewerToolbar.closeMoreMenu();
|
||||
});
|
||||
|
||||
it('file opened from Search Results - [C306992]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchFor(docxFile);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.doubleClickOnRowByName(docxFile);
|
||||
await viewer.waitForViewerToOpen();
|
||||
|
||||
expect(await viewerToolbar.isViewPresent()).toBe(false, `View is displayed`);
|
||||
expect(await viewerToolbar.isDownloadPresent()).toBe(true, `Download is not displayed`);
|
||||
expect(await viewerToolbar.isPrintPresent()).toBe(true, `Print is not displayed`);
|
||||
expect(await viewerToolbar.isFullScreenPresent()).toBe(true, `Full screen is not displayed`);
|
||||
expect(await viewerToolbar.isSharedLinkSettingsPresent()).toBe(true, 'Shared link settings is not displayed');
|
||||
expect(await viewerToolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed`);
|
||||
|
||||
await viewerToolbar.openMoreMenu();
|
||||
|
||||
expect(await viewerToolbar.menu.isEditOfflinePresent()).toBe(true, `Edit offline is not displayed`);
|
||||
expect(await viewerToolbar.menu.isCancelEditingPresent()).toBe(false, `Cancel editing is displayed`);
|
||||
expect(await viewerToolbar.menu.isToggleRemoveFavoritePresent()).toBe(true, `Remove favorite is not displayed`);
|
||||
expect(await viewerToolbar.menu.isSharePresent()).toBe(false, `Share is displayed in More actions`);
|
||||
expect(await viewerToolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed`);
|
||||
expect(await viewerToolbar.menu.isMovePresent()).toBe(false, `Move is displayed`);
|
||||
expect(await viewerToolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed`);
|
||||
expect(await viewerToolbar.menu.isManageVersionsPresent()).toBe(true, `Manage versions is not displayed`);
|
||||
expect(await viewerToolbar.menu.isUploadNewVersionPresent()).toBe(true, `Upload new version is not displayed`);
|
||||
|
||||
await viewerToolbar.closeMoreMenu();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1554,7 +1613,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C297660]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(fileLocked);
|
||||
await searchInput.searchFor(fileLocked);
|
||||
await dataTable.selectItem(fileLocked);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(true, `View is not displayed for ${fileLocked}`);
|
||||
@@ -1673,6 +1732,36 @@ describe('Special permissions available actions : ', () => {
|
||||
|
||||
await viewerToolbar.closeMoreMenu();
|
||||
});
|
||||
|
||||
it('file opened from Search Results - [C306993]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchFor(fileLocked);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.doubleClickOnRowByName(fileLocked);
|
||||
await viewer.waitForViewerToOpen();
|
||||
|
||||
expect(await viewerToolbar.isViewPresent()).toBe(false, `View is displayed`);
|
||||
expect(await viewerToolbar.isDownloadPresent()).toBe(true, `Download is not displayed`);
|
||||
expect(await viewerToolbar.isPrintPresent()).toBe(true, `Print is not displayed`);
|
||||
expect(await viewerToolbar.isFullScreenPresent()).toBe(true, `Full screen is not displayed`);
|
||||
expect(await viewerToolbar.isSharedLinkSettingsPresent()).toBe(true, 'Shared link settings is not displayed');
|
||||
expect(await viewerToolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed`);
|
||||
|
||||
await viewerToolbar.openMoreMenu();
|
||||
|
||||
expect(await viewerToolbar.menu.isEditOfflinePresent()).toBe(false, `Edit offline is displayed`);
|
||||
expect(await viewerToolbar.menu.isCancelEditingPresent()).toBe(true, `Cancel editing is not displayed`);
|
||||
expect(await viewerToolbar.menu.isToggleRemoveFavoritePresent()).toBe(true, `Remove favorite is not displayed`);
|
||||
expect(await viewerToolbar.menu.isSharePresent()).toBe(false, `Share is displayed in More actions`);
|
||||
expect(await viewerToolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed`);
|
||||
expect(await viewerToolbar.menu.isMovePresent()).toBe(false, `Move is displayed`);
|
||||
expect(await viewerToolbar.menu.isDeletePresent()).toBe(false, `Delete is displayed`);
|
||||
expect(await viewerToolbar.menu.isManageVersionsPresent()).toBe(true, `Manage versions is not displayed`);
|
||||
expect(await viewerToolbar.menu.isUploadNewVersionPresent()).toBe(true, `Upload new version is not displayed`);
|
||||
|
||||
await viewerToolbar.closeMoreMenu();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1764,7 +1853,7 @@ describe('Special permissions available actions : ', () => {
|
||||
it('on Search Results - [C297667]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(fileLocked);
|
||||
await searchInput.searchFor(fileLocked);
|
||||
await dataTable.selectItem(fileLocked);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(true, `View is not displayed for ${fileLocked}`);
|
||||
@@ -1883,6 +1972,38 @@ describe('Special permissions available actions : ', () => {
|
||||
|
||||
await viewerToolbar.closeMoreMenu();
|
||||
});
|
||||
|
||||
it('file opened from Search Results - [C306994]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchFor(fileLocked);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.doubleClickOnRowByName(fileLocked);
|
||||
await viewer.waitForViewerToOpen();
|
||||
|
||||
expect(await viewerToolbar.isViewPresent()).toBe(false, `View is displayed`);
|
||||
expect(await viewerToolbar.isDownloadPresent()).toBe(true, `Download is not displayed`);
|
||||
expect(await viewerToolbar.isPrintPresent()).toBe(true, `Print is not displayed`);
|
||||
expect(await viewerToolbar.isFullScreenPresent()).toBe(true, `Full screen is not displayed`);
|
||||
expect(await viewerToolbar.isSharedLinkSettingsPresent()).toBe(true, 'Shared link settings is not displayed');
|
||||
expect(await viewerToolbar.isViewDetailsPresent()).toBe(true, `View details is not displayed`);
|
||||
|
||||
await viewerToolbar.openMoreMenu();
|
||||
|
||||
expect(await viewerToolbar.menu.isEditOfflinePresent()).toBe(false, `Edit offline is displayed`);
|
||||
expect(await viewerToolbar.menu.isCancelEditingPresent()).toBe(true, `Cancel editing is not displayed`);
|
||||
expect(await viewerToolbar.menu.isToggleRemoveFavoritePresent()).toBe(true, `Remove favorite is not displayed`);
|
||||
expect(await viewerToolbar.menu.isSharePresent()).toBe(false, `Share is displayed in More actions`);
|
||||
expect(await viewerToolbar.menu.isCopyPresent()).toBe(true, `Copy is not displayed`);
|
||||
// TODO: change expect to true when ACA-2319 is fixed
|
||||
expect(await viewerToolbar.menu.isMovePresent()).toBe(false, `Move is not displayed`);
|
||||
// TODO: change expect to true when ACA-2319 is fixed
|
||||
expect(await viewerToolbar.menu.isDeletePresent()).toBe(false, `Delete is not displayed`);
|
||||
expect(await viewerToolbar.menu.isManageVersionsPresent()).toBe(true, `Manage versions is not displayed`);
|
||||
expect(await viewerToolbar.menu.isUploadNewVersionPresent()).toBe(false, `Upload new version is displayed`);
|
||||
|
||||
await viewerToolbar.closeMoreMenu();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -607,7 +607,7 @@ describe('Toolbar actions - multiple selection : ', () => {
|
||||
it('correct actions appear when multiple files are selected - [C291820]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-fileInSite');
|
||||
await searchInput.searchFor('my-fileInSite');
|
||||
await dataTable.selectMultipleItems([file1InSite, file2InSite]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed for selected files');
|
||||
@@ -631,7 +631,7 @@ describe('Toolbar actions - multiple selection : ', () => {
|
||||
it('correct actions appear when multiple locked files are selected - [C297626]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-fileLockedInSite');
|
||||
await searchInput.searchFor('my-fileLockedInSite');
|
||||
await dataTable.selectMultipleItems([fileLocked1InSite, fileLocked2InSite]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed for selected files');
|
||||
@@ -655,7 +655,7 @@ describe('Toolbar actions - multiple selection : ', () => {
|
||||
it('correct actions appear when multiple folders are selected - [C291821]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-folderInSite');
|
||||
await searchInput.searchFor('my-folderInSite');
|
||||
await dataTable.selectMultipleItems([folder1InSite, folder2InSite]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed');
|
||||
@@ -679,7 +679,7 @@ describe('Toolbar actions - multiple selection : ', () => {
|
||||
it('correct actions appear when both files and folders are selected - [C291822]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions('my-f');
|
||||
await searchInput.searchFor('my-f');
|
||||
await dataTable.selectMultipleItems([file1InSite, file2InSite, folder1InSite, folder2InSite]);
|
||||
|
||||
expect(await toolbar.isViewPresent()).toBe(false, 'View is displayed');
|
||||
|
@@ -365,7 +365,7 @@ describe('Toolbar actions - single selection : ', () => {
|
||||
it('Available actions for a library - Search Results - [C290084]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(siteName);
|
||||
await searchInput.searchFor(siteName);
|
||||
await dataTable.selectItem(siteName);
|
||||
|
||||
expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed');
|
||||
@@ -383,7 +383,7 @@ describe('Toolbar actions - single selection : ', () => {
|
||||
it('Available actions for a library - Search Results - user is not a member - [C290085]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(adminPublic);
|
||||
await searchInput.searchFor(adminPublic);
|
||||
await dataTable.selectItem(adminPublic);
|
||||
|
||||
expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed');
|
||||
@@ -401,7 +401,7 @@ describe('Toolbar actions - single selection : ', () => {
|
||||
it('Available actions for a moderated library - Search Results - user requested to join - [C290086]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(adminModerated);
|
||||
await searchInput.searchFor(adminModerated);
|
||||
await dataTable.selectItem(adminModerated);
|
||||
|
||||
expect(await toolbar.isEmpty()).toBe(false, 'toolbar not displayed');
|
||||
@@ -676,7 +676,7 @@ describe('Toolbar actions - single selection : ', () => {
|
||||
it('nodes actions are not displayed when no item is selected - [C291815]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(fileInSite);
|
||||
await searchInput.searchFor(fileInSite);
|
||||
|
||||
expect(await toolbar.isToggleSearchFiltersPresent()).toBe(true, `Search filter toggle is not displayed`);
|
||||
expect(await toolbar.numberOfAvailableActions()).toBe(1, `more than 1 action is present`);
|
||||
@@ -685,7 +685,7 @@ describe('Toolbar actions - single selection : ', () => {
|
||||
it('correct actions appear when a file is selected - [C291816]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(fileUser);
|
||||
await searchInput.searchFor(fileUser);
|
||||
await dataTable.selectItem(fileUser);
|
||||
|
||||
expect(await toolbar.isEmpty()).toBe(false, `actions not displayed for ${fileUser}`);
|
||||
@@ -710,7 +710,7 @@ describe('Toolbar actions - single selection : ', () => {
|
||||
it('correct actions appear when a locked file is selected - [C297618]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFiles();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(fileLocked);
|
||||
await searchInput.searchFor(fileLocked);
|
||||
await dataTable.selectItem(fileLocked);
|
||||
|
||||
expect(await toolbar.isEmpty()).toBe(false, `actions not displayed for ${fileLocked}`);
|
||||
@@ -735,7 +735,7 @@ describe('Toolbar actions - single selection : ', () => {
|
||||
it('correct actions appear when a folder is selected - [C291817]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkOnlyFolders();
|
||||
await searchInput.searchForTextAndCloseSearchOptions(folderUser);
|
||||
await searchInput.searchFor(folderUser);
|
||||
await dataTable.selectItem(folderUser);
|
||||
|
||||
expect(await toolbar.isEmpty()).toBe(false, `actions not displayed for ${folderUser}`);
|
||||
|
239
e2e/suites/actions/unshare-file-search-results.test.ts
Executable file
239
e2e/suites/actions/unshare-file-search-results.test.ts
Executable file
@@ -0,0 +1,239 @@
|
||||
/*!
|
||||
* @license
|
||||
* Alfresco Example Content Application
|
||||
*
|
||||
* Copyright (C) 2005 - 2019 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 { browser } from 'protractor';
|
||||
import { LoginPage, BrowsingPage } from '../../pages/pages';
|
||||
import { SITE_VISIBILITY, SITE_ROLES } from '../../configs';
|
||||
import { RepoClient } from '../../utilities/repo-client/repo-client';
|
||||
import { ShareDialog } from '../../components/dialog/share-dialog';
|
||||
import { ConfirmDialog } from '../../components/dialog/confirm-dialog';
|
||||
import { Viewer } from '../../components/viewer/viewer';
|
||||
import { Utils } from '../../utilities/utils';
|
||||
|
||||
describe('Unshare a file from Search Results', () => {
|
||||
const username = `user-${Utils.random()}`;
|
||||
|
||||
const parent = `parent-${Utils.random()}`; let parentId;
|
||||
|
||||
const file1 = `search-file1-${Utils.random()}.txt`; let file1Id;
|
||||
const file2 = `search-file2-${Utils.random()}.txt`; let file2Id;
|
||||
const file3 = `search-file3-${Utils.random()}.txt`; let file3Id;
|
||||
const file4 = `search-file4-${Utils.random()}.txt`; let file4Id;
|
||||
|
||||
const sitePrivate = `site-private-${Utils.random()}`;
|
||||
|
||||
const fileSite1 = `search-fileSite1-${Utils.random()}.txt`; let fileSite1Id;
|
||||
const fileSite2 = `search-fileSite2-${Utils.random()}.txt`; let fileSite2Id;
|
||||
|
||||
const apis = {
|
||||
admin: new RepoClient(),
|
||||
user: new RepoClient(username, username)
|
||||
};
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable, toolbar } = page;
|
||||
const shareDialog = new ShareDialog();
|
||||
const confirmDialog = new ConfirmDialog();
|
||||
const contextMenu = dataTable.menu;
|
||||
const viewer = new Viewer();
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
parentId = (await apis.user.nodes.createFolder(parent)).entry.id;
|
||||
|
||||
file1Id = (await apis.user.nodes.createFile(file1, parentId)).entry.id;
|
||||
file2Id = (await apis.user.nodes.createFile(file2, parentId)).entry.id;
|
||||
file3Id = (await apis.user.nodes.createFile(file3, parentId)).entry.id;
|
||||
file4Id = (await apis.user.nodes.createFile(file4, parentId)).entry.id;
|
||||
|
||||
await apis.user.shared.shareFileById(file1Id);
|
||||
await apis.user.shared.shareFileById(file2Id);
|
||||
await apis.user.shared.shareFileById(file3Id);
|
||||
await apis.user.shared.shareFileById(file4Id);
|
||||
|
||||
await apis.admin.sites.createSite(sitePrivate, SITE_VISIBILITY.PRIVATE);
|
||||
const docLibId = await apis.admin.sites.getDocLibId(sitePrivate);
|
||||
|
||||
fileSite1Id = (await apis.admin.nodes.createFile(fileSite1, docLibId)).entry.id;
|
||||
fileSite2Id = (await apis.admin.nodes.createFile(fileSite2, docLibId)).entry.id;
|
||||
|
||||
await apis.admin.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONSUMER.ROLE);
|
||||
|
||||
await apis.admin.shared.shareFileById(fileSite1Id);
|
||||
await apis.user.shared.shareFileById(fileSite2Id);
|
||||
|
||||
await apis.user.shared.waitForApi({ expect: 6 });
|
||||
await apis.user.search.waitForNodes('search-file', { expect: 6 });
|
||||
|
||||
await loginPage.loginWith(username);
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await apis.user.nodes.deleteNodeById(parentId);
|
||||
await apis.admin.sites.deleteSite(sitePrivate);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await page.closeOpenDialogs();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
it('Unshare dialog UI - [C306995]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(file1);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(file1);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleChecked()).toBe(true, 'Share toggle not checked');
|
||||
await shareDialog.clickShareToggle();
|
||||
|
||||
expect(await confirmDialog.isDialogOpen()).toBe(true, 'Unshare dialog is not open');
|
||||
expect(await confirmDialog.getTitle()).toContain('Remove this shared link');
|
||||
expect(await confirmDialog.getText()).toContain('This link will be deleted and a new link will be created next time this file is shared');
|
||||
expect(await confirmDialog.isRemoveEnabled()).toBe(true, 'REMOVE button is not enabled');
|
||||
expect(await confirmDialog.isCancelEnabled()).toBe(true, 'CANCEL button is not enabled');
|
||||
});
|
||||
|
||||
it('Unshare a file - [C306996]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(file2);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(file2);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
const url = await shareDialog.getLinkUrl();
|
||||
await shareDialog.clickShareToggle();
|
||||
|
||||
await confirmDialog.clickRemove();
|
||||
await confirmDialog.waitForDialogToClose();
|
||||
await shareDialog.waitForDialogToClose();
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2Id)).toBe(false, `${file2} is shared`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file2);
|
||||
|
||||
await page.load();
|
||||
});
|
||||
|
||||
it('Cancel the Unshare action - [C306997]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(file3);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.selectItem(file3);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
const urlBefore = await shareDialog.getLinkUrl();
|
||||
await shareDialog.clickShareToggle();
|
||||
|
||||
await confirmDialog.clickCancel();
|
||||
await confirmDialog.waitForDialogToClose();
|
||||
expect(await shareDialog.isDialogOpen()).toBe(true, 'Share dialog not open');
|
||||
expect(await shareDialog.isShareToggleChecked()).toBe(true, 'Share toggle is off');
|
||||
|
||||
const urlAfter = await shareDialog.getLinkUrl();
|
||||
expect(urlBefore).toEqual(urlAfter);
|
||||
});
|
||||
|
||||
it('Unshare a file from the context menu - [C306999]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(file4);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.rightClickOnItem(file4);
|
||||
await contextMenu.waitForMenuToOpen();
|
||||
await contextMenu.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
const url = await shareDialog.getLinkUrl();
|
||||
await shareDialog.clickShareToggle();
|
||||
|
||||
await confirmDialog.clickRemove();
|
||||
await confirmDialog.waitForDialogToClose();
|
||||
await shareDialog.waitForDialogToClose();
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file4Id)).toBe(false, `${file4} is shared`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file4);
|
||||
|
||||
await page.load();
|
||||
});
|
||||
|
||||
it('Consumer - on Search Results - file shared by other user - [C306998]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(fileSite1);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileSite1);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain(`You don't have permission to unshare this file`);
|
||||
});
|
||||
|
||||
it('Consumer - on Search Results - file shared by the user - [C307000]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(fileSite2);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileSite2);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
await confirmDialog.waitForDialogToClose();
|
||||
await shareDialog.waitForDialogToClose();
|
||||
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(fileSite2Id)).toBe(false, `${fileSite2} is shared`);
|
||||
});
|
||||
|
||||
});
|
@@ -83,7 +83,7 @@ describe('Unshare a file', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
await page.closeOpenDialogs();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(parent);
|
||||
await dataTable.waitForHeader();
|
||||
@@ -91,7 +91,7 @@ describe('Unshare a file', () => {
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.closeOpenDialogs();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -132,10 +132,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2Id)).toBe(false, `${file2} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file2)).toBe(false, `${file2} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file2);
|
||||
@@ -173,10 +169,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file4Id)).toBe(false, `${file4} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file4)).toBe(false, `${file4} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file4);
|
||||
@@ -213,7 +205,7 @@ describe('Unshare a file', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
await page.closeOpenDialogs();
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(siteName);
|
||||
await dataTable.waitForHeader();
|
||||
@@ -223,7 +215,7 @@ describe('Unshare a file', () => {
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.closeOpenDialogs();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -261,10 +253,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2Id)).toBe(false, `${file2} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file2)).toBe(false, `${file2} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file2);
|
||||
@@ -302,10 +290,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file4Id)).toBe(false, `${file4} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file4)).toBe(false, `${file4} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file4);
|
||||
@@ -335,13 +319,13 @@ describe('Unshare a file', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
await page.closeOpenDialogs();
|
||||
await page.clickRecentFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.closeOpenDialogs();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -382,10 +366,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2Id)).toBe(false, `${file2} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file2)).toBe(false, `${file2} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file2);
|
||||
@@ -423,10 +403,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file4Id)).toBe(false, `${file4} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file4)).toBe(false, `${file4} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file4);
|
||||
@@ -456,13 +432,13 @@ describe('Unshare a file', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
await page.closeOpenDialogs();
|
||||
await page.clickSharedFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.closeOpenDialogs();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -582,13 +558,13 @@ describe('Unshare a file', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
await page.closeOpenDialogs();
|
||||
await page.clickFavoritesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.closeOpenDialogs();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -633,10 +609,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2Id)).toBe(false, `${file2} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file2)).toBe(false, `${file2} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file2);
|
||||
@@ -678,10 +650,6 @@ describe('Unshare a file', () => {
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file4Id)).toBe(false, `${file4} is shared`);
|
||||
|
||||
// TODO: disable check cause api is slow to update
|
||||
// await page.clickSharedFiles();
|
||||
// expect(await dataTable.isItemPresent(file4)).toBe(false, `${file4} is in the Shared files list`);
|
||||
|
||||
await browser.get(url);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'viewer is not open');
|
||||
expect(await viewer.getFileTitle()).not.toEqual(file4);
|
||||
@@ -694,25 +662,38 @@ describe('Unshare a file', () => {
|
||||
|
||||
const sitePrivate = `site-private-${Utils.random()}`;
|
||||
|
||||
const file1 = `file1-${Utils.random()}.txt`; let file1Id;
|
||||
const file2 = `file2-${Utils.random()}.txt`; let file2Id;
|
||||
const file1FileLib = `file1-FL-${Utils.random()}.txt`; let file1FileLibId;
|
||||
const file2FileLib = `file2-FL-${Utils.random()}.txt`; let file2FileLibId;
|
||||
const file1Shared = `file1-Shared-${Utils.random()}.txt`; let file1SharedId;
|
||||
const file2Shared = `file2-Shared-${Utils.random()}.txt`; let file2SharedId;
|
||||
const file1Fav = `file1-Fav-${Utils.random()}.txt`; let file1FavId;
|
||||
const file2Fav = `file2-Fav-${Utils.random()}.txt`; let file2FavId;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.sites.createSite(sitePrivate, SITE_VISIBILITY.PRIVATE);
|
||||
const docLibId = await apis.admin.sites.getDocLibId(sitePrivate);
|
||||
|
||||
file1Id = (await apis.admin.nodes.createFile(file1, docLibId)).entry.id;
|
||||
file2Id = (await apis.admin.nodes.createFile(file2, docLibId)).entry.id;
|
||||
file1FileLibId = (await apis.admin.nodes.createFile(file1FileLib, docLibId)).entry.id;
|
||||
file2FileLibId = (await apis.admin.nodes.createFile(file2FileLib, docLibId)).entry.id;
|
||||
file1SharedId = (await apis.admin.nodes.createFile(file1Shared, docLibId)).entry.id;
|
||||
file2SharedId = (await apis.admin.nodes.createFile(file2Shared, docLibId)).entry.id;
|
||||
file1FavId = (await apis.admin.nodes.createFile(file1Fav, docLibId)).entry.id;
|
||||
file2FavId = (await apis.admin.nodes.createFile(file2Fav, docLibId)).entry.id;
|
||||
|
||||
await apis.admin.sites.addSiteMember(sitePrivate, username, SITE_ROLES.SITE_CONSUMER.ROLE);
|
||||
|
||||
await apis.admin.shared.shareFileById(file1Id);
|
||||
await apis.user.shared.shareFileById(file2Id);
|
||||
await apis.user.shared.waitForApi({ expect: 2 });
|
||||
await apis.admin.shared.shareFileById(file1FileLibId);
|
||||
await apis.user.shared.shareFileById(file2FileLibId);
|
||||
await apis.admin.shared.shareFileById(file1SharedId);
|
||||
await apis.user.shared.shareFileById(file2SharedId);
|
||||
await apis.admin.shared.shareFileById(file1FavId);
|
||||
await apis.user.shared.shareFileById(file2FavId);
|
||||
|
||||
await apis.user.favorites.addFavoriteById('file', file1FavId);
|
||||
await apis.user.favorites.addFavoriteById('file', file2FavId);
|
||||
|
||||
await apis.user.favorites.addFavoriteById('file', file1Id);
|
||||
await apis.user.favorites.addFavoriteById('file', file2Id);
|
||||
await apis.user.favorites.waitForApi({ expect: 2 });
|
||||
await apis.user.shared.waitForApi({ expect: 6 });
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -722,13 +703,9 @@ describe('Unshare a file', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.closeOpenDialogs();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -736,62 +713,104 @@ describe('Unshare a file', () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(sitePrivate);
|
||||
await dataTable.waitForHeader();
|
||||
await dataTable.selectItem(file1);
|
||||
await dataTable.selectItem(file1FileLib);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle enabled for consumer');
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain(`You don't have permission to unshare this file`);
|
||||
});
|
||||
|
||||
it('on File Libraries - file shared by the user - [C286701]', async () => {
|
||||
await page.goToMyLibrariesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(sitePrivate);
|
||||
await dataTable.waitForHeader();
|
||||
await dataTable.selectItem(file2);
|
||||
await dataTable.selectItem(file2FileLib);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle enabled for consumer');
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
await confirmDialog.waitForDialogToClose();
|
||||
await shareDialog.waitForDialogToClose();
|
||||
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2FileLibId)).toBe(false, `${file2FileLib} is shared`);
|
||||
});
|
||||
|
||||
it('on Shared Files - file shared by other user - [C286687]', async () => {
|
||||
await page.clickSharedFilesAndWait();
|
||||
await dataTable.selectItem(file1);
|
||||
await dataTable.selectItem(file1Shared);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle enabled for consumer');
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain(`You don't have permission to unshare this file`);
|
||||
});
|
||||
|
||||
it('on Shared Files - file shared by the user - [C286702]', async () => {
|
||||
await page.clickSharedFilesAndWait();
|
||||
await dataTable.selectItem(file1);
|
||||
await dataTable.selectItem(file2Shared);
|
||||
await toolbar.clickSharedLinkSettings();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle enabled for consumer');
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
await confirmDialog.waitForDialogToClose();
|
||||
await shareDialog.waitForDialogToClose();
|
||||
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2SharedId)).toBe(false, `${file2Shared} is shared`);
|
||||
});
|
||||
|
||||
it('on Favorites - file shared by other user - [C286697]', async () => {
|
||||
await page.clickFavoritesAndWait();
|
||||
await dataTable.selectItem(file1);
|
||||
await dataTable.selectItem(file1Fav);
|
||||
// TODO: remove workaround for favorites
|
||||
// await toolbar.clickSharedLinkSettings();
|
||||
await toolbar.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle enabled for consumer');
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
|
||||
const msg = await page.getSnackBarMessage();
|
||||
expect(msg).toContain(`You don't have permission to unshare this file`);
|
||||
});
|
||||
|
||||
it('on Favorites - file shared by the user - [C286703]', async () => {
|
||||
await page.clickFavoritesAndWait();
|
||||
await dataTable.selectItem(file1);
|
||||
await dataTable.selectItem(file2Fav);
|
||||
// TODO: remove workaround for favorites
|
||||
// await toolbar.clickSharedLinkSettings();
|
||||
await toolbar.clickShare();
|
||||
await shareDialog.waitForDialogToOpen();
|
||||
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle enabled for consumer');
|
||||
expect(await shareDialog.isShareToggleDisabled()).toBe(false, 'Share toggle disabled for consumer');
|
||||
|
||||
await shareDialog.clickShareToggle();
|
||||
await confirmDialog.clickRemove();
|
||||
await confirmDialog.waitForDialogToClose();
|
||||
await shareDialog.waitForDialogToClose();
|
||||
|
||||
expect(await shareDialog.isDialogOpen()).toBe(false, 'Share dialog open');
|
||||
expect(await apis.user.nodes.isFileShared(file2FavId)).toBe(false, `${file2Fav} is shared`);
|
||||
});
|
||||
});
|
||||
|
||||
|
@@ -39,10 +39,18 @@ describe('Upload new version', () => {
|
||||
const fileLocked1 = `file-locked1-${Utils.random()}.docx`; let fileLocked1Id;
|
||||
const fileLocked2 = `file-locked2-${Utils.random()}.docx`; let fileLocked2Id;
|
||||
|
||||
const fileSearch1 = `search-file1-${Utils.random()}.docx`; let fileSearch1Id;
|
||||
const fileSearch2 = `search-file2-${Utils.random()}.docx`; let fileSearch2Id;
|
||||
const fileSearch3 = `search-file3-${Utils.random()}.docx`; let fileSearch3Id;
|
||||
const fileSearch4 = `search-file4-${Utils.random()}.docx`; let fileSearch4Id;
|
||||
const fileLockedSearch1 = `search-file-locked1-${Utils.random()}.docx`; let fileLockedSearch1Id;
|
||||
const fileLockedSearch2 = `search-file-locked2-${Utils.random()}.docx`; let fileLockedSearch2Id;
|
||||
|
||||
const parentPF = `parentPersonal-${Utils.random()}`; let parentPFId;
|
||||
const parentSF = `parentShared-${Utils.random()}`; let parentSFId;
|
||||
const parentRF = `parentRecent-${Utils.random()}`; let parentRFId;
|
||||
const parentFav = `parentFav-${Utils.random()}`; let parentFavId;
|
||||
const parentSearch = `parentSearch-${Utils.random()}`; let parentSearchId;
|
||||
|
||||
const file = FILES.pdfFile; let fileId;
|
||||
const fileToUpload1 = FILES.docxFile;
|
||||
@@ -60,6 +68,7 @@ describe('Upload new version', () => {
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable, toolbar } = page;
|
||||
const uploadNewVersionDialog = new UploadNewVersionDialog();
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -68,6 +77,7 @@ describe('Upload new version', () => {
|
||||
parentSFId = (await apis.user.nodes.createFolder(parentSF)).entry.id;
|
||||
parentRFId = (await apis.user.nodes.createFolder(parentRF)).entry.id;
|
||||
parentFavId = (await apis.user.nodes.createFolder(parentFav)).entry.id;
|
||||
parentSearchId = (await apis.user.nodes.createFolder(parentSearch)).entry.id;
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -77,6 +87,7 @@ describe('Upload new version', () => {
|
||||
await apis.user.nodes.deleteNodeById(parentSFId);
|
||||
await apis.user.nodes.deleteNodeById(parentRFId);
|
||||
await apis.user.nodes.deleteNodeById(parentFavId);
|
||||
await apis.user.nodes.deleteNodeById(parentSearchId);
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -669,4 +680,178 @@ describe('Upload new version', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('on Search Results', () => {
|
||||
beforeAll(async (done) => {
|
||||
fileId = (await apis.user.upload.uploadFile(file, parentSearchId)).entry.id;
|
||||
fileSearch1Id = (await apis.user.nodes.createFile(fileSearch1, parentSearchId)).entry.id;
|
||||
fileSearch2Id = (await apis.user.nodes.createFile(fileSearch2, parentSearchId)).entry.id;
|
||||
fileSearch3Id = (await apis.user.nodes.createFile(fileSearch3, parentSearchId)).entry.id;
|
||||
fileSearch4Id = (await apis.user.nodes.createFile(fileSearch4, parentSearchId)).entry.id;
|
||||
|
||||
fileLockedSearch1Id = (await apis.user.nodes.createFile(fileLockedSearch1, parentSearchId)).entry.id;
|
||||
fileLockedSearch2Id = (await apis.user.nodes.createFile(fileLockedSearch2, parentSearchId)).entry.id;
|
||||
|
||||
await apis.user.nodes.lockFile(fileLockedSearch1Id);
|
||||
await apis.user.nodes.lockFile(fileLockedSearch2Id);
|
||||
|
||||
await apis.user.search.waitForNodes('search-f', { expect: 6 })
|
||||
|
||||
await loginPage.loginWith(username);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.header.expandSideNav();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
done();
|
||||
});
|
||||
|
||||
it('dialog UI defaults - [C307003]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(file);
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(file, parentSearch);
|
||||
await toolbar.clickMoreActionsUploadNewVersion();
|
||||
|
||||
await Utils.uploadFileNewVersion(fileToUpload1);
|
||||
await page.waitForDialog();
|
||||
|
||||
expect(await uploadNewVersionDialog.getTitle()).toEqual('Upload New Version');
|
||||
expect(await uploadNewVersionDialog.getText()).toContain('What level of changes were made to this version?');
|
||||
expect(await uploadNewVersionDialog.isDescriptionDisplayed()).toBe(true, 'Description not displayed');
|
||||
expect(await uploadNewVersionDialog.isMinorOptionDisplayed()).toBe(true, 'Minor option not displayed');
|
||||
expect(await uploadNewVersionDialog.isMajorOptionDisplayed()).toBe(true, 'Major option not displayed');
|
||||
expect(await uploadNewVersionDialog.isCancelButtonEnabled()).toBe(true, 'Cancel button not enabled');
|
||||
expect(await uploadNewVersionDialog.isUploadButtonEnabled()).toBe(true, 'Update button not enabled');
|
||||
});
|
||||
|
||||
it('file is updated after uploading a new version - major - [C307004]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileSearch1, parentSearch);
|
||||
await toolbar.clickMoreActionsUploadNewVersion();
|
||||
|
||||
await Utils.uploadFileNewVersion(fileToUpload1);
|
||||
await page.waitForDialog();
|
||||
|
||||
await uploadNewVersionDialog.clickMajor();
|
||||
await uploadNewVersionDialog.enterDescription('new major version description');
|
||||
await uploadNewVersionDialog.clickUpload();
|
||||
|
||||
// TODO: enable when ACA-2329 is fixed
|
||||
// expect(await dataTable.isItemPresent(fileToUpload1, parentSearch)).toBe(true, 'File not updated');
|
||||
expect(await apis.user.nodes.getFileVersionType(fileSearch1Id)).toEqual('MAJOR', 'File has incorrect version type');
|
||||
expect(await apis.user.nodes.getFileVersionLabel(fileSearch1Id)).toEqual('1.0', 'File has incorrect version label');
|
||||
});
|
||||
|
||||
it('file is updated after uploading a new version - minor - [C307005]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileSearch2, parentSearch);
|
||||
await toolbar.clickMoreActionsUploadNewVersion();
|
||||
|
||||
await Utils.uploadFileNewVersion(fileToUpload2);
|
||||
await page.waitForDialog();
|
||||
|
||||
await uploadNewVersionDialog.clickMinor();
|
||||
await uploadNewVersionDialog.enterDescription('new minor version description');
|
||||
await uploadNewVersionDialog.clickUpload();
|
||||
|
||||
// TODO: enable when ACA-2329 is fixed
|
||||
// expect(await dataTable.isItemPresent(fileToUpload2, parentSearch)).toBe(true, 'File not updated');
|
||||
expect(await apis.user.nodes.getFileVersionType(fileSearch2Id)).toEqual('MINOR', 'File has incorrect version type');
|
||||
expect(await apis.user.nodes.getFileVersionLabel(fileSearch2Id)).toEqual('0.1', 'File has incorrect version label');
|
||||
});
|
||||
|
||||
it('file is not updated when clicking Cancel - [C307006]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileSearch3, parentSearch);
|
||||
await toolbar.clickMoreActionsUploadNewVersion();
|
||||
|
||||
await Utils.uploadFileNewVersion(fileToUpload3);
|
||||
await page.waitForDialog();
|
||||
|
||||
await uploadNewVersionDialog.clickMinor();
|
||||
await uploadNewVersionDialog.enterDescription('new version description');
|
||||
await uploadNewVersionDialog.clickCancel();
|
||||
|
||||
expect(await dataTable.isItemPresent(fileSearch3, parentSearch)).toBe(true, 'File was updated');
|
||||
expect(await apis.user.nodes.getFileVersionType(fileSearch3Id)).toEqual('', 'File has incorrect version type');
|
||||
expect(await apis.user.nodes.getFileVersionLabel(fileSearch3Id)).toEqual('', 'File has incorrect version label');
|
||||
});
|
||||
|
||||
it('upload new version fails when new file name already exists - [C307007]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileSearch4, parentSearch);
|
||||
await toolbar.clickMoreActionsUploadNewVersion();
|
||||
|
||||
await Utils.uploadFileNewVersion(file);
|
||||
await page.waitForDialog();
|
||||
|
||||
await uploadNewVersionDialog.clickMinor();
|
||||
await uploadNewVersionDialog.enterDescription('new version description');
|
||||
await uploadNewVersionDialog.clickUpload();
|
||||
|
||||
await page.refresh();
|
||||
|
||||
expect(await dataTable.isItemPresent(fileSearch4, parentSearch)).toBe(true, 'File was updated');
|
||||
expect(await apis.user.nodes.getFileVersionType(fileSearch4Id)).toEqual('', 'File has incorrect version type');
|
||||
expect(await apis.user.nodes.getFileVersionLabel(fileSearch4Id)).toEqual('', 'File has incorrect version label');
|
||||
});
|
||||
|
||||
it('file is unlocked after uploading a new version - [C307008]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileLockedSearch1, parentSearch);
|
||||
await toolbar.clickMoreActionsUploadNewVersion();
|
||||
|
||||
await Utils.uploadFileNewVersion(fileToUpload4);
|
||||
await page.waitForDialog();
|
||||
|
||||
await uploadNewVersionDialog.clickMinor();
|
||||
await uploadNewVersionDialog.enterDescription('new version description');
|
||||
await uploadNewVersionDialog.clickUpload();
|
||||
|
||||
// TODO: enable when ACA-2329 is fixed
|
||||
// expect(await dataTable.isItemPresent(fileToUpload4, parentSearch)).toBe(true, 'File name was not changed');
|
||||
expect(await apis.user.nodes.isFileLockedWrite(fileLockedSearch1Id)).toBe(false, `${fileLockedSearch1} is still locked`);
|
||||
expect(await apis.user.nodes.getFileVersionType(fileLockedSearch1Id)).toEqual('MINOR', 'File has incorrect version type');
|
||||
expect(await apis.user.nodes.getFileVersionLabel(fileLockedSearch1Id)).toEqual('0.1', 'File has incorrect version label');
|
||||
});
|
||||
|
||||
it('file remains locked after canceling of uploading a new version - [C307009]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('search-f');
|
||||
await dataTable.waitForBody();
|
||||
await dataTable.selectItem(fileLockedSearch2, parentSearch);
|
||||
await toolbar.clickMoreActionsUploadNewVersion();
|
||||
|
||||
await Utils.uploadFileNewVersion(fileToUpload5);
|
||||
await page.waitForDialog();
|
||||
|
||||
await uploadNewVersionDialog.clickMinor();
|
||||
await uploadNewVersionDialog.enterDescription('new version description');
|
||||
await uploadNewVersionDialog.clickCancel();
|
||||
|
||||
expect(await dataTable.isItemPresent(fileToUpload5, parentSearch)).toBe(false, 'File was updated');
|
||||
expect(await dataTable.isItemPresent(fileLockedSearch2, parentSearch)).toBe(true, 'File not displayed');
|
||||
expect(await apis.user.nodes.isFileLockedWrite(fileLockedSearch2Id)).toBe(true, `${fileLockedSearch2} was unlocked`);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -180,4 +180,26 @@ describe('Empty list views', () => {
|
||||
expect(await pagination.isPreviousButtonPresent()).toBe(false, 'Previous button is present');
|
||||
expect(await pagination.isNextButtonPresent()).toBe(false, 'Next button is present');
|
||||
});
|
||||
|
||||
it('Empty Search results - Libraries - [C290020]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
/* cspell:disable-next-line */
|
||||
await searchInput.searchFor('qwertyuiop');
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await dataTable.isEmptyList()).toBe(true, 'list is not empty');
|
||||
expect(await dataTable.getEmptySearchResultsText()).toContain('Your search returned 0 results');
|
||||
});
|
||||
|
||||
it('Empty Search results - Files / Folders - [C290031]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
/* cspell:disable-next-line */
|
||||
await searchInput.searchFor('qwertyuiop');
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await dataTable.isEmptyList()).toBe(true, 'list is not empty');
|
||||
expect(await dataTable.getEmptySearchResultsText()).toContain('Your search returned 0 results');
|
||||
});
|
||||
});
|
||||
|
@@ -40,6 +40,7 @@ describe('Special permissions', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const page = new BrowsingPage();
|
||||
const { dataTable } = page;
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -100,6 +101,24 @@ describe('Special permissions', () => {
|
||||
await page.refresh();
|
||||
expect(await dataTable.isEmptyList()).toBe(true, 'Items are still displayed');
|
||||
});
|
||||
|
||||
it('on Search Results - [C290122]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(fileName);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await dataTable.isItemPresent(fileName)).toBe(true, `${fileName} is not displayed`);
|
||||
|
||||
await apis.admin.sites.deleteSiteMember(sitePrivate, username);
|
||||
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(fileName);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await dataTable.isItemPresent(fileName)).toBe(false, `${fileName} is displayed`);
|
||||
});
|
||||
});
|
||||
|
||||
describe(`Location column is empty if user doesn't have permissions on the file's parent folder`, () => {
|
||||
@@ -143,5 +162,15 @@ describe('Special permissions', () => {
|
||||
expect(await dataTable.countRows()).toBe(1, 'Incorrect number of items');
|
||||
expect(await dataTable.getItemLocation(fileName)).toEqual('Unknown');
|
||||
});
|
||||
|
||||
it('on Search results - [C306868]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(fileName);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await dataTable.isItemPresent(fileName)).toBe(true, `${fileName} is not displayed`);
|
||||
expect(await dataTable.getItemLocation(fileName)).toEqual('Unknown');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -209,7 +209,7 @@ describe('Sidebar', () => {
|
||||
it('sidebar is collapsed automatically when Search Results opens - [C277223]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
/* cspell:disable-next-line */
|
||||
await searchInput.searchForTextAndCloseSearchOptions('qwertyuiop');
|
||||
await searchInput.searchFor('qwertyuiop');
|
||||
await searchResultsPage.waitForResults();
|
||||
|
||||
expect(await header.isExpandedSidenav()).toBe(false, 'Sidebar not collapsed');
|
||||
@@ -218,7 +218,7 @@ describe('Sidebar', () => {
|
||||
it('sidenav returns to the default state when navigating away from the Search Results page - [C277224]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
/* cspell:disable-next-line */
|
||||
await searchInput.searchForTextAndCloseSearchOptions('qwertyuiop');
|
||||
await searchInput.searchFor('qwertyuiop');
|
||||
await searchResultsPage.waitForResults();
|
||||
await page.clickFavorites();
|
||||
|
||||
@@ -228,7 +228,7 @@ describe('Sidebar', () => {
|
||||
it('sidenav can be expanded when search results page is displayed - [C277230]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
/* cspell:disable-next-line */
|
||||
await searchInput.searchForTextAndCloseSearchOptions('qwertyuiop');
|
||||
await searchInput.searchFor('qwertyuiop');
|
||||
await searchResultsPage.waitForResults();
|
||||
await header.expandSideNav();
|
||||
|
||||
|
158
e2e/suites/search/search-results-files-folders.test.ts
Normal file
158
e2e/suites/search/search-results-files-folders.test.ts
Normal file
@@ -0,0 +1,158 @@
|
||||
/*!
|
||||
* @license
|
||||
* Alfresco Example Content Application
|
||||
*
|
||||
* Copyright (C) 2005 - 2019 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 { LoginPage, SearchResultsPage } from '../../pages/pages';
|
||||
import { RepoClient } from '../../utilities/repo-client/repo-client';
|
||||
import { Utils } from '../../utilities/utils';
|
||||
import * as moment from 'moment';
|
||||
|
||||
describe('Search results - files and folders', () => {
|
||||
const username = `user-${Utils.random()}`;
|
||||
|
||||
const file = `test-file-${Utils.random()}.txt`; let fileId;
|
||||
const fileTitle = 'file title';
|
||||
const fileDescription = 'file description';
|
||||
|
||||
/* cspell:disable-next-line */
|
||||
const fileRussian = `любимый-сайт-${Utils.random()}`; let fileRussianId;
|
||||
|
||||
const folder = `test-folder-${Utils.random()}`; let folderId;
|
||||
const folderTitle = 'folder title';
|
||||
const folderDescription = 'folder description';
|
||||
|
||||
const site = `test-site-${Utils.random()}`;
|
||||
|
||||
const apis = {
|
||||
admin: new RepoClient(),
|
||||
user: new RepoClient(username, username)
|
||||
};
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const page = new SearchResultsPage();
|
||||
const { searchInput } = page.header;
|
||||
const { dataTable, breadcrumb } = page;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
|
||||
fileId = (await apis.user.nodes.createFile(file, '-my-', fileTitle, fileDescription)).entry.id;
|
||||
await apis.user.nodes.editNodeContent(fileId, 'edited by user');
|
||||
folderId = (await apis.user.nodes.createFolder(folder, '-my-', folderTitle, folderDescription)).entry.id;
|
||||
fileRussianId = (await apis.user.nodes.createFile(fileRussian)).entry.id;
|
||||
await apis.user.sites.createSite(site);
|
||||
|
||||
await apis.user.search.waitForApi(username, { expect: 2 });
|
||||
await apis.user.queries.waitForSites(site, { expect: 1 });
|
||||
|
||||
await loginPage.loginWith(username);
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await Promise.all([
|
||||
apis.user.nodes.deleteNodeById(fileId),
|
||||
apis.user.nodes.deleteNodeById(fileRussianId),
|
||||
apis.user.nodes.deleteNodeById(folderId),
|
||||
apis.user.sites.deleteSite(site)
|
||||
]);
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.refresh();
|
||||
done();
|
||||
});
|
||||
|
||||
it('Results page title - [C307002]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('test-');
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await page.breadcrumb.getCurrentItemName()).toEqual('Search Results');
|
||||
});
|
||||
|
||||
it('File information - [C279183]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('test-');
|
||||
await dataTable.waitForBody();
|
||||
|
||||
const fileEntry = await apis.user.nodes.getNodeById(fileId);
|
||||
const modifiedDate = moment(fileEntry.entry.modifiedAt).format("MMM D, YYYY, h:mm:ss A");
|
||||
const modifiedBy = fileEntry.entry.modifiedByUser.displayName;
|
||||
const size = fileEntry.entry.content.sizeInBytes;
|
||||
|
||||
expect(await dataTable.isItemPresent(file)).toBe(true, `${file} is not displayed`);
|
||||
|
||||
expect(await dataTable.getRowCellsCount(file)).toEqual(2, 'incorrect number of columns');
|
||||
|
||||
expect(await dataTable.getSearchResultLinesCount(file)).toEqual(4, 'incorrect number of lines for search result');
|
||||
expect(await dataTable.getSearchResultNameAndTitle(file)).toBe(`${file} ( ${fileTitle} )`);
|
||||
expect(await dataTable.getSearchResultDescription(file)).toBe(fileDescription);
|
||||
expect(await dataTable.getSearchResultModified(file)).toBe(`Modified: ${modifiedDate} by ${modifiedBy} | Size: ${size} Bytes`);
|
||||
expect(await dataTable.getSearchResultLocation(file)).toBe('Location: Personal Files');
|
||||
});
|
||||
|
||||
it('Folder information - [C306867]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor('test-');
|
||||
await dataTable.waitForBody();
|
||||
|
||||
const folderEntry = await apis.user.nodes.getNodeById(folderId);
|
||||
const modifiedDate = moment(folderEntry.entry.modifiedAt).format("MMM D, YYYY, h:mm:ss A");
|
||||
const modifiedBy = folderEntry.entry.modifiedByUser.displayName;
|
||||
|
||||
expect(await dataTable.isItemPresent(folder)).toBe(true, `${folder} is not displayed`);
|
||||
|
||||
expect(await dataTable.getRowCellsCount(folder)).toEqual(2, 'incorrect number of columns');
|
||||
|
||||
expect(await dataTable.getSearchResultLinesCount(folder)).toEqual(4, 'incorrect number of lines for search result');
|
||||
expect(await dataTable.getSearchResultNameAndTitle(folder)).toBe(`${folder} ( ${folderTitle} )`);
|
||||
expect(await dataTable.getSearchResultDescription(folder)).toBe(folderDescription);
|
||||
expect(await dataTable.getSearchResultModified(folder)).toBe(`Modified: ${modifiedDate} by ${modifiedBy}`);
|
||||
expect(await dataTable.getSearchResultLocation(folder)).toBe('Location: Personal Files');
|
||||
});
|
||||
|
||||
it('Search file with special characters - [C290029]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(fileRussian);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
expect(await dataTable.isItemPresent(fileRussian)).toBe(true, `${fileRussian} is not displayed`);
|
||||
});
|
||||
|
||||
it('Location column redirect - file in user Home - [C279177]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(file);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.clickItemLocation(file);
|
||||
expect(await breadcrumb.getAllItems()).toEqual([ 'Personal Files' ]);
|
||||
});
|
||||
});
|
@@ -26,8 +26,9 @@
|
||||
import { LoginPage, SearchResultsPage } from '../../pages/pages';
|
||||
import { RepoClient } from '../../utilities/repo-client/repo-client';
|
||||
import { Utils } from '../../utilities/utils';
|
||||
import { browser } from 'protractor';
|
||||
|
||||
describe('Search results', () => {
|
||||
describe('Search results general', () => {
|
||||
const username = `user-${Utils.random()}`;
|
||||
|
||||
const file = `test-file-${Utils.random()}.txt`; let fileId;
|
||||
@@ -116,4 +117,36 @@ describe('Search results', () => {
|
||||
expect(await dataTable.isItemPresent(site)).toBe(true, `${site} not displayed`);
|
||||
});
|
||||
|
||||
it('Results are updated automatically when changing the search term - [C279162]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.searchFor(file);
|
||||
await page.waitForResults();
|
||||
|
||||
expect(await dataTable.isItemPresent(file)).toBe(true, `${file} is not displayed`);
|
||||
expect(await dataTable.isItemPresent(folder)).toBe(false, `${folder} is displayed`);
|
||||
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.searchFor(folder);
|
||||
|
||||
expect(await dataTable.isItemPresent(file)).toBe(false, `${file} is displayed`);
|
||||
expect(await dataTable.isItemPresent(folder)).toBe(true, `${folder} is not displayed`);
|
||||
});
|
||||
|
||||
it('Results are returned when accessing an URL containing a search query - [C279178]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkLibraries();
|
||||
await searchInput.searchFor(site);
|
||||
await page.waitForResults();
|
||||
|
||||
expect(await dataTable.isItemPresent(site)).toBe(true, `${site} not displayed`);
|
||||
|
||||
const url = await browser.getCurrentUrl();
|
||||
|
||||
await page.clickPersonalFiles();
|
||||
await browser.get(url);
|
||||
await page.waitForResults();
|
||||
|
||||
expect(await dataTable.isItemPresent(site)).toBe(true, `${site} not displayed`);
|
||||
});
|
||||
|
||||
});
|
@@ -49,8 +49,9 @@ describe('Viewer general', () => {
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const page = new BrowsingPage();
|
||||
const dataTable = page.dataTable;
|
||||
const { dataTable } = page;
|
||||
const viewer = new Viewer();
|
||||
const { searchInput } = page.header;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await apis.admin.people.createUser({ username });
|
||||
@@ -75,6 +76,7 @@ describe('Viewer general', () => {
|
||||
});
|
||||
|
||||
beforeEach(async (done) => {
|
||||
await page.header.expandSideNav();
|
||||
await page.clickPersonalFilesAndWait();
|
||||
await dataTable.doubleClickOnRowByName(parent);
|
||||
await dataTable.waitForHeader();
|
||||
@@ -83,6 +85,7 @@ describe('Viewer general', () => {
|
||||
|
||||
afterEach(async (done) => {
|
||||
await Utils.pressEscape();
|
||||
await page.header.expandSideNav();
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -175,4 +178,17 @@ describe('Viewer general', () => {
|
||||
expect(await viewer.isFileTitleDisplayed()).toBe(true, 'File title is not displayed');
|
||||
});
|
||||
|
||||
it('Viewer opens for a file from Search Results - [C279175]', async () => {
|
||||
await searchInput.clickSearchButton();
|
||||
await searchInput.checkFilesAndFolders();
|
||||
await searchInput.searchFor(xlsxFile);
|
||||
await dataTable.waitForBody();
|
||||
|
||||
await dataTable.doubleClickOnRowByName(xlsxFile);
|
||||
expect(await viewer.isViewerOpened()).toBe(true, 'Viewer is not opened');
|
||||
expect(await viewer.isViewerToolbarDisplayed()).toBe(true, 'Toolbar not displayed');
|
||||
expect(await viewer.isCloseButtonDisplayed()).toBe(true, 'Close button is not displayed');
|
||||
expect(await viewer.isFileTitleDisplayed()).toBe(true, 'File title is not displayed');
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -150,7 +150,7 @@ export class NodesApi extends RepoApi {
|
||||
}
|
||||
|
||||
await this.apiAuth();
|
||||
return await this.nodesApi.createNode(parentId, nodeBody, { majorVersion: true });
|
||||
return await this.nodesApi.createNode(parentId, nodeBody, { majorVersion });
|
||||
}
|
||||
|
||||
async createFile(name: string, parentId: string = '-my-', title: string = '', description: string = '', majorVersion: boolean = true) {
|
||||
|
Reference in New Issue
Block a user