mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
[ADF-3442] create library dialog (#4018)
* library dialog * integrate with demo shell * update resources * fix license * auto focus for the first input * update e2e tests * try close the dialog between tests * fix afterEach * Revert "try close the dialog between tests" This reverts commit 63464f2b03c226c606d09b18c7d2782e3bb52c0a. * update code due to css lint issues * csslint settings for vs code * missing import lint fix remove not used import convert errorPage js to ts convert tasklistpage js to ts fix redirection creation folder in root fix lint issue fix e2e * e2e fix * fix PS tests * navigation import * fix tests tooltip convert paginapage to ts * fix lint * fix lock files e2e filterspage to ts * fix lint * fix cs cre git dept 3 and not 50 as default in travis * quiet log git download * add some delay and change the delete lock * fix node entry * convert searchDialog to typescript parallel protractor * disable browser execute * restote test * change search tests * move search in a separate e2e folder * experiment fix e2e * change util presence change protractor conf * fix unshare test * improve query viewerPage using css over xpath * waitForAngularEnabled before browser redirect * convert util to ts and more * convert other files to ts * convert to ts other files * trigger build * function fixes use arrow function * process service fixes * lint fix review timeout default * fix failing tests * restore timeout * share dialog fix * remove * use configuration admin * fix APS 2 login sso
This commit is contained in:
committed by
Eugenio Romano
parent
9fd564a78e
commit
058d23d57f
@@ -0,0 +1,367 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { LoginPage } from '../../pages/adf/loginPage';
|
||||
import { SearchFiltersPage } from '../../pages/adf/searchFiltersPage';
|
||||
import { ContentListPage } from '../../pages/adf/dialog/contentListPage';
|
||||
import { ConfigEditorPage } from '../../pages/adf/configEditorPage';
|
||||
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
|
||||
import { SearchDialog } from '../../pages/adf/dialog/searchDialog';
|
||||
|
||||
import { AcsUserModel } from '../../models/ACS/acsUserModel';
|
||||
|
||||
import TestConfig = require('../../test.config');
|
||||
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../../actions/ACS/upload.actions';
|
||||
import { browser } from 'protractor';
|
||||
|
||||
describe('Search Radio Component', () => {
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
const contentList = new ContentListPage();
|
||||
const configEditorPage = new ConfigEditorPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const searchDialog = new SearchDialog();
|
||||
|
||||
let acsUser = new AcsUserModel();
|
||||
let uploadActions = new UploadActions();
|
||||
|
||||
let filterType = {
|
||||
folder: 'Folder',
|
||||
document: 'Document',
|
||||
custom: 'TEST_NAME'
|
||||
};
|
||||
|
||||
let nodeNames = {
|
||||
document: 'this_is_a_unique_name.txt',
|
||||
folder: 'this_is_a_unique_name'
|
||||
};
|
||||
|
||||
let createdFile, createdFolder;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
createdFolder = await this.alfrescoJsApi.nodes.addNode('-my-', {name: nodeNames.folder, nodeType: 'cm:folder'});
|
||||
createdFile = await this.alfrescoJsApi.nodes.addNode('-my-', {name: nodeNames.document, nodeType: 'cm:content'});
|
||||
|
||||
await browser.driver.sleep(15000);
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
browser.get(TestConfig.adf.url + '/search;q=' + nodeNames.folder + '');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, createdFile.entry.id);
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, createdFolder.entry.id);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C276991] Should be able to click between options and Clear All button', () => {
|
||||
searchFiltersPage.checkCheckListFilterIsDisplayed();
|
||||
searchFiltersPage.checkCheckListFilterIsCollapsed();
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document);
|
||||
searchFiltersPage.checkListFiltersPage().checkClearAllButtonIsDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.document);
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickClearAllButton();
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
});
|
||||
|
||||
describe('configuration change', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C277143] Should be able to click show more/less button with pageSize set as default', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 8; numberOfOptions++) {
|
||||
jsonFile.categories[1].component.settings.options.push({ 'name': 'Folder', 'value': "TYPE:'cm:folder'" });
|
||||
}
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickShowLessButton();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
browser.refresh();
|
||||
});
|
||||
|
||||
it('[C277144] Should be able to click show more/less button with pageSize set with a custom value', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[1].component.settings.pageSize = 10;
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 8; numberOfOptions++) {
|
||||
jsonFile.categories[1].component.settings.options.push({ 'name': 'Folder', 'value': "TYPE:'cm:folder'" });
|
||||
}
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
|
||||
browser.refresh();
|
||||
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[1].component.settings.pageSize = 11;
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
|
||||
browser.refresh();
|
||||
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[1].component.settings.pageSize = 9;
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(9);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
|
||||
browser.refresh();
|
||||
});
|
||||
|
||||
it('[C277145] Should be able to click show more/less button with pageSize set to zero', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[1].component.settings.pageSize = 0;
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 8; numberOfOptions++) {
|
||||
jsonFile.categories[1].component.settings.options.push({ 'name': 'Folder', 'value': "TYPE:'cm:folder'" });
|
||||
}
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
browser.refresh();
|
||||
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
delete jsonFile.categories[1].component.settings.pageSize;
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Properties', () => {
|
||||
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
beforeAll(async (done) => {
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C277018] Should be able to change the operator', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[1].component.settings.operator = 'AND';
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document);
|
||||
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
browser.refresh();
|
||||
});
|
||||
|
||||
it('[C277019] Should be able to add new properties with different types', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[1].component.settings.options.push({ 'name': filterType.custom, 'value': "TYPE:'cm:auditable'" });
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document);
|
||||
searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.custom);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.custom);
|
||||
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document);
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,232 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { LoginPage } from '../../pages/adf/loginPage';
|
||||
import { SearchDialog } from '../../pages/adf/dialog/searchDialog';
|
||||
import { DataTablePage } from '../../pages/adf/dataTablePage';
|
||||
import { SearchResultsPage } from '../../pages/adf/searchResultsPage';
|
||||
import { DatePickerPage } from '../../pages/adf/material/datePickerPage';
|
||||
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
|
||||
import { ConfigEditorPage } from '../../pages/adf/configEditorPage';
|
||||
import { SearchFiltersPage } from '../../pages/adf/searchFiltersPage';
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
|
||||
import TestConfig = require('../../test.config');
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { browser } from 'protractor';
|
||||
|
||||
describe('Search Date Range Filter', () => {
|
||||
|
||||
let loginPage = new LoginPage();
|
||||
let searchDialog = new SearchDialog();
|
||||
let searchFilters = new SearchFiltersPage();
|
||||
let dateRangeFilter = searchFilters.createdDateRangeFilterPage();
|
||||
let searchResults = new SearchResultsPage();
|
||||
let datePicker = new DatePickerPage();
|
||||
let navigationBar = new NavigationBarPage();
|
||||
let configEditor = new ConfigEditorPage();
|
||||
let dataTable = new DataTablePage();
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
loginPage.loginToContentServices(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
searchFilters.checkCreatedRangeFilterIsDisplayed()
|
||||
.clickCreatedRangeFilterHeader()
|
||||
.checkCreatedRangeFilterIsExpanded();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await browser.refresh();
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C277106] Should display default values for Date Range widget', () => {
|
||||
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||
.checkFromDateToggleIsDisplayed()
|
||||
.checkToFieldIsDisplayed()
|
||||
.checkToDateToggleIsDisplayed()
|
||||
.checkApplyButtonIsDisplayed()
|
||||
.checkApplyButtonIsDisabled()
|
||||
.checkClearButtonIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C277104] Should be able to set dates using date pickers', () => {
|
||||
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||
.selectTodayDate();
|
||||
browser.controlFlow().execute(async () => {
|
||||
await expect(dateRangeFilter.getFromDate()).toEqual(dateRangeFilter.getFromCalendarSelectedDate());
|
||||
});
|
||||
});
|
||||
|
||||
it('[C277105] Should be able to type a date', () => {
|
||||
let date = '01-May-18';
|
||||
dateRangeFilter.putFromDate(date);
|
||||
browser.controlFlow().execute(async () => {
|
||||
await expect(dateRangeFilter.getFromCalendarSelectedDate()).toEqual(dateRangeFilter.getFromDate());
|
||||
});
|
||||
});
|
||||
|
||||
it('[C277119] FROM and TO dates should depend on each other', () => {
|
||||
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||
.checkDatesAfterDateAreDisabled(new Date())
|
||||
.closeDatePicker();
|
||||
|
||||
dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker()
|
||||
.checkDatesAfterDateAreDisabled(new Date())
|
||||
.closeDatePicker();
|
||||
|
||||
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||
.selectTodayDate()
|
||||
.checkDatePickerIsNotDisplayed();
|
||||
|
||||
dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker()
|
||||
.checkDatesBeforeDateAreDisabled(new Date())
|
||||
.checkDatesAfterDateAreDisabled(new Date());
|
||||
});
|
||||
|
||||
it('[C277107] Should be able to apply a date range', () => {
|
||||
let fromDate, toDate;
|
||||
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||
.selectTodayDate()
|
||||
.checkDatePickerIsNotDisplayed();
|
||||
dateRangeFilter.getFromDate().then((date) => {
|
||||
fromDate = datePicker.convertDefaultFormatToDate(date);
|
||||
});
|
||||
|
||||
dateRangeFilter.checkApplyButtonIsDisabled();
|
||||
|
||||
dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker()
|
||||
.selectTodayDate()
|
||||
.checkDatePickerIsNotDisplayed();
|
||||
dateRangeFilter.getToDate().then((date) => {
|
||||
toDate = datePicker.convertDefaultFormatToDate(date);
|
||||
});
|
||||
|
||||
dateRangeFilter.checkApplyButtonIsEnabled()
|
||||
.clickApplyButton();
|
||||
|
||||
searchResults.sortByCreated(true);
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
let nodeCreation = new Date(node.entry.createdAt);
|
||||
nodeCreation.setHours(0, 0, 0, 0);
|
||||
await expect(nodeCreation.getTime() >= fromDate.getTime()).toBe(true);
|
||||
await expect(nodeCreation.getTime() <= toDate.getTime()).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
searchResults.sortByCreated(false);
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
let nodeCreation = new Date(node.entry.createdAt);
|
||||
nodeCreation.setHours(0, 0, 0, 0);
|
||||
await expect(nodeCreation.getTime() >= fromDate.getTime()).toBe(true);
|
||||
await expect(nodeCreation.getTime() <= toDate.getTime()).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => {
|
||||
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||
.clickFromField()
|
||||
.clickToField()
|
||||
.checkFromErrorMessageIsDisplayed('Required value')
|
||||
.clickFromField()
|
||||
.checkToErrorMessageIsDisplayed('Required value');
|
||||
});
|
||||
|
||||
it('[C277114] Should display warning message if user doesn\'t set the date range properly', () => {
|
||||
let toDate = '01-May-18';
|
||||
let fromDate = '16-May-18';
|
||||
|
||||
dateRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToDate(toDate)
|
||||
.checkFromFieldIsDisplayed()
|
||||
.putFromDate(fromDate)
|
||||
.clickFromField()
|
||||
.checkToErrorMessageIsDisplayed('No days selected.');
|
||||
});
|
||||
|
||||
it('[C277115] Should display warning message if user types a date later than today\'s date', () => {
|
||||
let tomorrowDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
|
||||
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromDate(datePicker.convertDateToDefaultFormat(tomorrowDate))
|
||||
.checkFromErrorMessageIsDisplayed('The date is beyond the maximum date.');
|
||||
});
|
||||
|
||||
it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => {
|
||||
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromDate('Wrong Format')
|
||||
.clickToField()
|
||||
.checkFromErrorMessageIsDisplayed('Invalid date. The date must be in the format \'DD-MMM-YY\'')
|
||||
.putFromDate('01-May-18')
|
||||
.checkFromErrorMessageIsNotDisplayed();
|
||||
});
|
||||
|
||||
describe('configuration change', () => {
|
||||
|
||||
let jsonFile;
|
||||
|
||||
beforeAll(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C277117] Should be able to change date format', () => {
|
||||
jsonFile.categories[4].component.settings.dateFormat = 'MM-DD-YY';
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterConfiguration(JSON.stringify(jsonFile));
|
||||
configEditor.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().enterTextAndPressEnter('*');
|
||||
searchFilters.checkCreatedRangeFilterIsDisplayed()
|
||||
.clickCreatedRangeFilterHeader()
|
||||
.checkCreatedRangeFilterIsExpanded();
|
||||
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||
.openFromDatePicker();
|
||||
|
||||
let todayDate = datePicker.convertDateToNewFormat(new Date());
|
||||
datePicker.selectTodayDate();
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
await expect(dateRangeFilter.getFromDate()).toEqual(todayDate);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,519 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { LoginPage } from '../../pages/adf/loginPage';
|
||||
import { SearchDialog } from '../../pages/adf/dialog/searchDialog';
|
||||
import { DataTablePage } from '../../pages/adf/dataTablePage';
|
||||
import { SearchResultsPage } from '../../pages/adf/searchResultsPage';
|
||||
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
|
||||
import { ConfigEditorPage } from '../../pages/adf/configEditorPage';
|
||||
import { SearchFiltersPage } from '../../pages/adf/searchFiltersPage';
|
||||
|
||||
import TestConfig = require('../../test.config');
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../../actions/ACS/upload.actions';
|
||||
import { AcsUserModel } from '../../models/ACS/acsUserModel';
|
||||
import { FileModel } from '../../models/ACS/fileModel';
|
||||
import { browser } from 'protractor';
|
||||
import resources = require('../../util/resources');
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
|
||||
describe('Search Number Range Filter', () => {
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const searchDialog = new SearchDialog();
|
||||
const searchFilters = new SearchFiltersPage();
|
||||
const sizeRangeFilter = searchFilters.sizeRangeFilterPage();
|
||||
const searchResults = new SearchResultsPage();
|
||||
const navigationBar = new NavigationBarPage();
|
||||
const configEditor = new ConfigEditorPage();
|
||||
const dataTable = new DataTablePage();
|
||||
|
||||
const acsUser = new AcsUserModel();
|
||||
|
||||
const file2BytesModel = new FileModel({
|
||||
'name': resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_name,
|
||||
'location': resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_location
|
||||
});
|
||||
|
||||
const file0BytesModel = new FileModel({
|
||||
'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name,
|
||||
'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location
|
||||
});
|
||||
|
||||
let file2Bytes, file0Bytes;
|
||||
const uploadActions = new UploadActions();
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
file2Bytes = await uploadActions.uploadFile(this.alfrescoJsApi, file2BytesModel.location, file2BytesModel.name, '-my-');
|
||||
file0Bytes = await uploadActions.uploadFile(this.alfrescoJsApi, file0BytesModel.location, file0BytesModel.name, '-my-');
|
||||
await browser.driver.sleep(15000);
|
||||
|
||||
loginPage.loginToContentServices(acsUser.id, acsUser.password);
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, file2Bytes.entry.id);
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, file0Bytes.entry.id);
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
searchFilters.checkSizeRangeFilterIsDisplayed()
|
||||
.clickSizeRangeFilterHeader()
|
||||
.checkSizeRangeFilterIsExpanded();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await browser.refresh();
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C276921] Should display default values for Number Range widget', () => {
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed()
|
||||
.checkToFieldIsDisplayed()
|
||||
.checkApplyButtonIsDisplayed()
|
||||
.checkClearButtonIsDisplayed();
|
||||
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
});
|
||||
|
||||
it('[C276922] Should be keep value when Number Range widget is collapsed', () => {
|
||||
let size = 5;
|
||||
sizeRangeFilter.putFromNumber(size);
|
||||
sizeRangeFilter.putToNumber(size);
|
||||
searchFilters.clickSizeRangeFilterHeader()
|
||||
.checkSizeRangeFilterIsCollapsed()
|
||||
.clickSizeRangeFilterHeader()
|
||||
.checkSizeRangeFilterIsExpanded();
|
||||
expect(sizeRangeFilter.getFromNumber()).toEqual(`${size}`);
|
||||
expect(sizeRangeFilter.getToNumber()).toEqual(`${size}`);
|
||||
});
|
||||
|
||||
it('[C276924] Should display error message when input had an invalid format', () => {
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromNumber('a').putToNumber('A')
|
||||
.checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed();
|
||||
|
||||
expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
sizeRangeFilter.putFromNumber('@').putToNumber('£')
|
||||
.checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed();
|
||||
expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
sizeRangeFilter.putFromNumber('4.5').putToNumber('4,5')
|
||||
.checkFromErrorInvalidIsDisplayed().checkToErrorInvalidIsDisplayed();
|
||||
expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
sizeRangeFilter.putFromNumber('01').putToNumber('-1');
|
||||
expect(sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
sizeRangeFilter.clearFromField().clearToField()
|
||||
.checkFromErrorRequiredIsDisplayed().checkToErrorRequiredIsDisplayed();
|
||||
expect(sizeRangeFilter.getFromErrorRequired()).toEqual('Required value');
|
||||
expect(sizeRangeFilter.getToErrorRequired()).toEqual('Required value');
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
});
|
||||
|
||||
it('[C276943] Should be able to put a big value in To field', () => {
|
||||
let toSize = 999999999;
|
||||
let fromSize = 0;
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(toSize)
|
||||
.putFromNumber(fromSize);
|
||||
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.sortBySize(false);
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes <= toSize).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('[C276944] Should be able to filter by name when size range filter is applied', () => {
|
||||
let nameFilter = searchFilters.textFiltersPage();
|
||||
let toSize = 40;
|
||||
let fromSize = 0;
|
||||
searchFilters.checkNameFilterIsDisplayed()
|
||||
.checkNameFilterIsExpanded();
|
||||
nameFilter.searchByName('*');
|
||||
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromNumber(fromSize)
|
||||
.putToNumber(toSize);
|
||||
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.sortBySize(false);
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes <= toSize).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
searchFilters.checkNameFilterIsDisplayed()
|
||||
.checkNameFilterIsExpanded();
|
||||
nameFilter.searchByName('z*');
|
||||
searchResults.sortBySize(false);
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes <= toSize).toBe(true);
|
||||
let name = node.entry.name;
|
||||
await expect(/z*/i.test(name)).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('[C276950] Should be able to filter by size (slider) when size range filter is applied', () => {
|
||||
let sizeSliderFilter = searchFilters.sizeSliderFilterPage();
|
||||
let toSize = 20;
|
||||
let sliderSize = 18;
|
||||
|
||||
searchFilters.checkSizeSliderFilterIsDisplayed()
|
||||
.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsExpanded();
|
||||
sizeSliderFilter.checkSliderIsDisplayed().setValue(sliderSize);
|
||||
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromNumber(0)
|
||||
.putToNumber(toSize);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.sortBySize(false);
|
||||
searchResults.tableIsLoaded();
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes <= sliderSize).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromNumber(1);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.sortBySize(true);
|
||||
searchResults.tableIsLoaded();
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes >= 1).toBe(true);
|
||||
await expect(node.entry.content.sizeInBytes <= sliderSize).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromNumber(19);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C276951] Should not display folders when Size range is applied', () => {
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(99999999)
|
||||
.putFromNumber(0);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.tableIsLoaded();
|
||||
searchFilters.checkCheckListFilterIsDisplayed();
|
||||
searchFilters.clickCheckListFilter();
|
||||
searchFilters.checkCheckListFilterIsExpanded();
|
||||
|
||||
searchFilters.checkListFiltersPage()
|
||||
.clickCheckListOption('Folder');
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C276952] Should only display empty files when size range is set from 0 to 1', () => {
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(1)
|
||||
.putFromNumber(0);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.sortBySize(false);
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes).toEqual(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('[C277092] Should disable apply button when from field value equal/is bigger than to field value', () => {
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed()
|
||||
.putFromNumber(10);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
sizeRangeFilter.putToNumber('5');
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
sizeRangeFilter.putToNumber('10');
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
});
|
||||
|
||||
it('[C289930] Should be able to clear values in number range fields', () => {
|
||||
sizeRangeFilter.checkFromFieldIsDisplayed().checkClearButtonIsDisplayed().checkNoErrorMessageIsDisplayed()
|
||||
.clickClearButton().checkNoErrorMessageIsDisplayed()
|
||||
.putFromNumber(0).putToNumber(1).clickClearButton();
|
||||
|
||||
expect(sizeRangeFilter.getFromNumber()).toEqual('');
|
||||
expect(sizeRangeFilter.getToNumber()).toEqual('');
|
||||
|
||||
sizeRangeFilter.putFromNumber(0).putToNumber(1).clickApplyButton();
|
||||
searchResults.sortBySize(false);
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes <= 1).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
sizeRangeFilter.clickClearButton();
|
||||
|
||||
expect(sizeRangeFilter.getFromNumber()).toEqual('');
|
||||
expect(sizeRangeFilter.getToNumber()).toEqual('');
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes >= 1).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('[C277137] Number Range should be inclusive', () => {
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(2)
|
||||
.putFromNumber(1);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(1)
|
||||
.putFromNumber(0);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(3)
|
||||
.putFromNumber(2);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(4)
|
||||
.putFromNumber(3);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
});
|
||||
|
||||
describe('Configuration change', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C276928] Should be able to change the field property for number range', () => {
|
||||
jsonFile.categories[3].component.settings.field = 'cm:created';
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterBigConfigurationText(JSON.stringify(jsonFile)).clickSaveButton();
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchFilters.checkSizeRangeFilterIsDisplayed()
|
||||
.clickSizeRangeFilterHeader()
|
||||
.checkSizeRangeFilterIsExpanded();
|
||||
|
||||
let fromYear = (new Date()).getFullYear();
|
||||
let toYear = fromYear + 1;
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(toYear)
|
||||
.putFromNumber(fromYear);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.sortByCreated(false);
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect((node.entry.createdAt.getFullYear()) <= toYear).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
searchResults.sortByCreated(true);
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect((node.entry.createdAt.getFullYear()) >= fromYear).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('[C277139] Should be able to set To field to be exclusive', () => {
|
||||
jsonFile.categories[3].component.settings.format = '[{FROM} TO {TO}>';
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterBigConfigurationText(JSON.stringify(jsonFile)).clickSaveButton();
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchFilters.checkSizeRangeFilterIsDisplayed()
|
||||
.clickSizeRangeFilterHeader()
|
||||
.checkSizeRangeFilterIsExpanded();
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(2)
|
||||
.putFromNumber(1);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(3)
|
||||
.putFromNumber(1);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
});
|
||||
|
||||
it('[C277140] Should be able to set From field to be exclusive', () => {
|
||||
jsonFile.categories[3].component.settings.format = '<{FROM} TO {TO}]';
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterBigConfigurationText(JSON.stringify(jsonFile)).clickSaveButton();
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchFilters.checkSizeRangeFilterIsDisplayed()
|
||||
.clickSizeRangeFilterHeader()
|
||||
.checkSizeRangeFilterIsExpanded();
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(3)
|
||||
.putFromNumber(1);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
|
||||
sizeRangeFilter.checkToFieldIsDisplayed()
|
||||
.putToNumber(3)
|
||||
.putFromNumber(2);
|
||||
expect(sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
sizeRangeFilter.clickApplyButton();
|
||||
|
||||
searchResults.tableIsLoaded();
|
||||
searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,323 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { LoginPage } from '../../pages/adf/loginPage';
|
||||
import { SearchFiltersPage } from '../../pages/adf/searchFiltersPage';
|
||||
import { ContentListPage } from '../../pages/adf/dialog/contentListPage';
|
||||
import { ConfigEditorPage } from '../../pages/adf/configEditorPage';
|
||||
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
|
||||
import { SearchDialog } from '../../pages/adf/dialog/searchDialog';
|
||||
|
||||
import { AcsUserModel } from '../../models/ACS/acsUserModel';
|
||||
|
||||
import TestConfig = require('../../test.config');
|
||||
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../../actions/ACS/upload.actions';
|
||||
import { browser } from 'protractor';
|
||||
|
||||
describe('Search Radio Component', () => {
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
const contentList = new ContentListPage();
|
||||
const configEditorPage = new ConfigEditorPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const searchDialog = new SearchDialog();
|
||||
|
||||
let acsUser = new AcsUserModel();
|
||||
let uploadActions = new UploadActions();
|
||||
|
||||
let filterType = {
|
||||
none: 'None',
|
||||
all: 'All',
|
||||
folder: 'Folder',
|
||||
document: 'Document',
|
||||
custom: 'TEST_NAME'
|
||||
};
|
||||
|
||||
let nodeNames = {
|
||||
document: 'this_is_a_unique_name.txt',
|
||||
folder: 'this_is_a_unique_name'
|
||||
};
|
||||
|
||||
let createdFile, createdFolder;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
createdFolder = await this.alfrescoJsApi.nodes.addNode('-my-', {name: nodeNames.folder, nodeType: 'cm:folder'});
|
||||
createdFile = await this.alfrescoJsApi.nodes.addNode('-my-', {
|
||||
name: nodeNames.document,
|
||||
nodeType: 'cm:content'
|
||||
});
|
||||
|
||||
await browser.driver.sleep(15000);
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
browser.get(TestConfig.adf.url + '/search;q=' + nodeNames.folder + '');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, createdFile.entry.id);
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, createdFolder.entry.id);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C277039] Should be able to choose only one option at a time', () => {
|
||||
searchFiltersPage.checkTypeFilterIsDisplayed();
|
||||
searchFiltersPage.checkTypeFilterIsCollapsed();
|
||||
searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.folder);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.folder);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.document);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.document);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.all);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.all);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.folder);
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
});
|
||||
|
||||
describe('configuration change', () => {
|
||||
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C277147] Should be able to customise the pageSize value', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[5].component.settings.pageSize = 10;
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 6; numberOfOptions++) {
|
||||
jsonFile.categories[5].component.settings.options.push({
|
||||
'name': 'APP.SEARCH.RADIO.FOLDER',
|
||||
'value': "TYPE:'cm:folder'"
|
||||
});
|
||||
}
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10);
|
||||
|
||||
browser.refresh();
|
||||
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[5].component.settings.pageSize = 11;
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10);
|
||||
|
||||
browser.refresh();
|
||||
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[5].component.settings.pageSize = 9;
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(9);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
browser.refresh();
|
||||
});
|
||||
|
||||
it('[C277148] Should be able to click show more/less button', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[5].component.settings.pageSize = 0;
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 6; numberOfOptions++) {
|
||||
jsonFile.categories[5].component.settings.options.push({
|
||||
'name': 'APP.SEARCH.RADIO.FOLDER',
|
||||
'value': "TYPE:'cm:folder'"
|
||||
});
|
||||
}
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickShowLessButton();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
browser.refresh();
|
||||
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
delete jsonFile.categories[5].component.settings.pageSize;
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(10);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickShowLessButton();
|
||||
|
||||
expect(searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(5);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Properties', () => {
|
||||
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
beforeAll(async (done) => {
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C277033] Should be able to add a new option', () => {
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
|
||||
jsonFile.categories[5].component.settings.options.push({
|
||||
'name': filterType.custom,
|
||||
'value': "TYPE:'cm:content'"
|
||||
});
|
||||
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterTextAndPressEnter(nodeNames.folder);
|
||||
searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.custom);
|
||||
searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none);
|
||||
|
||||
searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.custom);
|
||||
|
||||
contentList.checkContentIsDisplayed(nodeNames.document);
|
||||
contentList.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,242 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { LoginPage } from '../../pages/adf/loginPage';
|
||||
import { SearchDialog } from '../../pages/adf/dialog/searchDialog';
|
||||
import { DataTablePage } from '../../pages/adf/dataTablePage';
|
||||
import { SearchResultsPage } from '../../pages/adf/searchResultsPage';
|
||||
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
|
||||
import { ConfigEditorPage } from '../../pages/adf/configEditorPage';
|
||||
import { SearchFiltersPage } from '../../pages/adf/searchFiltersPage';
|
||||
|
||||
import TestConfig = require('../../test.config');
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../../actions/ACS/upload.actions';
|
||||
import { AcsUserModel } from '../../models/ACS/acsUserModel';
|
||||
import { FileModel } from '../../models/ACS/fileModel';
|
||||
import { browser } from 'protractor';
|
||||
import resources = require('../../util/resources');
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
|
||||
describe('Search Number Range Filter', () => {
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const searchDialog = new SearchDialog();
|
||||
const searchFilters = new SearchFiltersPage();
|
||||
const sizeSliderFilter = searchFilters.sizeSliderFilterPage();
|
||||
const searchResults = new SearchResultsPage();
|
||||
const navigationBar = new NavigationBarPage();
|
||||
const configEditor = new ConfigEditorPage();
|
||||
const dataTable = new DataTablePage();
|
||||
|
||||
const acsUser = new AcsUserModel();
|
||||
|
||||
const file2BytesModel = new FileModel({
|
||||
'name': resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_name,
|
||||
'location': resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_location
|
||||
});
|
||||
|
||||
let file2Bytes;
|
||||
const uploadActions = new UploadActions();
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
file2Bytes = await uploadActions.uploadFile(this.alfrescoJsApi, file2BytesModel.location, file2BytesModel.name, '-my-');
|
||||
await browser.driver.sleep(15000);
|
||||
|
||||
loginPage.loginToContentServices(acsUser.id, acsUser.password);
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, file2Bytes.entry.id);
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
searchFilters.checkSizeSliderFilterIsDisplayed()
|
||||
.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsExpanded();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
await browser.refresh();
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C276970] Should be able to expand/collapse Search Size Slider', () => {
|
||||
searchFilters.checkSizeSliderFilterIsExpanded()
|
||||
.clickSizeSliderFilterHeader();
|
||||
sizeSliderFilter.checkSliderIsDisplayed()
|
||||
.checkClearButtonIsDisplayed()
|
||||
.checkClearButtonIsEnabled();
|
||||
searchFilters.checkSizeSliderFilterIsCollapsed();
|
||||
});
|
||||
|
||||
it('[C276972] Should be keep value when Search Size Slider is collapsed', () => {
|
||||
let size = 5;
|
||||
sizeSliderFilter.checkSliderIsDisplayed().setValue(size);
|
||||
searchFilters.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsCollapsed()
|
||||
.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsExpanded()
|
||||
.checkSizeSliderFilterIsDisplayed();
|
||||
expect(sizeSliderFilter.getValue()).toEqual(`${size}`);
|
||||
});
|
||||
|
||||
it('[C276981] Should be able to clear value in Search Size Slider', () => {
|
||||
let size = 5;
|
||||
sizeSliderFilter.checkSliderIsDisplayed().setValue(size);
|
||||
searchResults.sortBySize(false)
|
||||
.tableIsLoaded();
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes <= size).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
sizeSliderFilter.checkSliderIsDisplayed()
|
||||
.clickClearButton();
|
||||
|
||||
searchResults.sortBySize(false)
|
||||
.tableIsLoaded();
|
||||
|
||||
browser.controlFlow().execute(async () => {
|
||||
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||
await this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then(async (node) => {
|
||||
await expect(node.entry.content.sizeInBytes >= size).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Configuration change', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C276983] Should be able to disable thumb label in Search Size Slider', () => {
|
||||
jsonFile.categories[2].component.settings.thumbLabel = false;
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterConfiguration(JSON.stringify(jsonFile)).clickSaveButton();
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchFilters.checkSizeSliderFilterIsDisplayed()
|
||||
.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
sizeSliderFilter.checkSliderWithThumbLabelIsNotDisplayed();
|
||||
});
|
||||
|
||||
it('[C276985] Should be able to set min value for Search Size Slider', () => {
|
||||
let minSize = 3;
|
||||
jsonFile.categories[2].component.settings.min = minSize;
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterConfiguration(JSON.stringify(jsonFile)).clickSaveButton();
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchFilters.checkSizeSliderFilterIsDisplayed()
|
||||
.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
sizeSliderFilter.checkSliderIsDisplayed();
|
||||
|
||||
expect(sizeSliderFilter.getMinValue()).toEqual(`${minSize}`);
|
||||
});
|
||||
|
||||
it('[C276986] Should be able to set max value for Search Size Slider', () => {
|
||||
let maxSize = 50;
|
||||
jsonFile.categories[2].component.settings.max = maxSize;
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterConfiguration(JSON.stringify(jsonFile)).clickSaveButton();
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchFilters.checkSizeSliderFilterIsDisplayed()
|
||||
.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
sizeSliderFilter.checkSliderIsDisplayed();
|
||||
|
||||
expect(sizeSliderFilter.getMaxValue()).toEqual(`${maxSize}`);
|
||||
});
|
||||
|
||||
it('[C276987] Should be able to set steps for Search Size Slider', () => {
|
||||
let step = 10;
|
||||
jsonFile.categories[2].component.settings.step = step;
|
||||
|
||||
navigationBar.clickConfigEditorButton();
|
||||
configEditor.clickSearchConfiguration();
|
||||
configEditor.clickClearButton();
|
||||
configEditor.enterConfiguration(JSON.stringify(jsonFile)).clickSaveButton();
|
||||
|
||||
searchDialog.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchFilters.checkSizeSliderFilterIsDisplayed()
|
||||
.clickSizeSliderFilterHeader()
|
||||
.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
let randomValue = 5;
|
||||
sizeSliderFilter.checkSliderIsDisplayed()
|
||||
.setValue(randomValue);
|
||||
expect(sizeSliderFilter.getValue()).toEqual(`0`);
|
||||
sizeSliderFilter.setValue(step);
|
||||
expect(sizeSliderFilter.getValue()).toEqual(`${step}`);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,133 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { browser } from 'protractor';
|
||||
|
||||
import { AcsUserModel } from '../../models/ACS/acsUserModel';
|
||||
import { FolderModel } from '../../models/ACS/folderModel';
|
||||
|
||||
import TestConfig = require('../../test.config');
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
|
||||
import { LoginPage } from '../../pages/adf/loginPage';
|
||||
import { SearchDialog } from '../../pages/adf/dialog/searchDialog';
|
||||
import { SearchResultsPage } from '../../pages/adf/searchResultsPage';
|
||||
import { SearchFiltersPage } from '../../pages/adf/searchFiltersPage';
|
||||
import { ConfigEditorPage } from '../../pages/adf/configEditorPage';
|
||||
import { NavigationBarPage } from '../../pages/adf/navigationBarPage';
|
||||
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
|
||||
describe('Search component - Text widget', () => {
|
||||
|
||||
const configEditorPage = new ConfigEditorPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
|
||||
let loginPage = new LoginPage();
|
||||
let searchDialog = new SearchDialog();
|
||||
let searchResultPage = new SearchResultsPage();
|
||||
|
||||
let acsUser = new AcsUserModel();
|
||||
let newFolderModel = new FolderModel({'name': 'newFolder', 'description': 'newDescription'});
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
await this.alfrescoJsApi.nodes.addNode('-my-', {
|
||||
'name': newFolderModel.name,
|
||||
'nodeType': 'cm:folder',
|
||||
'properties':
|
||||
{
|
||||
'cm:description': newFolderModel.description
|
||||
}
|
||||
}, {}, {});
|
||||
|
||||
await browser.driver.sleep(10000);
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C289329] Placeholder should be displayed in the widget when the input string is empty', () => {
|
||||
browser.get(TestConfig.adf.url + '/search;q=*');
|
||||
searchResultPage.tableIsLoaded();
|
||||
|
||||
searchFiltersPage.checkNameFilterIsDisplayed();
|
||||
expect(searchFiltersPage.textFiltersPage().getNamePlaceholder()).toEqual('Enter the name');
|
||||
});
|
||||
|
||||
describe('configuration change', () => {
|
||||
|
||||
let jsonFile;
|
||||
|
||||
beforeAll(() => {
|
||||
let searchConfiguration = new SearchConfiguration();
|
||||
jsonFile = searchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C289330] Should be able to change the Field setting', () => {
|
||||
browser.get(TestConfig.adf.url + '/search;q=*');
|
||||
searchResultPage.tableIsLoaded();
|
||||
|
||||
searchFiltersPage.checkCheckListFilterIsDisplayed();
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder');
|
||||
|
||||
searchFiltersPage.checkNameFilterIsDisplayed();
|
||||
searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name);
|
||||
searchResultPage.checkContentIsDisplayed(newFolderModel.name);
|
||||
|
||||
searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description);
|
||||
searchResultPage.checkContentIsNotDisplayed(newFolderModel.name);
|
||||
|
||||
jsonFile.categories[0].component.settings.field = 'cm:description';
|
||||
|
||||
navigationBarPage.clickConfigEditorButton();
|
||||
configEditorPage.clickSearchConfiguration();
|
||||
configEditorPage.clickClearButton();
|
||||
configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile));
|
||||
configEditorPage.clickSaveButton();
|
||||
|
||||
searchDialog.clickOnSearchIcon().enterTextAndPressEnter('*');
|
||||
searchResultPage.tableIsLoaded();
|
||||
|
||||
searchFiltersPage.checkCheckListFilterIsDisplayed();
|
||||
searchFiltersPage.clickCheckListFilter();
|
||||
searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder');
|
||||
|
||||
searchFiltersPage.checkNameFilterIsDisplayed();
|
||||
searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name);
|
||||
searchResultPage.checkContentIsNotDisplayed(newFolderModel.name);
|
||||
|
||||
searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description);
|
||||
searchResultPage.checkContentIsDisplayed(newFolderModel.name);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,175 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export class SearchConfiguration {
|
||||
|
||||
constructor() {
|
||||
}
|
||||
|
||||
getConfiguration() {
|
||||
return {
|
||||
'include': ['path', 'allowableOperations'],
|
||||
'sorting': {
|
||||
'options': [
|
||||
{'key': 'name', 'label': 'Name', 'type': 'FIELD', 'field': 'cm:name', 'ascending': true},
|
||||
{
|
||||
'key': 'content.sizeInBytes',
|
||||
'label': 'Size',
|
||||
'type': 'FIELD',
|
||||
'field': 'content.size',
|
||||
'ascending': true
|
||||
},
|
||||
{
|
||||
'key': 'description',
|
||||
'label': 'Description',
|
||||
'type': 'FIELD',
|
||||
'field': 'cm:description',
|
||||
'ascending': true
|
||||
},
|
||||
{
|
||||
'key': 'createdByUser',
|
||||
'label': 'Author',
|
||||
'type': 'FIELD',
|
||||
'field': 'cm:creator',
|
||||
'ascending': true
|
||||
},
|
||||
{'key': 'createdAt', 'label': 'Created', 'type': 'FIELD', 'field': 'cm:created', 'ascending': true}
|
||||
],
|
||||
'defaults': [
|
||||
{'key': 'name', 'type': 'FIELD', 'field': 'cm:name', 'ascending': true}
|
||||
]
|
||||
},
|
||||
'filterQueries': [
|
||||
{'query': "TYPE:'cm:folder' OR TYPE:'cm:content'"},
|
||||
{'query': 'NOT cm:creator:System'}
|
||||
],
|
||||
'facetFields': {
|
||||
'expanded': true,
|
||||
'fields': [
|
||||
{'field': 'content.mimetype', 'mincount': 1, 'label': '1:Type'},
|
||||
{'field': 'content.size', 'mincount': 1, 'label': '2:Size'},
|
||||
{'field': 'creator', 'mincount': 1, 'label': '3:Creator'},
|
||||
{'field': 'modifier', 'mincount': 1, 'label': '4:Modifier'},
|
||||
{'field': 'created', 'mincount': 1, 'label': '5:Created'}
|
||||
]
|
||||
},
|
||||
'facetQueries': {
|
||||
'label': 'My facet queries',
|
||||
'pageSize': 5,
|
||||
'queries': [
|
||||
{'query': 'created:2018', 'label': '1.Created This Year'},
|
||||
{'query': 'content.mimetype', 'label': '2.Type'},
|
||||
{'query': 'content.size:[0 TO 10240]', 'label': '3.Size: xtra small'},
|
||||
{'query': 'content.size:[10240 TO 102400]', 'label': '4.Size: small'},
|
||||
{'query': 'content.size:[102400 TO 1048576]', 'label': '5.Size: medium'},
|
||||
{'query': 'content.size:[1048576 TO 16777216]', 'label': '6.Size: large'},
|
||||
{'query': 'content.size:[16777216 TO 134217728]', 'label': '7.Size: xtra large'},
|
||||
{'query': 'content.size:[134217728 TO MAX]', 'label': '8.Size: XX large'}
|
||||
]
|
||||
},
|
||||
'categories': [
|
||||
{
|
||||
'id': 'queryName',
|
||||
'name': 'Name',
|
||||
'enabled': true,
|
||||
'expanded': true,
|
||||
'component': {
|
||||
'selector': 'text',
|
||||
'settings': {
|
||||
'pattern': "cm:name:'(.*?)'",
|
||||
'field': 'cm:name',
|
||||
'placeholder': 'Enter the name'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
'id': 'checkList',
|
||||
'name': 'Check List',
|
||||
'enabled': true,
|
||||
'component': {
|
||||
'selector': 'check-list',
|
||||
'settings': {
|
||||
'pageSize': 5,
|
||||
'operator': 'OR',
|
||||
'options': [
|
||||
{'name': 'Folder', 'value': "TYPE:'cm:folder'"},
|
||||
{'name': 'Document', 'value': "TYPE:'cm:content'"}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
'id': 'contentSize',
|
||||
'name': 'Content Size',
|
||||
'enabled': true,
|
||||
'component': {
|
||||
'selector': 'slider',
|
||||
'settings': {
|
||||
'field': 'cm:content.size',
|
||||
'min': 0,
|
||||
'max': 18,
|
||||
'step': 1,
|
||||
'thumbLabel': true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
'id': 'contentSizeRange',
|
||||
'name': 'Content Size (range)',
|
||||
'enabled': true,
|
||||
'component': {
|
||||
'selector': 'number-range',
|
||||
'settings': {
|
||||
'field': 'cm:content.size',
|
||||
'format': '[{FROM} TO {TO}]'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
'id': 'createdDateRange',
|
||||
'name': 'Created Date (range)',
|
||||
'enabled': true,
|
||||
'component': {
|
||||
'selector': 'date-range',
|
||||
'settings': {
|
||||
'field': 'cm:created',
|
||||
'dateFormat': 'DD-MMM-YY'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
'id': 'queryType',
|
||||
'name': 'Type',
|
||||
'enabled': true,
|
||||
'component': {
|
||||
'selector': 'radio',
|
||||
'settings': {
|
||||
'field': null,
|
||||
'pageSize': 5,
|
||||
'options': [
|
||||
{'name': 'APP.SEARCH.RADIO.NONE', 'value': '', 'default': true},
|
||||
{'name': 'APP.SEARCH.RADIO.ALL', 'value': "TYPE:'cm:folder' OR TYPE:'cm:content'"},
|
||||
{'name': 'APP.SEARCH.RADIO.FOLDER', 'value': "TYPE:'cm:folder'"},
|
||||
{'name': 'APP.SEARCH.RADIO.DOCUMENT', 'value': "TYPE:'cm:content'"}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { browser } from 'protractor';
|
||||
|
||||
import { LoginPage } from '../pages/adf/loginPage';
|
||||
import { SearchDialog } from '../pages/adf/dialog/searchDialog';
|
||||
import { ContentServicesPage } from '../pages/adf/contentServicesPage';
|
||||
import { FilePreviewPage } from '../pages/adf/filePreviewPage';
|
||||
import { SearchResultsPage } from '../pages/adf/searchResultsPage';
|
||||
|
||||
import { AcsUserModel } from '../models/ACS/acsUserModel';
|
||||
import { FileModel } from '../models/ACS/fileModel';
|
||||
import { FolderModel } from '../models/ACS/folderModel';
|
||||
|
||||
import TestConfig = require('../test.config');
|
||||
import { Util } from '../util/util';
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../actions/ACS/upload.actions';
|
||||
|
||||
xdescribe('Search component - Search Bar', () => {
|
||||
|
||||
let search = {
|
||||
inactive: {
|
||||
firstChar: 'x',
|
||||
secondChar: 'y',
|
||||
thirdChar: 'z',
|
||||
name: 'impossible-name-folder' + Util.generateRandomString(8)
|
||||
}
|
||||
};
|
||||
|
||||
let loginPage = new LoginPage();
|
||||
let contentServicesPage = new ContentServicesPage();
|
||||
let searchDialog = new SearchDialog();
|
||||
let searchResultPage = new SearchResultsPage();
|
||||
let filePreviewPage = new FilePreviewPage();
|
||||
|
||||
let acsUser = new AcsUserModel();
|
||||
|
||||
let filename = Util.generateRandomString(16);
|
||||
let firstFolderName = Util.generateRandomString(16);
|
||||
let secondFolderName = Util.generateRandomString(16);
|
||||
let thirdFolderName = Util.generateRandomString(16);
|
||||
let filesToDelete = [];
|
||||
|
||||
let firstFileModel = new FileModel({
|
||||
'name': filename, 'shortName': filename.substring(0, 8)
|
||||
});
|
||||
|
||||
let firstFolderModel = new FolderModel({
|
||||
'name': firstFolderName, 'shortName': firstFolderName.substring(0, 8)
|
||||
});
|
||||
let secondFolder = new FolderModel({
|
||||
'name': secondFolderName, 'shortName': secondFolderName.substring(0, 8)
|
||||
});
|
||||
let thirdFolder = new FolderModel({
|
||||
'name': thirdFolderName, 'shortName': thirdFolderName.substring(0, 8)
|
||||
});
|
||||
|
||||
beforeAll(async (done) => {
|
||||
let uploadActions = new UploadActions();
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
let firstFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, firstFileModel.location, firstFileModel.name, '-my-');
|
||||
Object.assign(firstFileModel, firstFileUploaded.entry);
|
||||
|
||||
filesToDelete.push(await uploadActions.uploadFolder(this.alfrescoJsApi, firstFolderModel.name, '-my-'));
|
||||
filesToDelete.push(await uploadActions.uploadFolder(this.alfrescoJsApi, secondFolder.name, '-my-'));
|
||||
filesToDelete.push(await uploadActions.uploadFolder(this.alfrescoJsApi, thirdFolder.name, '-my-'));
|
||||
|
||||
await browser.driver.sleep(15000); // wait search index previous file/folder uploaded
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
let uploadActions = new UploadActions();
|
||||
|
||||
filesToDelete.forEach(async (currentNode) => {
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, currentNode.entry.id);
|
||||
|
||||
});
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
contentServicesPage.goToDocumentList();
|
||||
});
|
||||
|
||||
it('[C272798] Search bar should be visible', () => {
|
||||
searchDialog
|
||||
.checkSearchBarIsNotVisible()
|
||||
.checkSearchIconIsVisible();
|
||||
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.checkSearchIconIsVisible();
|
||||
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsNotVisible()
|
||||
.checkSearchIconIsVisible();
|
||||
});
|
||||
|
||||
it('[C272799] Should be possible to hide search bar after input', () => {
|
||||
searchDialog
|
||||
.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.enterText(firstFolderModel.shortName);
|
||||
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsNotVisible()
|
||||
.checkSearchIconIsVisible();
|
||||
|
||||
contentServicesPage.checkAcsContainer();
|
||||
});
|
||||
|
||||
it('[C260255] Should display message when searching for an inexistent file', () => {
|
||||
searchDialog
|
||||
.checkSearchBarIsNotVisible()
|
||||
.clickOnSearchIcon()
|
||||
.checkNoResultMessageIsNotDisplayed()
|
||||
.enterText(search.inactive.name)
|
||||
.checkNoResultMessageIsDisplayed();
|
||||
|
||||
searchDialog.clearText();
|
||||
searchDialog.checkSearchBarIsNotVisible();
|
||||
});
|
||||
|
||||
it('[C260256] Should display file/folder in search suggestion when typing first characters', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterText(firstFolderModel.shortName);
|
||||
|
||||
searchDialog.resultTableContainsRow(firstFolderModel.name);
|
||||
|
||||
expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.shortName);
|
||||
expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
|
||||
expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name);
|
||||
|
||||
searchDialog.clearText();
|
||||
searchDialog.checkSearchBarIsNotVisible();
|
||||
|
||||
searchDialog.clickOnSearchIcon().enterText(firstFileModel.shortName);
|
||||
searchDialog.resultTableContainsRow(firstFileModel.name);
|
||||
|
||||
expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.shortName);
|
||||
expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
|
||||
|
||||
expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name);
|
||||
|
||||
searchDialog.clearText();
|
||||
searchDialog.checkSearchBarIsNotVisible();
|
||||
});
|
||||
|
||||
it('[C272800] Should display file/folder in search suggestion when typing name', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterText(firstFolderModel.name);
|
||||
|
||||
searchDialog.resultTableContainsRow(firstFolderModel.name);
|
||||
|
||||
expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.name);
|
||||
expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
|
||||
expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name);
|
||||
|
||||
searchDialog.clearText();
|
||||
searchDialog.checkSearchBarIsNotVisible();
|
||||
|
||||
searchDialog.clickOnSearchIcon().enterText(firstFileModel.name);
|
||||
searchDialog.resultTableContainsRow(firstFileModel.name);
|
||||
|
||||
expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.name);
|
||||
expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
|
||||
expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name);
|
||||
|
||||
searchDialog.clearText();
|
||||
searchDialog.checkSearchBarIsNotVisible();
|
||||
});
|
||||
|
||||
it('[C260257] Should display content when clicking on folder from search suggestions', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterText(firstFolderModel.shortName);
|
||||
|
||||
searchDialog.resultTableContainsRow(firstFolderModel.name);
|
||||
searchDialog.clickOnSpecificRow(firstFolderModel.name);
|
||||
|
||||
contentServicesPage
|
||||
.checkAcsContainer()
|
||||
.waitForTableBody();
|
||||
|
||||
expect(contentServicesPage.currentFolderName()).toEqual(firstFolderModel.name);
|
||||
|
||||
contentServicesPage.goToDocumentList();
|
||||
|
||||
searchDialog
|
||||
.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterText(firstFileModel.name)
|
||||
.resultTableContainsRow(firstFileModel.name);
|
||||
|
||||
searchDialog.clickOnSpecificRow(firstFileModel.name);
|
||||
expect(filePreviewPage.getPDFTitleFromSearch()).toEqual(firstFileModel.name);
|
||||
|
||||
filePreviewPage.closePreviewWithButton();
|
||||
});
|
||||
|
||||
it('[C272801] Should display message when searching for non-existent folder', () => {
|
||||
searchDialog
|
||||
.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterTextAndPressEnter(search.inactive.name);
|
||||
|
||||
searchResultPage.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C272802] Should be able to find an existent folder in search results', () => {
|
||||
searchDialog
|
||||
.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterTextAndPressEnter(firstFolderModel.name);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(firstFolderModel.name);
|
||||
});
|
||||
|
||||
it('[C260258] Should be able to find an existent file in search results', () => {
|
||||
searchDialog
|
||||
.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterTextAndPressEnter(firstFileModel.name);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(firstFileModel.name);
|
||||
});
|
||||
|
||||
it('[C91321] Should be able to use down arrow key when navigating throw suggestions', () => {
|
||||
searchDialog
|
||||
.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterText(secondFolder.shortName)
|
||||
.pressDownArrowAndEnter();
|
||||
|
||||
contentServicesPage.checkAcsContainer();
|
||||
expect(contentServicesPage.currentFolderName()).toEqual(secondFolder.name);
|
||||
});
|
||||
|
||||
xit('[C260254] Search bar should get closed when changing browser tab', () => {
|
||||
searchDialog
|
||||
.checkSearchIconIsVisible()
|
||||
.clickOnSearchIcon()
|
||||
.checkSearchBarIsVisible()
|
||||
.enterText(secondFolder.shortName);
|
||||
|
||||
searchDialog.resultTableContainsRow(secondFolder.name);
|
||||
|
||||
Util.openNewTabInBrowser();
|
||||
Util.switchToWindowHandler(0);
|
||||
|
||||
browser.sleep(500);
|
||||
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,152 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { LoginPage } from '../pages/adf/loginPage';
|
||||
import { SearchDialog } from '../pages/adf/dialog/searchDialog';
|
||||
import { SearchFiltersPage } from '../pages/adf/searchFiltersPage';
|
||||
import { PaginationPage } from '../pages/adf/paginationPage';
|
||||
import { ContentListPage } from '../pages/adf/dialog/contentListPage';
|
||||
|
||||
import { AcsUserModel } from '../models/ACS/acsUserModel';
|
||||
import { FileModel } from '../models/ACS/fileModel';
|
||||
|
||||
import TestConfig = require('../test.config');
|
||||
import { Util } from '../util/util';
|
||||
import resources = require('../util/resources');
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../actions/ACS/upload.actions';
|
||||
import { browser } from 'protractor';
|
||||
|
||||
describe('Search Filters', () => {
|
||||
|
||||
let loginPage = new LoginPage();
|
||||
let searchDialog = new SearchDialog();
|
||||
let searchFiltersPage = new SearchFiltersPage();
|
||||
let uploadActions = new UploadActions();
|
||||
let paginationPage = new PaginationPage();
|
||||
let contentList = new ContentListPage();
|
||||
|
||||
let acsUser = new AcsUserModel();
|
||||
|
||||
let filename = Util.generateRandomString(16);
|
||||
|
||||
let fileModel = new FileModel({
|
||||
'name': filename, 'shortName': filename.substring(0, 8)
|
||||
});
|
||||
|
||||
let pngFileModel = new FileModel({
|
||||
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
|
||||
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
|
||||
});
|
||||
|
||||
let fileUploaded, fileTypePng;
|
||||
|
||||
let filter = { type: 'TYPE-PNG Image' };
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
fileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, fileModel.location, fileModel.name, '-my-');
|
||||
|
||||
fileTypePng = await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, '-my-');
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
await browser.driver.sleep(30000); // wait search index previous file/folder uploaded
|
||||
|
||||
searchDialog.checkSearchIconIsVisible();
|
||||
searchDialog.clickOnSearchIcon();
|
||||
searchDialog.enterTextAndPressEnter(fileUploaded.entry.name);
|
||||
|
||||
searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, fileUploaded.entry.id);
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, fileTypePng.entry.id);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C286298] Should be able to cancel a filter using "x" button from the toolbar', () => {
|
||||
let userOption = `${acsUser.firstName} ${acsUser.lastName}`;
|
||||
searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption)
|
||||
.checkChipIsDisplayed(userOption)
|
||||
.removeFilterOption(userOption)
|
||||
.checkChipIsNotDisplayed(userOption);
|
||||
});
|
||||
|
||||
it('[C277146] Should Show more/less buttons be hidden when inactive', () => {
|
||||
browser.get(TestConfig.adf.url + '/search;q=*');
|
||||
|
||||
searchFiltersPage.creatorCheckListFiltersPage().checkShowLessButtonIsNotDisplayed()
|
||||
.checkShowMoreButtonIsDisplayed()
|
||||
.clickShowMoreButtonUntilIsNotDisplayed()
|
||||
.checkShowLessButtonIsDisplayed()
|
||||
.clickShowLessButtonUntilIsNotDisplayed();
|
||||
});
|
||||
|
||||
it('[C286556] Search categories should preserve their collapsed/expanded state after the search', () => {
|
||||
browser.get(TestConfig.adf.url + '/search;q=*');
|
||||
|
||||
searchFiltersPage.clickFileTypeListFilter()
|
||||
.checkFileTypeFilterIsCollapsed()
|
||||
.clickFileSizeFilterHeader()
|
||||
.checkFileSizeFilterIsCollapsed();
|
||||
|
||||
searchFiltersPage.creatorCheckListFiltersPage().clickCheckListOption('Administrator');
|
||||
|
||||
searchFiltersPage.checkFileTypeFilterIsCollapsed()
|
||||
.checkFileSizeFilterIsCollapsed();
|
||||
});
|
||||
|
||||
it('[C287796] Should be able to display the correct bucket number after selecting a filter', () => {
|
||||
browser.get(TestConfig.adf.url + '/search;q=*');
|
||||
|
||||
searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG Image');
|
||||
|
||||
let bucketNumberForFilter = searchFiltersPage.fileTypeCheckListFiltersPage().getBucketNumberOfFilterType(filter.type);
|
||||
|
||||
let resultFileNames = contentList.getAllRowsNameColumn();
|
||||
|
||||
expect(bucketNumberForFilter).not.toEqual('0');
|
||||
|
||||
expect(paginationPage.getTotalNumberOfFiles()).toEqual(bucketNumberForFilter);
|
||||
|
||||
resultFileNames.then((fileNames) => {
|
||||
fileNames.map((nameOfResultFiles) => {
|
||||
expect(nameOfResultFiles).toContain('.png');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,250 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import TestConfig = require('../test.config');
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
|
||||
import { Util } from '../util/util';
|
||||
import resources = require('../util/resources');
|
||||
import CONSTANTS = require('../util/constants');
|
||||
import { UploadActions } from '../actions/ACS/upload.actions';
|
||||
import { browser } from 'protractor';
|
||||
|
||||
import { LoginPage } from '../pages/adf/loginPage';
|
||||
import { SearchDialog } from '../pages/adf/dialog/searchDialog';
|
||||
import { SearchResultsPage } from '../pages/adf/searchResultsPage';
|
||||
import { SearchFiltersPage } from '../pages/adf/searchFiltersPage';
|
||||
|
||||
import { AcsUserModel } from '../models/ACS/acsUserModel';
|
||||
import { FileModel } from '../models/ACS/fileModel';
|
||||
|
||||
describe('Search Component - Multi-Select Facet', () => {
|
||||
let loginPage = new LoginPage();
|
||||
let searchDialog = new SearchDialog();
|
||||
let searchResultsPage = new SearchResultsPage();
|
||||
let uploadActions = new UploadActions();
|
||||
let searchFiltersPage = new SearchFiltersPage();
|
||||
let site, userOption;
|
||||
|
||||
beforeAll(() => {
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
});
|
||||
|
||||
describe('', () => {
|
||||
let jpgFile, jpgFileSite, txtFile, txtFileSite;
|
||||
let acsUser = new AcsUserModel();
|
||||
|
||||
let randomName = Util.generateRandomString();
|
||||
let jpgFileInfo = new FileModel({
|
||||
'location': resources.Files.ADF_DOCUMENTS.JPG.file_location,
|
||||
'name': `${randomName}.jpg`
|
||||
});
|
||||
let txtFileInfo = new FileModel({
|
||||
'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location,
|
||||
'name': `${randomName}.txt`
|
||||
});
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
site = await this.alfrescoJsApi.core.sitesApi.createSite({
|
||||
title: Util.generateRandomString(8),
|
||||
visibility: 'PUBLIC'
|
||||
});
|
||||
|
||||
jpgFile = await uploadActions.uploadFile(this.alfrescoJsApi, jpgFileInfo.location, jpgFileInfo.name, '-my-');
|
||||
|
||||
jpgFileSite = await uploadActions.uploadFile(this.alfrescoJsApi, jpgFileInfo.location, jpgFileInfo.name, site.entry.guid);
|
||||
|
||||
txtFile = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileInfo.location, txtFileInfo.name, '-my-');
|
||||
|
||||
txtFileSite = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileInfo.location, txtFileInfo.name, site.entry.guid);
|
||||
|
||||
await browser.driver.sleep(30000);
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
searchDialog.checkSearchIconIsVisible();
|
||||
searchDialog.clickOnSearchIcon();
|
||||
searchDialog.enterTextAndPressEnter(`${randomName}`);
|
||||
|
||||
userOption = `${acsUser.firstName} ${acsUser.lastName}`;
|
||||
|
||||
searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
searchFiltersPage.creatorCheckListFiltersPage().filterBy(userOption);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
Promise.all([
|
||||
uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, jpgFile.entry.id),
|
||||
uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, jpgFileSite.entry.id),
|
||||
uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, txtFile.entry.id),
|
||||
uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, txtFileSite.entry.id)
|
||||
]);
|
||||
|
||||
await this.alfrescoJsApi.core.sitesApi.deleteSite(site.entry.id);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C280054] Should be able to select multiple items from a search facet filter', () => {
|
||||
searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text');
|
||||
|
||||
expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2);
|
||||
searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name);
|
||||
|
||||
searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image');
|
||||
|
||||
expect(searchResultsPage.numberOfResultsDisplayed()).toBe(4);
|
||||
searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name);
|
||||
searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name);
|
||||
searchResultsPage.checkContentIsDisplayed(jpgFileSite.entry.name);
|
||||
});
|
||||
});
|
||||
|
||||
describe('', () => {
|
||||
let jpgFile, txtFile;
|
||||
let userUploadingTxt = new AcsUserModel();
|
||||
let userUploadingImg = new AcsUserModel();
|
||||
|
||||
let randomName = Util.generateRandomString();
|
||||
let jpgFileInfo = new FileModel({
|
||||
'location': resources.Files.ADF_DOCUMENTS.JPG.file_location,
|
||||
'name': `${randomName}.jpg`
|
||||
});
|
||||
let txtFileInfo = new FileModel({
|
||||
'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location,
|
||||
'name': `${randomName}.txt`
|
||||
});
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(userUploadingTxt);
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(userUploadingImg);
|
||||
|
||||
await this.alfrescoJsApi.login(userUploadingTxt.id, userUploadingTxt.password);
|
||||
|
||||
site = await this.alfrescoJsApi.core.sitesApi.createSite({
|
||||
title: Util.generateRandomString(8),
|
||||
visibility: 'PUBLIC'
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, {
|
||||
id: userUploadingImg.id,
|
||||
role: CONSTANTS.CS_USER_ROLES.MANAGER
|
||||
});
|
||||
|
||||
txtFile = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileInfo.location, txtFileInfo.name, site.entry.guid);
|
||||
|
||||
await this.alfrescoJsApi.login(userUploadingImg.id, userUploadingImg.password);
|
||||
|
||||
jpgFile = await uploadActions.uploadFile(this.alfrescoJsApi, jpgFileInfo.location, jpgFileInfo.name, site.entry.guid);
|
||||
|
||||
await browser.driver.sleep(30000);
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(userUploadingImg);
|
||||
|
||||
searchDialog.checkSearchIconIsVisible();
|
||||
searchDialog.clickOnSearchIcon();
|
||||
searchDialog.enterTextAndPressEnter(`*${randomName}*`);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C280056] Should be able to select multiple items from multiple search facet filters', () => {
|
||||
|
||||
searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
|
||||
searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingTxt.firstName} ${userUploadingTxt.lastName}`);
|
||||
|
||||
searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${userUploadingImg.firstName} ${userUploadingImg.lastName}`);
|
||||
|
||||
searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name);
|
||||
|
||||
searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text');
|
||||
searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image');
|
||||
|
||||
expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2);
|
||||
searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name);
|
||||
});
|
||||
});
|
||||
|
||||
describe('', () => {
|
||||
let txtFile;
|
||||
let acsUser = new AcsUserModel();
|
||||
|
||||
let randomName = Util.generateRandomString();
|
||||
let txtFileInfo = new FileModel({
|
||||
'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location,
|
||||
'name': `${randomName}.txt`
|
||||
});
|
||||
|
||||
beforeAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
site = await this.alfrescoJsApi.core.sitesApi.createSite({
|
||||
title: Util.generateRandomString(8),
|
||||
visibility: 'PUBLIC'
|
||||
});
|
||||
|
||||
txtFile = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileInfo.location, txtFileInfo.name, '-my-');
|
||||
await browser.driver.sleep(30000);
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
searchDialog.checkSearchIconIsVisible();
|
||||
searchDialog.clickOnSearchIcon();
|
||||
searchDialog.enterTextAndPressEnter(`*${randomName}*`);
|
||||
|
||||
searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, txtFile.entry.id);
|
||||
await this.alfrescoJsApi.core.sitesApi;
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C280058] Should update filter facets items number when another filter facet item is selected', () => {
|
||||
searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text');
|
||||
searchFiltersPage.creatorCheckListFiltersPage().filterBy(`${acsUser.firstName} ${acsUser.lastName}`);
|
||||
|
||||
expect(searchResultsPage.numberOfResultsDisplayed()).toBe(1);
|
||||
searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,296 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { browser } from 'protractor';
|
||||
|
||||
import { LoginPage } from '../pages/adf/loginPage';
|
||||
|
||||
import { SearchDialog } from '../pages/adf/dialog/searchDialog';
|
||||
import { ContentServicesPage } from '../pages/adf/contentServicesPage';
|
||||
import { SearchResultsPage } from '../pages/adf/searchResultsPage';
|
||||
import { FilePreviewPage } from '../pages/adf/filePreviewPage';
|
||||
|
||||
import { AcsUserModel } from '../models/ACS/acsUserModel';
|
||||
import { FolderModel } from '../models/ACS/folderModel';
|
||||
import { FileModel } from '../models/ACS/fileModel';
|
||||
|
||||
import TestConfig = require('../test.config');
|
||||
import { Util } from '../util/util';
|
||||
import resources = require('../util/resources');
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../actions/ACS/upload.actions';
|
||||
|
||||
describe('Search component - Search Page', () => {
|
||||
let search = {
|
||||
active: {
|
||||
firstFile: null,
|
||||
secondFile: null,
|
||||
base: Util.generateRandomString(7),
|
||||
extension: '.txt'
|
||||
},
|
||||
no_permission: {
|
||||
noPermFile: 'Meetings',
|
||||
noPermFolder: 'Meeting Notes'
|
||||
}
|
||||
};
|
||||
|
||||
let loginPage = new LoginPage();
|
||||
let contentServicesPage = new ContentServicesPage();
|
||||
let searchDialog = new SearchDialog();
|
||||
let searchResultPage = new SearchResultsPage();
|
||||
let filePreviewPage = new FilePreviewPage();
|
||||
|
||||
let acsUser = new AcsUserModel();
|
||||
let emptyFolderModel = new FolderModel({ 'name': 'search' + Util.generateRandomString() });
|
||||
let firstFileModel;
|
||||
let newFolderModel = new FolderModel({ 'name': 'newFolder' });
|
||||
let fileNames = [], adminFileNames = [], nrOfFiles = 15, adminNrOfFiles = 5;
|
||||
|
||||
beforeAll(async (done) => {
|
||||
fileNames = Util.generateSequenceFiles(1, nrOfFiles, search.active.base, search.active.extension);
|
||||
adminFileNames = Util.generateSequenceFiles(nrOfFiles + 1, nrOfFiles + adminNrOfFiles, search.active.base, search.active.extension);
|
||||
search.active.firstFile = fileNames[0];
|
||||
search.active.secondFile = fileNames[1];
|
||||
fileNames.splice(0, 1);
|
||||
|
||||
firstFileModel = new FileModel({
|
||||
'name': search.active.firstFile,
|
||||
'location': resources.Files.ADF_DOCUMENTS.TXT.file_location
|
||||
});
|
||||
|
||||
let uploadActions = new UploadActions();
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
await uploadActions.uploadFolder(this.alfrescoJsApi, emptyFolderModel.name, '-my-');
|
||||
let newFolderModelUploaded = await uploadActions.uploadFolder(this.alfrescoJsApi, newFolderModel.name, '-my-');
|
||||
|
||||
await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, newFolderModelUploaded.entry.id);
|
||||
|
||||
await uploadActions.uploadFile(this.alfrescoJsApi, firstFileModel.location, firstFileModel.name, '-my-');
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await uploadActions.createEmptyFiles(this.alfrescoJsApi, adminFileNames, newFolderModelUploaded.entry.id);
|
||||
|
||||
browser.driver.sleep(12000);
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C260264] Should display message when no results are found', () => {
|
||||
let notExistentFileName = Util.generateRandomString();
|
||||
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(notExistentFileName);
|
||||
searchResultPage.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C260265] Should display file previewer when opening a file from search results', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(firstFileModel.name);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(firstFileModel.name);
|
||||
searchResultPage.navigateToFolder(firstFileModel.name);
|
||||
|
||||
browser.driver.sleep(200);
|
||||
|
||||
filePreviewPage.closePreviewWithButton();
|
||||
});
|
||||
|
||||
it('[C272810] Should display only files corresponding to search', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.firstFile);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.firstFile);
|
||||
expect(searchResultPage.numberOfResultsDisplayed()).toBe(1);
|
||||
});
|
||||
|
||||
it('[C260267] Should display content when opening a folder from search results', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(emptyFolderModel.name);
|
||||
|
||||
searchResultPage.checkNoResultMessageIsNotDisplayed();
|
||||
searchResultPage.checkContentIsDisplayed(emptyFolderModel.name);
|
||||
searchResultPage.navigateToFolder(emptyFolderModel.name);
|
||||
contentServicesPage.currentFolderName().then((result) => {
|
||||
expect(result).toEqual(emptyFolderModel.name);
|
||||
});
|
||||
});
|
||||
|
||||
it('[C260261] Should be able to delete a file from search results', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.firstFile);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.firstFile);
|
||||
|
||||
searchResultPage.deleteContent(search.active.firstFile);
|
||||
|
||||
searchResultPage.checkNoResultMessageIsDisplayed();
|
||||
searchResultPage.checkContentIsNotDisplayed(search.active.firstFile);
|
||||
|
||||
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.firstFile);
|
||||
searchResultPage.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C272809] Should be able to delete a folder from search results', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(emptyFolderModel.name);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(emptyFolderModel.name);
|
||||
searchResultPage.checkNoResultMessageIsNotDisplayed();
|
||||
searchResultPage.checkContentIsDisplayed(emptyFolderModel.name);
|
||||
searchResultPage.deleteContent(emptyFolderModel.name);
|
||||
searchResultPage.checkNoResultMessageIsDisplayed();
|
||||
|
||||
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(emptyFolderModel.name);
|
||||
searchResultPage.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
describe('Sorting', () => {
|
||||
|
||||
afterEach(async (done) => {
|
||||
await browser.refresh();
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C272803] Should be able to sort results by name (Ascending)', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.base);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
|
||||
searchResultPage.sortAndCheckListIsOrderedByName(true).then((result) => {
|
||||
expect(result).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
it('[C272804] Should be able to sort results by name (Descending)', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.base);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
|
||||
searchResultPage.sortAndCheckListIsOrderedByName(false).then((result) => {
|
||||
expect(result).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
it('[C272805] Should be able to sort results by author (Ascending)', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.base);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
|
||||
|
||||
searchResultPage.sortAndCheckListIsOrderedByAuthor(true).then((result) => {
|
||||
expect(result).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
it('[C272806] Should be able to sort results by author (Descending)', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.base);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
|
||||
searchResultPage.sortAndCheckListIsOrderedByAuthor(false).then((result) => {
|
||||
expect(result).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
it('[C272807] Should be able to sort results by date (Ascending)', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.base);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
|
||||
searchResultPage.sortAndCheckListIsOrderedByCreated(true).then((result) => {
|
||||
expect(result).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
it('[C260260] Should be able to sort results by date (Descending)', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.active.base);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
|
||||
searchResultPage.sortAndCheckListIsOrderedByCreated(false).then((result) => {
|
||||
expect(result).toEqual(true);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
it('[C260262] Should not be able to delete a file from search results without rights', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.no_permission.noPermFile);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFile);
|
||||
searchResultPage.checkDeleteIsDisabled(search.no_permission.noPermFile);
|
||||
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFile);
|
||||
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.no_permission.noPermFile);
|
||||
searchResultPage.checkNoResultMessageIsNotDisplayed();
|
||||
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFile);
|
||||
});
|
||||
|
||||
it('[C272808] Should not be able to delete a folder from search results without rights', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.no_permission.noPermFolder);
|
||||
|
||||
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder);
|
||||
searchResultPage.checkDeleteIsDisabled(search.no_permission.noPermFolder);
|
||||
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder);
|
||||
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter(search.no_permission.noPermFolder);
|
||||
|
||||
searchResultPage.checkNoResultMessageIsNotDisplayed();
|
||||
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder);
|
||||
});
|
||||
|
||||
it('[C286675] Should display results when searching for all elements', () => {
|
||||
searchDialog
|
||||
.clickOnSearchIcon()
|
||||
.enterTextAndPressEnter('*');
|
||||
|
||||
searchResultPage.checkNoResultMessageIsNotDisplayed();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user