mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
ACS-8614: Remove old search layout protractor e2e (#10104)
This commit is contained in:
@@ -1,365 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { createApiService, LocalStorageUtil, LoginPage, StringUtil, UploadActions, UserModel, UsersActions } from '@alfresco/adf-testing';
|
||||
import { SearchResultsPage } from '../pages/search-results.page';
|
||||
import { SearchFiltersPage } from '../pages/search-filters.page';
|
||||
import { SearchBarPage } from '../pages/search-bar.page';
|
||||
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
import { browser } from 'protractor';
|
||||
import { NodesApi } from '@alfresco/js-api';
|
||||
|
||||
describe('Search Checklist Component', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchResults = new SearchResultsPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
|
||||
const acsUser = new UserModel();
|
||||
|
||||
const apiService = createApiService();
|
||||
const uploadActions = new UploadActions(apiService);
|
||||
const usersActions = new UsersActions(apiService);
|
||||
const nodesApi = new NodesApi(apiService.getInstance());
|
||||
|
||||
const filterType = {
|
||||
folder: 'Folder',
|
||||
document: 'Document',
|
||||
custom: 'TEST_NAME'
|
||||
};
|
||||
|
||||
const randomName = StringUtil.generateRandomString();
|
||||
const nodeNames = {
|
||||
document: `${randomName}.txt`,
|
||||
folder: `${randomName}Folder`
|
||||
};
|
||||
|
||||
let createdFile;
|
||||
let createdFolder;
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
|
||||
await usersActions.createUser(acsUser);
|
||||
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
createdFolder = await nodesApi.createNode('-my-', {
|
||||
name: nodeNames.folder,
|
||||
nodeType: 'cm:folder'
|
||||
});
|
||||
createdFile = await nodesApi.createNode('-my-', {
|
||||
name: nodeNames.document,
|
||||
nodeType: 'cm:content'
|
||||
});
|
||||
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await apiService.login(browser.params.testConfig.users.admin.username, browser.params.testConfig.users.admin.password);
|
||||
|
||||
await uploadActions.deleteFileOrFolder(createdFile.entry.id);
|
||||
await uploadActions.deleteFileOrFolder(createdFolder.entry.id);
|
||||
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
it('[C276991] Should be able to click between options and Clear All button', async () => {
|
||||
await searchFiltersPage.checkCheckListFilterIsDisplayed();
|
||||
await searchFiltersPage.checkCheckListFilterIsCollapsed();
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document);
|
||||
await searchFiltersPage.checkListFiltersPage().checkClearAllButtonIsDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.document);
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickClearAllButton();
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.document);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsNotSelected(filterType.folder);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
});
|
||||
|
||||
describe('configuration change', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
jsonFile = SearchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C277143] Should be able to click show more/less button with pageSize set as default', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 8; numberOfOptions++) {
|
||||
jsonFile.categories[1].component.settings.options.push({
|
||||
name: 'Folder',
|
||||
value: `TYPE:'cm:folder'`
|
||||
});
|
||||
}
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickShowLessButton();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
});
|
||||
|
||||
it('[C277144] Should be able to click show more/less button with pageSize set with a custom value', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
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'`
|
||||
});
|
||||
}
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
jsonFile.categories[1].component.settings.pageSize = 11;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[1].component.settings.pageSize = 9;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(9);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C277145] Should be able to click show more/less button with pageSize set to zero', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
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'`
|
||||
});
|
||||
}
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
delete jsonFile.categories[1].component.settings.pageSize;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(5);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(await searchFiltersPage.checkListFiltersPage().getCheckListOptionsNumberOnPage()).toBe(10);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
await searchFiltersPage.checkListFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Properties', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(async () => {
|
||||
jsonFile = SearchConfiguration.getConfiguration();
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
});
|
||||
|
||||
it('[C277018] Should be able to change the operator', async () => {
|
||||
jsonFile.categories[1].component.settings.operator = 'AND';
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsSelected(filterType.folder);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document);
|
||||
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.document);
|
||||
});
|
||||
|
||||
it('[C277019] Should be able to add new properties with different types', async () => {
|
||||
jsonFile.categories[1].component.settings.options.push({
|
||||
name: filterType.custom,
|
||||
value: `TYPE:'cm:auditable'`
|
||||
});
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.folder);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.document);
|
||||
await searchFiltersPage.checkListFiltersPage().checkCheckListOptionIsDisplayed(filterType.custom);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.custom);
|
||||
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.document);
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption(filterType.folder);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,501 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 {
|
||||
createApiService,
|
||||
BrowserActions,
|
||||
DataTableComponentPage,
|
||||
LocalStorageUtil,
|
||||
LoginPage,
|
||||
UploadActions,
|
||||
UserModel,
|
||||
UsersActions
|
||||
} from '@alfresco/adf-testing';
|
||||
import { SearchBarPage } from '../pages/search-bar.page';
|
||||
import { SearchResultsPage } from '../pages/search-results.page';
|
||||
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
|
||||
import { SearchFiltersPage } from '../pages/search-filters.page';
|
||||
import { FileModel } from '../../models/ACS/file.model';
|
||||
import { browser, ElementFinder } from 'protractor';
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
import { parse } from 'date-fns';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
describe('Search Number Range Filter', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchFilters = new SearchFiltersPage();
|
||||
const sizeRangeFilter = searchFilters.sizeRangeFilterPage();
|
||||
const searchResults = new SearchResultsPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const dataTable = new DataTableComponentPage();
|
||||
|
||||
const acsUser = new UserModel();
|
||||
|
||||
const file2BytesModel = new FileModel({
|
||||
name: browser.params.resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_name,
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_path
|
||||
});
|
||||
|
||||
const file0BytesModel = new FileModel({
|
||||
name: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_name,
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_path
|
||||
});
|
||||
|
||||
let file2Bytes: NodeEntry;
|
||||
let file0Bytes: NodeEntry;
|
||||
const apiService = createApiService();
|
||||
const usersActions = new UsersActions(apiService);
|
||||
|
||||
const uploadActions = new UploadActions(apiService);
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
|
||||
await usersActions.createUser(acsUser);
|
||||
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-');
|
||||
file0Bytes = await uploadActions.uploadFile(file0BytesModel.location, file0BytesModel.name, '-my-');
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
await uploadActions.deleteFileOrFolder(file2Bytes.entry.id);
|
||||
await uploadActions.deleteFileOrFolder(file0Bytes.entry.id);
|
||||
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
await searchFilters.checkSizeRangeFilterIsDisplayed();
|
||||
await searchFilters.clickSizeRangeFilterHeader();
|
||||
await searchFilters.checkSizeRangeFilterIsExpanded();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await browser.refresh();
|
||||
});
|
||||
|
||||
it('[C276921] Should display default values for Number Range widget', async () => {
|
||||
await sizeRangeFilter.checkFromFieldIsDisplayed();
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.checkApplyButtonIsDisplayed();
|
||||
await sizeRangeFilter.checkClearButtonIsDisplayed();
|
||||
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
});
|
||||
|
||||
it('[C276922] Should be keep value when Number Range widget is collapsed', async () => {
|
||||
const size = 5;
|
||||
await sizeRangeFilter.putFromNumber(size);
|
||||
await sizeRangeFilter.putToNumber(size);
|
||||
await searchFilters.clickSizeRangeFilterHeader();
|
||||
await searchFilters.checkSizeRangeFilterIsCollapsed();
|
||||
await searchFilters.clickSizeRangeFilterHeader();
|
||||
await searchFilters.checkSizeRangeFilterIsExpanded();
|
||||
expect(await sizeRangeFilter.getFromNumber()).toEqual(`${size}`);
|
||||
expect(await sizeRangeFilter.getToNumber()).toEqual(`${size}`);
|
||||
});
|
||||
|
||||
it('[C276924] Should display error message when input had an invalid format', async () => {
|
||||
await sizeRangeFilter.checkFromFieldIsDisplayed();
|
||||
await sizeRangeFilter.putFromNumber('a');
|
||||
await sizeRangeFilter.putToNumber('A');
|
||||
await sizeRangeFilter.checkFromErrorInvalidIsDisplayed();
|
||||
await sizeRangeFilter.checkToErrorInvalidIsDisplayed();
|
||||
|
||||
expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
await sizeRangeFilter.putFromNumber('@');
|
||||
await sizeRangeFilter.putToNumber('£');
|
||||
await sizeRangeFilter.checkFromErrorInvalidIsDisplayed();
|
||||
await sizeRangeFilter.checkToErrorInvalidIsDisplayed();
|
||||
expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
await sizeRangeFilter.putFromNumber('4.5');
|
||||
await sizeRangeFilter.putToNumber('4,5');
|
||||
await sizeRangeFilter.checkFromErrorInvalidIsDisplayed();
|
||||
await sizeRangeFilter.checkToErrorInvalidIsDisplayed();
|
||||
expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
await sizeRangeFilter.putFromNumber('01');
|
||||
await sizeRangeFilter.putToNumber('-1');
|
||||
expect(await sizeRangeFilter.getFromErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.getToErrorInvalid()).toEqual('Invalid Format');
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
await sizeRangeFilter.clearFromField();
|
||||
await sizeRangeFilter.clearToField();
|
||||
await sizeRangeFilter.checkFromErrorRequiredIsDisplayed();
|
||||
await sizeRangeFilter.checkToErrorRequiredIsDisplayed();
|
||||
expect(await sizeRangeFilter.getFromErrorRequired()).toEqual('Required value');
|
||||
expect(await sizeRangeFilter.getToErrorRequired()).toEqual('Required value');
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
});
|
||||
|
||||
it('[C276943] Should be able to put a big value in To field', async () => {
|
||||
const toSize = 999999999;
|
||||
const fromSize = 0;
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(toSize);
|
||||
await sizeRangeFilter.putFromNumber(fromSize);
|
||||
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
await searchResults.sortBySize('DESC');
|
||||
|
||||
const results = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of results) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(parseInt(currentSize, 10) <= toSize).toBe(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('[C276944] Should be able to filter by name when size range filter is applied', async () => {
|
||||
const nameFilter = searchFilters.textFiltersPage();
|
||||
const toSize = 40;
|
||||
const fromSize = 0;
|
||||
await searchFilters.checkNameFilterIsDisplayed();
|
||||
await searchFilters.checkNameFilterIsExpanded();
|
||||
await nameFilter.searchByName('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await sizeRangeFilter.checkFromFieldIsDisplayed();
|
||||
await sizeRangeFilter.putFromNumber(fromSize);
|
||||
await sizeRangeFilter.putToNumber(toSize);
|
||||
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.sortBySize('DESC');
|
||||
|
||||
const results = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of results) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(parseInt(currentSize, 10) <= toSize).toBe(true);
|
||||
}
|
||||
}
|
||||
|
||||
await searchFilters.checkNameFilterIsDisplayed();
|
||||
await searchFilters.checkNameFilterIsExpanded();
|
||||
await nameFilter.searchByName('z*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
await searchResults.sortBySize('DESC');
|
||||
|
||||
const resultsSize = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of resultsSize) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(parseInt(currentSize, 10) <= toSize).toBe(true);
|
||||
}
|
||||
}
|
||||
|
||||
const resultsDisplay = (await dataTable.geCellElementDetail('Display name')) as ElementFinder[];
|
||||
for (const currentResult of resultsDisplay) {
|
||||
const name = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
if (name && name.trim() !== '') {
|
||||
expect(/z*/i.test(name)).toBe(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('[C276951] Should not display folders when Size range is applied', async () => {
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(99999999);
|
||||
await sizeRangeFilter.putFromNumber(0);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
await searchFilters.checkCheckListFilterIsDisplayed();
|
||||
await searchFilters.clickCheckListFilter();
|
||||
await searchFilters.checkCheckListFilterIsExpanded();
|
||||
|
||||
await searchFilters.checkListFiltersPage().clickCheckListOption('Folder');
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
await searchResults.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C276952] Should only display empty files when size range is set from 0 to 1', async () => {
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(1);
|
||||
await sizeRangeFilter.putFromNumber(0);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.sortBySize('DESC');
|
||||
|
||||
const results = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of results) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(currentSize === '0' || currentSize === '1').toBe(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('[C277092] Should disable apply button when from field value equal/is bigger than to field value', async () => {
|
||||
await sizeRangeFilter.checkFromFieldIsDisplayed();
|
||||
await sizeRangeFilter.putFromNumber(10);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
await sizeRangeFilter.putToNumber('5');
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
|
||||
await sizeRangeFilter.putToNumber('10');
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(false);
|
||||
});
|
||||
|
||||
it('[C289930] Should be able to clear values in number range fields', async () => {
|
||||
await sizeRangeFilter.checkFromFieldIsDisplayed();
|
||||
await sizeRangeFilter.checkClearButtonIsDisplayed();
|
||||
await sizeRangeFilter.checkNoErrorMessageIsDisplayed();
|
||||
await sizeRangeFilter.clickClearButton();
|
||||
await sizeRangeFilter.checkNoErrorMessageIsDisplayed();
|
||||
await sizeRangeFilter.putFromNumber(0);
|
||||
await sizeRangeFilter.putToNumber(1);
|
||||
await sizeRangeFilter.clickClearButton();
|
||||
|
||||
expect(await sizeRangeFilter.getFromNumber()).toEqual('');
|
||||
expect(await sizeRangeFilter.getToNumber()).toEqual('');
|
||||
|
||||
await sizeRangeFilter.putFromNumber(0);
|
||||
await sizeRangeFilter.putToNumber(1);
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
await searchResults.sortBySize('DESC');
|
||||
|
||||
const results = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of results) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(parseInt(currentSize, 10) <= 1000).toBe(true);
|
||||
}
|
||||
}
|
||||
|
||||
await sizeRangeFilter.clickClearButton();
|
||||
|
||||
expect(await sizeRangeFilter.getFromNumber()).toEqual('');
|
||||
expect(await sizeRangeFilter.getToNumber()).toEqual('');
|
||||
|
||||
await dataTable.waitTillContentLoaded();
|
||||
const resultsSize = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of resultsSize) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(parseInt(currentSize, 10) >= 1000).toBe(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('[C277137] Number Range should be inclusive', async () => {
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(2);
|
||||
await sizeRangeFilter.putFromNumber(1);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(1);
|
||||
await sizeRangeFilter.putFromNumber(0);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(3);
|
||||
await sizeRangeFilter.putFromNumber(2);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(4);
|
||||
await sizeRangeFilter.putFromNumber(3);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
});
|
||||
|
||||
describe('Configuration change', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
jsonFile = SearchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C276928] Should be able to change the field property for number range', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[3].component.settings.field = 'cm:created';
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFilters.checkSizeRangeFilterIsDisplayed();
|
||||
await searchFilters.clickSizeRangeFilterHeader();
|
||||
await searchFilters.checkSizeRangeFilterIsExpanded();
|
||||
|
||||
const fromYear = new Date().getFullYear();
|
||||
const toYear = fromYear + 1;
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(toYear);
|
||||
await sizeRangeFilter.putFromNumber(fromYear);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.sortByCreated('DESC');
|
||||
|
||||
const results = (await dataTable.geCellElementDetail('Created')) as ElementFinder[];
|
||||
for (const currentResult of results) {
|
||||
const currentDate = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
const currentDateFormatted = parse(currentDate, 'MMM dd, yyyy, h:mm:ss a', new Date());
|
||||
|
||||
expect(currentDateFormatted.getFullYear() <= toYear).toBe(true);
|
||||
expect(currentDateFormatted.getFullYear() >= fromYear).toBe(true);
|
||||
}
|
||||
});
|
||||
|
||||
it('[C277139] Should be able to set To field to be exclusive', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[3].component.settings.format = '[{FROM} TO {TO}>';
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFilters.checkSizeRangeFilterIsDisplayed();
|
||||
await searchFilters.clickSizeRangeFilterHeader();
|
||||
await searchFilters.checkSizeRangeFilterIsExpanded();
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(2);
|
||||
await sizeRangeFilter.putFromNumber(1);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(3);
|
||||
await sizeRangeFilter.putFromNumber(1);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
});
|
||||
|
||||
it('[C277140] Should be able to set From field to be exclusive', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[3].component.settings.format = '<{FROM} TO {TO}]';
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFilters.checkSizeRangeFilterIsDisplayed();
|
||||
await searchFilters.clickSizeRangeFilterHeader();
|
||||
await searchFilters.checkSizeRangeFilterIsExpanded();
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(3);
|
||||
await sizeRangeFilter.putFromNumber(1);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsDisplayed(file2BytesModel.name);
|
||||
|
||||
await sizeRangeFilter.checkToFieldIsDisplayed();
|
||||
await sizeRangeFilter.putToNumber(3);
|
||||
await sizeRangeFilter.putFromNumber(2);
|
||||
expect(await sizeRangeFilter.checkApplyButtonIsEnabled()).toBe(true);
|
||||
|
||||
await sizeRangeFilter.clickApplyButton();
|
||||
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResults.checkContentIsNotDisplayed(file2BytesModel.name);
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,311 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 {
|
||||
createApiService,
|
||||
BrowserActions,
|
||||
LocalStorageUtil,
|
||||
LoginPage,
|
||||
StringUtil,
|
||||
UploadActions,
|
||||
UserModel,
|
||||
UsersActions
|
||||
} from '@alfresco/adf-testing';
|
||||
import { SearchFiltersPage } from '../pages/search-filters.page';
|
||||
import { SearchResultsPage } from '../pages/search-results.page';
|
||||
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
|
||||
import { SearchBarPage } from '../pages/search-bar.page';
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
import { browser } from 'protractor';
|
||||
import { NodesApi } from '@alfresco/js-api';
|
||||
|
||||
describe('Search Radio Component', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchResults = new SearchResultsPage();
|
||||
|
||||
const acsUser = new UserModel();
|
||||
const apiService = createApiService();
|
||||
const nodesApi = new NodesApi(apiService.getInstance());
|
||||
const uploadActions = new UploadActions(apiService);
|
||||
const usersActions = new UsersActions(apiService);
|
||||
|
||||
const filterType = {
|
||||
none: 'None',
|
||||
all: 'All',
|
||||
folder: 'Folder',
|
||||
document: 'Document',
|
||||
custom: 'TEST_NAME'
|
||||
};
|
||||
|
||||
const randomName = StringUtil.generateRandomString();
|
||||
const nodeNames = {
|
||||
document: `${randomName}.txt`,
|
||||
folder: `${randomName}Folder`
|
||||
};
|
||||
|
||||
let createdFile;
|
||||
let createdFolder;
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
|
||||
await usersActions.createUser(acsUser);
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
createdFolder = await nodesApi.createNode('-my-', {
|
||||
name: nodeNames.folder,
|
||||
nodeType: 'cm:folder'
|
||||
});
|
||||
createdFile = await nodesApi.createNode('-my-', {
|
||||
name: nodeNames.document,
|
||||
nodeType: 'cm:content'
|
||||
});
|
||||
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
|
||||
await BrowserActions.getUrl(browser.baseUrl + '/search;q=' + randomName);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
|
||||
await uploadActions.deleteFileOrFolder(createdFile.entry.id);
|
||||
await uploadActions.deleteFileOrFolder(createdFolder.entry.id);
|
||||
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
it('[C277039] Should be able to choose only one option at a time', async () => {
|
||||
await searchFiltersPage.checkTypeFilterIsDisplayed();
|
||||
await searchFiltersPage.checkTypeFilterIsCollapsed();
|
||||
await searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none);
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.folder);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.folder);
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.document);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.document);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.document);
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.all);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.all);
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.folder);
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
});
|
||||
|
||||
describe('configuration change', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
jsonFile = SearchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
it('[C277147] Should be able to customise the pageSize value', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[5].component.settings.pageSize = 10;
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 6; numberOfOptions++) {
|
||||
jsonFile.categories[5].component.settings.options.push({
|
||||
name: 'Folder',
|
||||
value: `TYPE:'cm:folder'`
|
||||
});
|
||||
}
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(16);
|
||||
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[5].component.settings.pageSize = 11;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(16);
|
||||
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
jsonFile.categories[5].component.settings.pageSize = 9;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(15);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
await browser.refresh();
|
||||
});
|
||||
|
||||
it('[C277148] Should be able to click show more/less button', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[5].component.settings.pageSize = 0;
|
||||
|
||||
for (let numberOfOptions = 0; numberOfOptions < 6; numberOfOptions++) {
|
||||
jsonFile.categories[5].component.settings.options.push({
|
||||
name: 'Folder',
|
||||
value: `TYPE:'cm:folder'`
|
||||
});
|
||||
}
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(11);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(16);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickShowLessButton();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(11);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
delete jsonFile.categories[5].component.settings.pageSize;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(11);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickShowMoreButton();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(16);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsNotDisplayed();
|
||||
await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsDisplayed();
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickShowLessButton();
|
||||
|
||||
expect(await searchFiltersPage.typeFiltersPage().getRadioButtonsNumberOnPage()).toBe(11);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkShowMoreButtonIsDisplayed();
|
||||
await searchFiltersPage.typeFiltersPage().checkShowLessButtonIsNotDisplayed();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Properties', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(() => {
|
||||
jsonFile = SearchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
beforeAll(async () => {
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
});
|
||||
|
||||
it('[C277033] Should be able to add a new option', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.categories[5].component.settings.options.push({
|
||||
name: filterType.custom,
|
||||
value: `TYPE:'cm:content'`
|
||||
});
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterTextAndPressEnter(randomName);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.clickTypeFilterHeader();
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.none);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.all);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.folder);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.document);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsDisplayed(filterType.custom);
|
||||
await searchFiltersPage.typeFiltersPage().checkFilterRadioButtonIsChecked(filterType.none);
|
||||
|
||||
await searchFiltersPage.typeFiltersPage().clickFilterRadioButton(filterType.custom);
|
||||
|
||||
await searchResults.checkContentIsDisplayed(nodeNames.document);
|
||||
await searchResults.checkContentIsNotDisplayed(nodeNames.folder);
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,239 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 {
|
||||
createApiService,
|
||||
BrowserActions,
|
||||
DataTableComponentPage,
|
||||
LocalStorageUtil,
|
||||
LoginPage,
|
||||
UploadActions,
|
||||
UserModel,
|
||||
UsersActions
|
||||
} from '@alfresco/adf-testing';
|
||||
import { SearchBarPage } from '../pages/search-bar.page';
|
||||
import { SearchResultsPage } from '../pages/search-results.page';
|
||||
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
|
||||
import { SearchFiltersPage } from '../pages/search-filters.page';
|
||||
import { FileModel } from '../../models/ACS/file.model';
|
||||
import { browser, ElementFinder } from 'protractor';
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
|
||||
describe('Search Slider Filter', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchFilters = new SearchFiltersPage();
|
||||
const sizeSliderFilter = searchFilters.sizeSliderFilterPage();
|
||||
const searchResults = new SearchResultsPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const dataTable = new DataTableComponentPage();
|
||||
|
||||
const acsUser = new UserModel();
|
||||
|
||||
const file2BytesModel = new FileModel({
|
||||
name: browser.params.resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_name,
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_path
|
||||
});
|
||||
|
||||
let file2Bytes;
|
||||
const apiService = createApiService();
|
||||
|
||||
const uploadActions = new UploadActions(apiService);
|
||||
const usersActions = new UsersActions(apiService);
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
|
||||
await usersActions.createUser(acsUser);
|
||||
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
file2Bytes = await uploadActions.uploadFile(file2BytesModel.location, file2BytesModel.name, '-my-');
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
try {
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
await uploadActions.deleteFileOrFolder(file2Bytes.entry.id);
|
||||
} catch (error) {}
|
||||
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await browser.refresh();
|
||||
});
|
||||
|
||||
it('[C276970] Should be able to expand/collapse Search Size Slider', async () => {
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await sizeSliderFilter.checkSliderIsDisplayed();
|
||||
await sizeSliderFilter.checkClearButtonIsDisplayed();
|
||||
await sizeSliderFilter.checkClearButtonIsEnabled();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsCollapsed();
|
||||
await sizeSliderFilter.checkSliderIsNotDisplayed();
|
||||
await sizeSliderFilter.checkClearButtonIsNotDisplayed();
|
||||
});
|
||||
|
||||
it('[C276972] Should be keep value when Search Size Slider is collapsed', async () => {
|
||||
const size = 10;
|
||||
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await sizeSliderFilter.checkSliderIsDisplayed();
|
||||
await sizeSliderFilter.setValue(size);
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsCollapsed();
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
expect(await sizeSliderFilter.getValue()).toEqual(`${size}`);
|
||||
});
|
||||
|
||||
it('[C276981] Should be able to clear value in Search Size Slider', async () => {
|
||||
const size = 5;
|
||||
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await sizeSliderFilter.checkSliderIsDisplayed();
|
||||
await sizeSliderFilter.setValue(size);
|
||||
await searchResults.sortBySize('DESC');
|
||||
|
||||
const results = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of results) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(parseInt(currentSize, 10) <= 5000).toBe(true);
|
||||
}
|
||||
}
|
||||
|
||||
await sizeSliderFilter.checkSliderIsDisplayed();
|
||||
await sizeSliderFilter.clickClearButton();
|
||||
|
||||
await searchResults.sortBySize('DESC');
|
||||
|
||||
const resultsSize = (await dataTable.geCellElementDetail('Size')) as ElementFinder[];
|
||||
for (const currentResult of resultsSize) {
|
||||
const currentSize = await BrowserActions.getAttribute(currentResult, 'title');
|
||||
|
||||
if (currentSize && currentSize.trim() !== '') {
|
||||
expect(parseInt(currentSize, 10) >= 5000).toBe(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
describe('Configuration change', () => {
|
||||
let jsonFile;
|
||||
|
||||
beforeEach(async () => {
|
||||
jsonFile = SearchConfiguration.getConfiguration();
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
});
|
||||
|
||||
it('[C276983] Should be able to disable thumb label in Search Size Slider', async () => {
|
||||
jsonFile.categories[2].component.settings.thumbLabel = false;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
await sizeSliderFilter.checkSliderWithThumbLabelIsNotDisplayed();
|
||||
});
|
||||
|
||||
it('[C276985] Should be able to set min value for Search Size Slider', async () => {
|
||||
const minSize = 3;
|
||||
jsonFile.categories[2].component.settings.min = minSize;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
await sizeSliderFilter.checkSliderIsDisplayed();
|
||||
|
||||
expect(await sizeSliderFilter.getMinValue()).toEqual(`${minSize}`);
|
||||
});
|
||||
|
||||
it('[C276986] Should be able to set max value for Search Size Slider', async () => {
|
||||
const maxSize = 50;
|
||||
jsonFile.categories[2].component.settings.max = maxSize;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
await sizeSliderFilter.checkSliderIsDisplayed();
|
||||
|
||||
expect(await sizeSliderFilter.getMaxValue()).toEqual(`${maxSize}`);
|
||||
});
|
||||
|
||||
it('[C276987] Should be able to set steps for Search Size Slider', async () => {
|
||||
const step = 10;
|
||||
jsonFile.categories[2].component.settings.step = step;
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFilters.checkSizeSliderFilterIsDisplayed();
|
||||
await searchFilters.clickSizeSliderFilterHeader();
|
||||
await searchFilters.checkSizeSliderFilterIsExpanded();
|
||||
|
||||
const randomValue = 5;
|
||||
await sizeSliderFilter.checkSliderIsDisplayed();
|
||||
await sizeSliderFilter.setValue(randomValue);
|
||||
|
||||
expect(await sizeSliderFilter.getValue()).toEqual(`0`);
|
||||
await sizeSliderFilter.setValue(step);
|
||||
expect(await sizeSliderFilter.getValue()).toEqual(`${step}`);
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,120 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { FolderModel } from '../../models/ACS/folder.model';
|
||||
|
||||
import { createApiService,
|
||||
BrowserActions,
|
||||
LocalStorageUtil,
|
||||
LoginPage,
|
||||
UserModel,
|
||||
UsersActions
|
||||
} from '@alfresco/adf-testing';
|
||||
import { SearchBarPage } from '../pages/search-bar.page';
|
||||
import { SearchResultsPage } from '../pages/search-results.page';
|
||||
import { SearchFiltersPage } from '../pages/search-filters.page';
|
||||
import { NavigationBarPage } from '../../core/pages/navigation-bar.page';
|
||||
|
||||
import { SearchConfiguration } from '../search.config';
|
||||
import { NodesApi } from '@alfresco/js-api';
|
||||
|
||||
describe('Search component - Text widget', () => {
|
||||
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchResultPage = new SearchResultsPage();
|
||||
|
||||
const apiService = createApiService();
|
||||
const usersActions = new UsersActions(apiService);
|
||||
const nodesApi = new NodesApi(apiService.getInstance());
|
||||
|
||||
const acsUser = new UserModel();
|
||||
const newFolderModel = new FolderModel({ description: 'newDescription' });
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
|
||||
await usersActions.createUser(acsUser);
|
||||
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
await nodesApi.createNode('-my-', {
|
||||
name: newFolderModel.name,
|
||||
nodeType: 'cm:folder',
|
||||
properties:
|
||||
{
|
||||
'cm:description': newFolderModel.description
|
||||
}
|
||||
}, {});
|
||||
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
describe('configuration change', () => {
|
||||
it('[C289330] Should be able to change the Field setting', async () => {
|
||||
await BrowserActions.getUrl(browser.baseUrl + '/search;q=*');
|
||||
await searchResultPage.tableIsLoaded();
|
||||
|
||||
await searchFiltersPage.checkCheckListFilterIsDisplayed();
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder');
|
||||
|
||||
await searchFiltersPage.checkNameFilterIsDisplayed();
|
||||
await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResultPage.checkContentIsDisplayed(newFolderModel.name);
|
||||
|
||||
await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description);
|
||||
await searchResultPage.checkContentIsNotDisplayed(newFolderModel.name);
|
||||
|
||||
const jsonFile= SearchConfiguration.getConfiguration();
|
||||
jsonFile.categories[0].component.settings.field = 'cm:description';
|
||||
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkCheckListFilterIsDisplayed();
|
||||
await searchFiltersPage.clickCheckListFilter();
|
||||
await searchFiltersPage.checkListFiltersPage().clickCheckListOption('Folder');
|
||||
|
||||
await searchFiltersPage.checkNameFilterIsDisplayed();
|
||||
await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.name);
|
||||
await searchResultPage.checkContentIsNotDisplayed(newFolderModel.name);
|
||||
|
||||
await searchFiltersPage.textFiltersPage().searchByName(newFolderModel.description);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResultPage.checkContentIsDisplayed(newFolderModel.name);
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,94 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { ElementFinder, protractor, $ } from 'protractor';
|
||||
import { BrowserVisibility, BrowserActions, TestElement, materialLocators } from '@alfresco/adf-testing';
|
||||
|
||||
export class SearchBarPage {
|
||||
searchIcon = $(`button[class*='adf-search-button']`);
|
||||
searchBar = $(`adf-search-control input`);
|
||||
searchBarExpanded = TestElement.byCss(`adf-search-control ${materialLocators.Form.field.root}[class*="${materialLocators.Focused.root}"] input`);
|
||||
noResultMessage = $(`p[class*='adf-search-fixed-text']`);
|
||||
rowsAuthor = `${materialLocators.List.content.class} p[class*='adf-search-fixed-text']`;
|
||||
completeName = `h4[class*='adf-search-fixed-text']`;
|
||||
highlightName = `.adf-highlight`;
|
||||
searchBarPage = $(`${materialLocators.List.root}[id='autocomplete-search-result-list']`);
|
||||
|
||||
getRowByRowName = (name: string): ElementFinder => $(`[data-automation-id='autocomplete_for_${name}']`);
|
||||
|
||||
async clickOnSearchIcon(): Promise<void> {
|
||||
await BrowserActions.click(this.searchIcon);
|
||||
}
|
||||
|
||||
async checkSearchIconIsVisible(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.searchIcon);
|
||||
}
|
||||
|
||||
async checkSearchBarIsVisible(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.searchBar);
|
||||
}
|
||||
|
||||
async checkSearchBarIsNotVisible(): Promise<void> {
|
||||
await this.searchBarExpanded.waitNotVisible();
|
||||
}
|
||||
|
||||
async checkNoResultMessageIsDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.noResultMessage);
|
||||
}
|
||||
|
||||
async checkNoResultMessageIsNotDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsNotVisible(this.noResultMessage);
|
||||
}
|
||||
|
||||
async enterText(text: string): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.searchBar);
|
||||
await BrowserActions.clearSendKeys(this.searchBar, text);
|
||||
}
|
||||
|
||||
async enterTextAndPressEnter(text: string): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.searchBar);
|
||||
await BrowserActions.clearSendKeys(this.searchBar, text);
|
||||
await this.searchBar.sendKeys(protractor.Key.ENTER);
|
||||
}
|
||||
|
||||
async resultTableContainsRow(name: string): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.searchBarPage);
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.getRowByRowName(name));
|
||||
}
|
||||
|
||||
async clickOnSpecificRow(fileName: string): Promise<void> {
|
||||
await this.resultTableContainsRow(fileName);
|
||||
await BrowserActions.click(this.getRowByRowName(fileName));
|
||||
}
|
||||
|
||||
async getSpecificRowsHighlightName(fileName: string): Promise<string> {
|
||||
return BrowserActions.getText(this.getRowByRowName(fileName).$(this.highlightName));
|
||||
}
|
||||
|
||||
async getSpecificRowsCompleteName(fileName: string): Promise<string> {
|
||||
return BrowserActions.getText(this.getRowByRowName(fileName).$(this.completeName));
|
||||
}
|
||||
|
||||
async getSpecificRowsAuthor(fileName: string): Promise<string> {
|
||||
return BrowserActions.getText(this.getRowByRowName(fileName).$(this.rowsAuthor));
|
||||
}
|
||||
|
||||
async clearText(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.searchBar);
|
||||
await this.searchBar.clear();
|
||||
}
|
||||
}
|
@@ -1,228 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 {
|
||||
BrowserVisibility,
|
||||
NumberRangeFilterPage,
|
||||
SearchCategoriesPage,
|
||||
SearchCheckListPage,
|
||||
SearchRadioPage,
|
||||
SearchSliderPage,
|
||||
SearchTextPage
|
||||
} from '@alfresco/adf-testing';
|
||||
import { $, by } from 'protractor';
|
||||
|
||||
export class SearchFiltersPage {
|
||||
searchCategoriesPage: SearchCategoriesPage = new SearchCategoriesPage();
|
||||
|
||||
searchFilters = $('adf-search-filter');
|
||||
fileTypeFilter = $('[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.TYPE"]');
|
||||
creatorFilter = $('[data-automation-id="expansion-panel-SEARCH.FILTER.PEOPLE"]');
|
||||
fileSizeFilter = $('[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.SIZE"]');
|
||||
nameFilter = $('[data-automation-id="expansion-panel-Name"]');
|
||||
checkListFilter = $('[data-automation-id="expansion-panel-Check List"]');
|
||||
typeFilter = $('[data-automation-id="expansion-panel-Type"]');
|
||||
sizeRangeFilter = $('[data-automation-id="expansion-panel-Content Size (range)"]');
|
||||
sizeSliderFilter = $('[data-automation-id="expansion-panel-Content Size"]');
|
||||
facetQueriesDefaultGroup = $(
|
||||
'[data-automation-id="expansion-panel-SEARCH.FACET_QUERIES.MY_FACET_QUERIES"],' + '[data-automation-id="expansion-panel-My facet queries"]'
|
||||
);
|
||||
facetQueriesTypeGroup = $('[data-automation-id="expansion-panel-Type facet queries"]');
|
||||
facetQueriesSizeGroup = $('[data-automation-id="expansion-panel-Size facet queries"]');
|
||||
facetIntervalsByCreated = $('[data-automation-id="expansion-panel-The Created"]');
|
||||
facetIntervalsByModified = $('[data-automation-id="expansion-panel-TheModified"]');
|
||||
|
||||
async checkSearchFiltersIsDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.searchFilters);
|
||||
}
|
||||
|
||||
sizeRangeFilterPage(): NumberRangeFilterPage {
|
||||
return SearchCategoriesPage.numberRangeFilter(this.sizeRangeFilter);
|
||||
}
|
||||
|
||||
textFiltersPage(): SearchTextPage {
|
||||
return SearchCategoriesPage.textFiltersPage(this.nameFilter);
|
||||
}
|
||||
|
||||
checkListFiltersPage(): SearchCheckListPage {
|
||||
return SearchCategoriesPage.checkListFiltersPage(this.checkListFilter);
|
||||
}
|
||||
|
||||
creatorCheckListFiltersPage(): SearchCheckListPage {
|
||||
return SearchCategoriesPage.checkListFiltersPage(this.creatorFilter);
|
||||
}
|
||||
|
||||
fileTypeCheckListFiltersPage(): SearchCheckListPage {
|
||||
return SearchCategoriesPage.checkListFiltersPage(this.fileTypeFilter);
|
||||
}
|
||||
|
||||
typeFiltersPage(): SearchRadioPage {
|
||||
return SearchCategoriesPage.radioFiltersPage(this.typeFilter);
|
||||
}
|
||||
|
||||
async checkCustomFacetFieldLabelIsDisplayed(fieldLabel: string): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible($(`[data-automation-id="expansion-panel-${fieldLabel}"]`));
|
||||
}
|
||||
|
||||
sizeSliderFilterPage(): SearchSliderPage {
|
||||
return SearchCategoriesPage.sliderFilter(this.sizeSliderFilter);
|
||||
}
|
||||
|
||||
async checkCheckListFilterIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.checkListFilter);
|
||||
}
|
||||
|
||||
async checkNameFilterIsExpanded(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsExpanded(this.nameFilter);
|
||||
}
|
||||
|
||||
async checkNameFilterIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.nameFilter);
|
||||
}
|
||||
|
||||
async checkDefaultFacetQueryGroupIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesDefaultGroup);
|
||||
}
|
||||
|
||||
async checkTypeFacetQueryGroupIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesTypeGroup);
|
||||
}
|
||||
|
||||
async checkSizeFacetQueryGroupIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetQueriesSizeGroup);
|
||||
}
|
||||
|
||||
async checkFacetIntervalsByCreatedIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByCreated);
|
||||
}
|
||||
|
||||
async checkFacetIntervalsByModifiedIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.facetIntervalsByModified);
|
||||
}
|
||||
|
||||
async isTypeFacetQueryGroupPresent(): Promise<boolean> {
|
||||
return this.facetQueriesTypeGroup.isPresent();
|
||||
}
|
||||
|
||||
async isSizeFacetQueryGroupPresent(): Promise<boolean> {
|
||||
return this.facetQueriesSizeGroup.isPresent();
|
||||
}
|
||||
|
||||
async clickCheckListFilter(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilter(this.checkListFilter);
|
||||
}
|
||||
|
||||
async clickFileTypeListFilter(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilter(this.fileTypeFilter);
|
||||
}
|
||||
|
||||
async clickFileSizeFilterHeader(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilterHeader(this.fileSizeFilter);
|
||||
}
|
||||
|
||||
async checkFileSizeFilterIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.fileSizeFilter);
|
||||
}
|
||||
|
||||
async checkFileTypeFilterIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.fileTypeFilter);
|
||||
}
|
||||
|
||||
async checkCheckListFilterIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.checkListFilter);
|
||||
}
|
||||
|
||||
async checkCheckListFilterIsExpanded(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsExpanded(this.checkListFilter);
|
||||
}
|
||||
|
||||
async checkTypeFilterIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.typeFilter);
|
||||
}
|
||||
|
||||
async checkTypeFilterIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.typeFilter);
|
||||
}
|
||||
|
||||
async clickTypeFilterHeader(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilterHeader(this.typeFilter);
|
||||
}
|
||||
|
||||
async checkSizeRangeFilterIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.sizeRangeFilter);
|
||||
}
|
||||
|
||||
async clickSizeRangeFilterHeader(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilterHeader(this.sizeRangeFilter);
|
||||
}
|
||||
|
||||
async checkSizeRangeFilterIsExpanded(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsExpanded(this.sizeRangeFilter);
|
||||
}
|
||||
|
||||
async checkSizeRangeFilterIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeRangeFilter);
|
||||
}
|
||||
|
||||
async checkSizeSliderFilterIsDisplayed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsDisplayed(this.sizeSliderFilter);
|
||||
}
|
||||
|
||||
async clickSizeSliderFilterHeader(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilterHeader(this.sizeSliderFilter);
|
||||
}
|
||||
|
||||
async checkSizeSliderFilterIsExpanded(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsExpanded(this.sizeSliderFilter);
|
||||
}
|
||||
|
||||
async checkSizeSliderFilterIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.sizeSliderFilter);
|
||||
}
|
||||
|
||||
async checkFacetIntervalsByCreatedIsExpanded(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByCreated);
|
||||
}
|
||||
|
||||
async checkFacetIntervalsByCreatedIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByCreated);
|
||||
}
|
||||
|
||||
async clickFacetIntervalsByCreatedFilterHeader(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByCreated);
|
||||
}
|
||||
|
||||
async checkFacetIntervalsByModifiedIsExpanded(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsExpanded(this.facetIntervalsByModified);
|
||||
}
|
||||
|
||||
async checkFacetIntervalsByModifiedIsCollapsed(): Promise<void> {
|
||||
await this.searchCategoriesPage.checkFilterIsCollapsed(this.facetIntervalsByModified);
|
||||
}
|
||||
|
||||
async clickFacetIntervalsByModifiedFilterHeader(): Promise<void> {
|
||||
await this.searchCategoriesPage.clickFilterHeader(this.facetIntervalsByModified);
|
||||
}
|
||||
|
||||
async checkFileTypeFacetLabelIsDisplayed(fileType: string | RegExp): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType)));
|
||||
}
|
||||
|
||||
async checkFileTypeFacetLabelIsNotDisplayed(fileType: string | RegExp): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsNotVisible(this.fileTypeFilter.element(by.cssContainingText('.adf-facet-label', fileType)));
|
||||
}
|
||||
}
|
@@ -1,59 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { BrowserVisibility, DataTableComponentPage, SearchSortingPickerPage } from '@alfresco/adf-testing';
|
||||
import { $ } from 'protractor';
|
||||
|
||||
export class SearchResultsPage {
|
||||
noResultsMessage = $('.app-no-result-message');
|
||||
dataTable = new DataTableComponentPage();
|
||||
searchSortingPicker = new SearchSortingPickerPage();
|
||||
|
||||
getNodeHighlight(content: string) {
|
||||
return this.dataTable.getCellByRowContentAndColumn('Display name', content, 'Search');
|
||||
}
|
||||
|
||||
async tableIsLoaded(): Promise<void> {
|
||||
await this.dataTable.tableIsLoaded();
|
||||
}
|
||||
|
||||
async checkContentIsDisplayed(content: string): Promise<void> {
|
||||
await this.dataTable.checkContentIsDisplayed('Display name', content);
|
||||
}
|
||||
|
||||
async numberOfResultsDisplayed(): Promise<number> {
|
||||
return this.dataTable.numberOfRows();
|
||||
}
|
||||
|
||||
async checkContentIsNotDisplayed(content: string): Promise<void> {
|
||||
await this.dataTable.checkContentIsNotDisplayed('Display name', content);
|
||||
}
|
||||
|
||||
async checkNoResultMessageIsDisplayed(): Promise<void> {
|
||||
await BrowserVisibility.waitUntilElementIsVisible(this.noResultsMessage);
|
||||
}
|
||||
|
||||
async sortByCreated(sortOrder: string): Promise<void> {
|
||||
await this.searchSortingPicker.sortBy(sortOrder, 'Created');
|
||||
await this.dataTable.waitTillContentLoaded();
|
||||
}
|
||||
|
||||
async sortBySize(sortOrder: string): Promise<void> {
|
||||
await this.searchSortingPicker.sortBy(sortOrder, 'Size');
|
||||
await this.dataTable.waitTillContentLoaded();
|
||||
}
|
||||
}
|
@@ -1,295 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 {
|
||||
createApiService,
|
||||
BrowserActions,
|
||||
LocalStorageUtil,
|
||||
LoginPage,
|
||||
StringUtil,
|
||||
UploadActions,
|
||||
UserModel,
|
||||
UsersActions,
|
||||
ViewerPage
|
||||
} from '@alfresco/adf-testing';
|
||||
import { SearchBarPage } from './pages/search-bar.page';
|
||||
import { ContentServicesPage } from '../core/pages/content-services.page';
|
||||
import { SearchResultsPage } from './pages/search-results.page';
|
||||
import { FileModel } from '../models/ACS/file.model';
|
||||
import { FolderModel } from '../models/ACS/folder.model';
|
||||
import { NavigationBarPage } from '../core/pages/navigation-bar.page';
|
||||
import { SearchConfiguration } from './search.config';
|
||||
import { NodeEntry, NodesApi } from '@alfresco/js-api';
|
||||
|
||||
describe('Search component - Search Bar', () => {
|
||||
const search = {
|
||||
inactive: {
|
||||
firstChar: 'x',
|
||||
secondChar: 'y',
|
||||
thirdChar: 'z',
|
||||
name: 'impossible-name-folder' + StringUtil.generateRandomString(8)
|
||||
}
|
||||
};
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const contentServicesPage = new ContentServicesPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchResultPage = new SearchResultsPage();
|
||||
const viewerPage = new ViewerPage();
|
||||
|
||||
const acsUser = new UserModel();
|
||||
const apiService = createApiService();
|
||||
const usersActions = new UsersActions(apiService);
|
||||
const nodesApi = new NodesApi(apiService.getInstance());
|
||||
const uploadActions = new UploadActions(apiService);
|
||||
|
||||
const filename = StringUtil.generateRandomString(16);
|
||||
const firstFolderName = StringUtil.generateRandomString(16);
|
||||
const secondFolderName = StringUtil.generateRandomString(16);
|
||||
const thirdFolderName = StringUtil.generateRandomString(16);
|
||||
const filesToDelete: NodeEntry[] = [];
|
||||
|
||||
const firstFileModel = new FileModel({
|
||||
name: filename,
|
||||
shortName: filename.substring(0, 8)
|
||||
});
|
||||
|
||||
const firstFolderModel = new FolderModel({
|
||||
name: firstFolderName,
|
||||
shortName: firstFolderName.substring(0, 8)
|
||||
});
|
||||
const secondFolder = new FolderModel({
|
||||
name: secondFolderName,
|
||||
shortName: secondFolderName.substring(0, 8)
|
||||
});
|
||||
const thirdFolder = new FolderModel({
|
||||
name: thirdFolderName,
|
||||
shortName: thirdFolderName.substring(0, 8)
|
||||
});
|
||||
|
||||
const term = 'Zoizo';
|
||||
|
||||
let fileHighlightUploaded: NodeEntry;
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
await usersActions.createUser(acsUser);
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
const firstFileUploaded = await uploadActions.uploadFile(firstFileModel.location, firstFileModel.name, '-my-');
|
||||
Object.assign(firstFileModel, firstFileUploaded.entry);
|
||||
|
||||
fileHighlightUploaded = await nodesApi.createNode('-my-', {
|
||||
name: StringUtil.generateRandomString(16),
|
||||
nodeType: 'cm:content',
|
||||
properties: {
|
||||
'cm:title': term,
|
||||
'cm:description': 'Jadore les ' + term
|
||||
}
|
||||
});
|
||||
|
||||
filesToDelete.push(fileHighlightUploaded);
|
||||
filesToDelete.push(firstFileUploaded);
|
||||
filesToDelete.push(await uploadActions.createFolder(firstFolderModel.name, '-my-'));
|
||||
filesToDelete.push(await uploadActions.createFolder(secondFolder.name, '-my-'));
|
||||
filesToDelete.push(await uploadActions.createFolder(thirdFolder.name, '-my-'));
|
||||
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search); // wait search index previous file/folder uploaded
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
for (const currentNode of filesToDelete) {
|
||||
await uploadActions.deleteFileOrFolder(currentNode.entry.id);
|
||||
}
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await BrowserActions.getUrl(browser.baseUrl);
|
||||
});
|
||||
|
||||
it('[C272798] Search bar should be visible', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
|
||||
await BrowserActions.closeMenuAndDialogs();
|
||||
|
||||
await searchBarPage.checkSearchBarIsNotVisible();
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
});
|
||||
|
||||
it('[C272799] Should be possible to hide search bar after input', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterText(firstFolderModel.shortName);
|
||||
});
|
||||
|
||||
it('[C260255] Should display message when searching for an inexistent file', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.checkNoResultMessageIsNotDisplayed();
|
||||
await searchBarPage.enterText(search.inactive.name);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchBarPage.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C260256] Should display file/folder in search suggestion when typing first characters', async () => {
|
||||
await openSearchBar();
|
||||
await searchBarPage.enterText(firstFolderModel.shortName);
|
||||
|
||||
await searchBarPage.resultTableContainsRow(firstFolderModel.name);
|
||||
|
||||
expect(await searchBarPage.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.shortName);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFolderModel.name)).toContain(acsUser.firstName);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFolderModel.name)).toContain(acsUser.lastName);
|
||||
expect(await searchBarPage.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name);
|
||||
|
||||
await searchBarPage.clearText();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterText(firstFileModel.shortName);
|
||||
await searchBarPage.resultTableContainsRow(firstFileModel.name);
|
||||
|
||||
expect(await searchBarPage.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.shortName);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFileModel.name)).toContain(acsUser.firstName);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFileModel.name)).toContain(acsUser.lastName);
|
||||
expect(await searchBarPage.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name);
|
||||
});
|
||||
|
||||
it('[C272800] Should display file/folder in search suggestion when typing name', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterText(firstFolderModel.name);
|
||||
|
||||
await searchBarPage.resultTableContainsRow(firstFolderModel.name);
|
||||
|
||||
expect(await searchBarPage.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.name);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFolderModel.name)).toContain(acsUser.firstName);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFolderModel.name)).toContain(acsUser.lastName);
|
||||
expect(await searchBarPage.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name);
|
||||
|
||||
await searchBarPage.clearText();
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterText(firstFileModel.name);
|
||||
await searchBarPage.resultTableContainsRow(firstFileModel.name);
|
||||
|
||||
expect(await searchBarPage.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.name);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFileModel.name)).toContain(acsUser.firstName);
|
||||
expect(await searchBarPage.getSpecificRowsAuthor(firstFileModel.name)).toContain(acsUser.lastName);
|
||||
expect(await searchBarPage.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name);
|
||||
});
|
||||
|
||||
it('[C260257] Should display content when clicking on folder from search suggestions', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterText(firstFolderModel.shortName);
|
||||
|
||||
await searchBarPage.resultTableContainsRow(firstFolderModel.name);
|
||||
await searchBarPage.clickOnSpecificRow(firstFolderModel.name);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
expect(await contentServicesPage.currentFolderName()).toEqual(firstFolderModel.name);
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
await searchBarPage.enterText(firstFileModel.name);
|
||||
await searchBarPage.resultTableContainsRow(firstFileModel.name);
|
||||
|
||||
await searchBarPage.clickOnSpecificRow(firstFileModel.name);
|
||||
|
||||
expect(await viewerPage.getDisplayedFileName()).toEqual(firstFileModel.name);
|
||||
|
||||
await viewerPage.clickCloseButton();
|
||||
});
|
||||
|
||||
it('[C272801] Should display message when searching for non-existent folder', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterTextAndPressEnter(search.inactive.name);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResultPage.checkNoResultMessageIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C272802] Should be able to find an existent folder in search results', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterTextAndPressEnter(firstFolderModel.name);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResultPage.checkContentIsDisplayed(firstFolderModel.name);
|
||||
});
|
||||
|
||||
it('[C260258] Should be able to find an existent file in search results', async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterTextAndPressEnter(firstFileModel.name);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResultPage.checkContentIsDisplayed(firstFileModel.name);
|
||||
});
|
||||
|
||||
it(`[C290137] Should be able to search by '%'`, async () => {
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterTextAndPressEnter('%');
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
});
|
||||
|
||||
describe('Highlight', () => {
|
||||
const searchConfiguration = SearchConfiguration.getConfiguration();
|
||||
|
||||
beforeAll(async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(searchConfiguration));
|
||||
|
||||
await openSearchBar();
|
||||
|
||||
await searchBarPage.enterTextAndPressEnter(term);
|
||||
await searchResultPage.dataTable.waitTillContentLoaded();
|
||||
});
|
||||
|
||||
it('[C299212] Should be able to configure the highlight option for search results', async () => {
|
||||
const text = await searchResultPage.getNodeHighlight(fileHighlightUploaded.entry.name).getText();
|
||||
expect(text.includes(`¿${term}?`)).toBe(true);
|
||||
expect(text.includes(`(${term})`)).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Open the search bar
|
||||
*/
|
||||
async function openSearchBar(): Promise<void> {
|
||||
if (await searchBarPage.searchBarExpanded.isDisplayed()) {
|
||||
await searchBarPage.clearText();
|
||||
await searchBarPage.checkSearchBarIsNotVisible();
|
||||
}
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.checkSearchBarIsVisible();
|
||||
}
|
||||
});
|
@@ -1,304 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { SearchBarPage } from './pages/search-bar.page';
|
||||
import { SearchFiltersPage } from './pages/search-filters.page';
|
||||
import { SearchResultsPage } from './pages/search-results.page';
|
||||
import { FileModel } from '../models/ACS/file.model';
|
||||
import { NavigationBarPage } from '../core/pages/navigation-bar.page';
|
||||
import {
|
||||
createApiService,
|
||||
BrowserActions,
|
||||
DocumentListPage,
|
||||
LocalStorageUtil,
|
||||
LoginPage,
|
||||
PaginationPage,
|
||||
StringUtil,
|
||||
UploadActions,
|
||||
UserModel,
|
||||
UsersActions
|
||||
} from '@alfresco/adf-testing';
|
||||
import { browser } from 'protractor';
|
||||
import { SearchConfiguration } from './search.config';
|
||||
import { getYear } from 'date-fns';
|
||||
import { NodeEntry } from '@alfresco/js-api';
|
||||
|
||||
describe('Search Filters', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
const paginationPage = new PaginationPage();
|
||||
const contentList = new DocumentListPage();
|
||||
const searchResults = new SearchResultsPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
|
||||
const apiService = createApiService();
|
||||
const uploadActions = new UploadActions(apiService);
|
||||
const usersActions = new UsersActions(apiService);
|
||||
|
||||
const acsUser = new UserModel();
|
||||
|
||||
const filename = StringUtil.generateRandomString(16);
|
||||
const fileNamePrefix = StringUtil.generateRandomString(5);
|
||||
const uniqueFileName1 = fileNamePrefix + StringUtil.generateRandomString(5);
|
||||
const uniqueFileName2 = fileNamePrefix + StringUtil.generateRandomString(5);
|
||||
const uniqueFileName3 = fileNamePrefix + StringUtil.generateRandomString(5);
|
||||
|
||||
const fileModel = new FileModel({
|
||||
name: filename,
|
||||
shortName: filename.substring(0, 8)
|
||||
});
|
||||
|
||||
const pngFileModel = new FileModel({
|
||||
name: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name,
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_path
|
||||
});
|
||||
|
||||
const txtFileModel1 = new FileModel({
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_path,
|
||||
name: `${uniqueFileName1}.txt`
|
||||
});
|
||||
|
||||
const jpgFileModel = new FileModel({
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.JPG.file_path,
|
||||
name: `${uniqueFileName2}.jpg`
|
||||
});
|
||||
|
||||
const txtFileModel2 = new FileModel({
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_path,
|
||||
name: `${uniqueFileName3}.txt`
|
||||
});
|
||||
|
||||
let fileUploaded: NodeEntry;
|
||||
let fileTypePng: NodeEntry;
|
||||
let fileTypeTxt1: NodeEntry;
|
||||
let fileTypeJpg: NodeEntry;
|
||||
let fileTypeTxt2: NodeEntry;
|
||||
|
||||
const filter = { type: 'TYPE-PNG Image' };
|
||||
|
||||
let jsonFile;
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
await usersActions.createUser(acsUser);
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
fileUploaded = await uploadActions.uploadFile(fileModel.location, fileModel.name, '-my-');
|
||||
fileTypePng = await uploadActions.uploadFile(pngFileModel.location, pngFileModel.name, '-my-');
|
||||
fileTypeTxt1 = await uploadActions.uploadFile(txtFileModel1.location, txtFileModel1.name, '-my-');
|
||||
fileTypeJpg = await uploadActions.uploadFile(jpgFileModel.location, jpgFileModel.name, '-my-');
|
||||
fileTypeTxt2 = await uploadActions.uploadFile(txtFileModel2.location, txtFileModel2.name, '-my-');
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search); // wait search index previous file/folder uploaded
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
jsonFile = SearchConfiguration.getConfiguration();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await apiService.login(acsUser.username, acsUser.password);
|
||||
|
||||
await uploadActions.deleteFileOrFolder(fileUploaded.entry.id);
|
||||
await uploadActions.deleteFileOrFolder(fileTypePng.entry.id);
|
||||
await uploadActions.deleteFileOrFolder(fileTypeTxt1.entry.id);
|
||||
await uploadActions.deleteFileOrFolder(fileTypeTxt2.entry.id);
|
||||
await uploadActions.deleteFileOrFolder(fileTypeJpg.entry.id);
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
it('[C291980] Should group search facets under specified labels', async () => {
|
||||
const currentYear = getYear(new Date());
|
||||
|
||||
jsonFile.facetQueries.queries[0] = {
|
||||
query: `created:${currentYear}`,
|
||||
label: 'SEARCH.FACET_QUERIES.CREATED_THIS_YEAR'
|
||||
};
|
||||
jsonFile.facetQueries.queries[1] = {
|
||||
query: `content.mimetype:text/html`,
|
||||
label: 'SEARCH.FACET_QUERIES.MIMETYPE',
|
||||
group: 'Type facet queries'
|
||||
};
|
||||
jsonFile.facetQueries.queries[2] = {
|
||||
query: `content.size:[0 TO 10240]`,
|
||||
label: 'SEARCH.FACET_QUERIES.XTRASMALL',
|
||||
group: 'Size facet queries'
|
||||
};
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed();
|
||||
await searchFiltersPage.checkTypeFacetQueryGroupIsDisplayed();
|
||||
|
||||
await searchFiltersPage.checkSizeFacetQueryGroupIsDisplayed();
|
||||
});
|
||||
|
||||
it('[C286298] Should be able to cancel a filter using "x" button from the toolbar', async () => {
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
|
||||
await searchBarPage.enterTextAndPressEnter(fileUploaded.entry.name);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
|
||||
const userOption = `${acsUser.firstName} ${acsUser.lastName}`;
|
||||
const searchCheckListPage = await searchFiltersPage.creatorCheckListFiltersPage().enterFilterInputValue(userOption);
|
||||
await searchCheckListPage.checkChipIsDisplayed(userOption);
|
||||
await searchCheckListPage.removeFilterOption(userOption);
|
||||
await searchCheckListPage.checkChipIsNotDisplayed(userOption);
|
||||
});
|
||||
|
||||
it('[C277146] Should Show more/less buttons be hidden when inactive', async () => {
|
||||
await BrowserActions.getUrl(`${browser.baseUrl}/search;q=*`);
|
||||
|
||||
const searchCheckListPage = searchFiltersPage.fileTypeCheckListFiltersPage();
|
||||
|
||||
await searchCheckListPage.checkShowLessButtonIsNotDisplayed();
|
||||
await searchCheckListPage.checkShowMoreButtonIsDisplayed();
|
||||
await searchCheckListPage.clickShowMoreButtonUntilIsNotDisplayed();
|
||||
await searchCheckListPage.checkShowLessButtonIsDisplayed();
|
||||
await searchCheckListPage.clickShowLessButtonUntilIsNotDisplayed();
|
||||
});
|
||||
|
||||
it('[C286556] Search categories should preserve their collapsed/expanded state after the search', async () => {
|
||||
await BrowserActions.getUrl(`${browser.baseUrl}/search;q=*`);
|
||||
|
||||
await searchFiltersPage.clickFileTypeListFilter();
|
||||
await searchFiltersPage.checkFileTypeFilterIsCollapsed();
|
||||
await searchFiltersPage.clickFileSizeFilterHeader();
|
||||
await searchFiltersPage.checkFileSizeFilterIsCollapsed();
|
||||
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().enterFilterInputValue('Administrator');
|
||||
|
||||
await searchFiltersPage.checkFileTypeFilterIsCollapsed();
|
||||
await searchFiltersPage.checkFileSizeFilterIsCollapsed();
|
||||
});
|
||||
|
||||
it('[C287796] Should be able to display the correct bucket number after selecting a filter', async () => {
|
||||
await BrowserActions.getUrl(`${browser.baseUrl}/search;q=*`);
|
||||
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().clickCheckListOption('PNG');
|
||||
|
||||
const bucketNumberForFilter = await searchFiltersPage.fileTypeCheckListFiltersPage().getBucketNumberOfFilterType(filter.type);
|
||||
const resultFileNames: any = await contentList.getAllRowsColumnValues('Display name');
|
||||
|
||||
expect(bucketNumberForFilter).not.toEqual('0');
|
||||
expect(await paginationPage.getTotalNumberOfFiles()).toEqual(bucketNumberForFilter);
|
||||
|
||||
resultFileNames.map(async (nameOfResultFiles) => {
|
||||
expect(nameOfResultFiles.toLowerCase()).toContain('.png');
|
||||
});
|
||||
});
|
||||
|
||||
it('[C297509] Should display search intervals under specified labels from config', async () => {
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkFacetIntervalsByCreatedIsDisplayed();
|
||||
await searchFiltersPage.checkFacetIntervalsByCreatedIsExpanded();
|
||||
await searchFiltersPage.clickFacetIntervalsByCreatedFilterHeader();
|
||||
await searchFiltersPage.checkFacetIntervalsByCreatedIsCollapsed();
|
||||
await searchFiltersPage.clickFacetIntervalsByCreatedFilterHeader();
|
||||
await searchFiltersPage.checkFacetIntervalsByCreatedIsExpanded();
|
||||
await searchFiltersPage.checkFacetIntervalsByModifiedIsDisplayed();
|
||||
await searchFiltersPage.checkFacetIntervalsByModifiedIsExpanded();
|
||||
await searchFiltersPage.clickFacetIntervalsByModifiedFilterHeader();
|
||||
await searchFiltersPage.checkFacetIntervalsByModifiedIsCollapsed();
|
||||
await searchFiltersPage.clickFacetIntervalsByModifiedFilterHeader();
|
||||
await searchFiltersPage.checkFacetIntervalsByModifiedIsExpanded();
|
||||
});
|
||||
|
||||
it('[C299200] Should reset the filters facet with search query', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter(fileTypeTxt1.entry.name);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
await searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name);
|
||||
await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (1)');
|
||||
await searchFiltersPage.checkFileTypeFacetLabelIsNotDisplayed('JPEG Image');
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
|
||||
await searchBarPage.enterTextAndPressEnter(fileNamePrefix);
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
await searchResults.checkContentIsDisplayed(fileTypeTxt1.entry.name);
|
||||
await searchResults.checkContentIsDisplayed(fileTypeTxt2.entry.name);
|
||||
await searchResults.checkContentIsDisplayed(fileTypeJpg.entry.name);
|
||||
await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('Plain Text (2)');
|
||||
await searchFiltersPage.checkFileTypeFacetLabelIsDisplayed('JPEG Image (1)');
|
||||
});
|
||||
|
||||
describe('Change config', () => {
|
||||
it('[C291802] Should be able to filter facet fields with "Contains"', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile['filterWithContains'] = true;
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().searchInFilter('dminis');
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().checkCheckListAutocompleteOptionIsDisplayed('Administrator');
|
||||
});
|
||||
|
||||
it('[C291981] Should group search facets under the default label, by default', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkDefaultFacetQueryGroupIsDisplayed();
|
||||
expect(await searchFiltersPage.isTypeFacetQueryGroupPresent()).toBe(false);
|
||||
expect(await searchFiltersPage.isSizeFacetQueryGroupPresent()).toBe(false);
|
||||
});
|
||||
|
||||
it('[C299124] Should be able to parse escaped empty spaced labels inside facetFields', async () => {
|
||||
await navigationBarPage.navigateToContentServices();
|
||||
|
||||
jsonFile.facetFields.fields[0].label = 'My File Types';
|
||||
jsonFile.facetFields.fields[1].label = 'My File Sizes';
|
||||
await LocalStorageUtil.setConfigField('search', JSON.stringify(jsonFile));
|
||||
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter('*');
|
||||
await searchResults.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Types');
|
||||
await searchFiltersPage.checkCustomFacetFieldLabelIsDisplayed('My File Sizes');
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,241 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 { createApiService, LoginPage, StringUtil, UploadActions, UserModel, UsersActions } from '@alfresco/adf-testing';
|
||||
import { browser } from 'protractor';
|
||||
import { SearchBarPage } from './pages/search-bar.page';
|
||||
import { SearchResultsPage } from './pages/search-results.page';
|
||||
import { SearchFiltersPage } from './pages/search-filters.page';
|
||||
import { FileModel } from '../models/ACS/file.model';
|
||||
import { NavigationBarPage } from '../core/pages/navigation-bar.page';
|
||||
import CONSTANTS = require('../util/constants');
|
||||
import { NodeEntry, SiteEntry, SitesApi } from '@alfresco/js-api';
|
||||
|
||||
describe('Search Component - Multi-Select Facet', () => {
|
||||
const loginPage = new LoginPage();
|
||||
const searchBarPage = new SearchBarPage();
|
||||
const searchResultsPage = new SearchResultsPage();
|
||||
const searchFiltersPage = new SearchFiltersPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
|
||||
const apiService = createApiService();
|
||||
const uploadActions = new UploadActions(apiService);
|
||||
const usersActions = new UsersActions(apiService);
|
||||
|
||||
const createSite = async (user: UserModel) => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
await usersActions.createUser(user);
|
||||
await apiService.login(user.username, user.password);
|
||||
const sitesApi = new SitesApi(apiService.getInstance());
|
||||
site = await sitesApi.createSite({
|
||||
title: StringUtil.generateRandomString(8),
|
||||
visibility: 'PUBLIC'
|
||||
});
|
||||
};
|
||||
const randomName = StringUtil.generateRandomString();
|
||||
const txtFileInfo = new FileModel({
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.TXT_0B.file_path,
|
||||
name: `${randomName}.txt`
|
||||
});
|
||||
|
||||
let site: SiteEntry;
|
||||
let userOption: string;
|
||||
|
||||
describe('', () => {
|
||||
let jpgFile: NodeEntry;
|
||||
let jpgFileSite: NodeEntry;
|
||||
let txtFile: NodeEntry;
|
||||
let txtFileSite: NodeEntry;
|
||||
const acsUser = new UserModel();
|
||||
|
||||
const jpgFileInfo = new FileModel({
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.JPG.file_path,
|
||||
name: `${randomName}.jpg`
|
||||
});
|
||||
|
||||
beforeAll(async () => {
|
||||
await createSite(acsUser);
|
||||
|
||||
jpgFile = await uploadActions.uploadFile(jpgFileInfo.location, jpgFileInfo.name, '-my-');
|
||||
jpgFileSite = await uploadActions.uploadFile(jpgFileInfo.location, jpgFileInfo.name, site.entry.guid);
|
||||
txtFile = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, '-my-');
|
||||
txtFileSite = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, site.entry.guid);
|
||||
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter(`${randomName}`);
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
userOption = `${acsUser.firstName} ${acsUser.lastName}`;
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().enterFilterInputValue(userOption);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
const sitesApi = new SitesApi(apiService.getInstance());
|
||||
await Promise.all([
|
||||
uploadActions.deleteFileOrFolder(jpgFile.entry.id),
|
||||
uploadActions.deleteFileOrFolder(jpgFileSite.entry.id),
|
||||
uploadActions.deleteFileOrFolder(txtFile.entry.id),
|
||||
uploadActions.deleteFileOrFolder(txtFileSite.entry.id)
|
||||
]);
|
||||
|
||||
await sitesApi.deleteSite(site.entry.id, { permanent: true });
|
||||
await navigationBarPage.clickLogoutButton();
|
||||
});
|
||||
|
||||
it('[C280054] Should be able to select multiple items from a search facet filter', async () => {
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter(`${randomName}`);
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
userOption = `${acsUser.firstName} ${acsUser.lastName}`;
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().enterFilterInputValue(userOption);
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text');
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
expect(searchResultsPage.numberOfResultsDisplayed()).toBe(2);
|
||||
await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
await searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name);
|
||||
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image');
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(4);
|
||||
await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
await searchResultsPage.checkContentIsDisplayed(txtFileSite.entry.name);
|
||||
await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name);
|
||||
await searchResultsPage.checkContentIsDisplayed(jpgFileSite.entry.name);
|
||||
});
|
||||
});
|
||||
|
||||
describe('', () => {
|
||||
let jpgFile: NodeEntry;
|
||||
let txtFile: NodeEntry;
|
||||
const userUploadingTxt = new UserModel();
|
||||
const userUploadingImg = new UserModel();
|
||||
|
||||
const jpgFileInfo = new FileModel({
|
||||
location: browser.params.resources.Files.ADF_DOCUMENTS.JPG.file_path,
|
||||
name: `${randomName}.jpg`
|
||||
});
|
||||
|
||||
beforeAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
|
||||
await usersActions.createUser(userUploadingTxt);
|
||||
await usersActions.createUser(userUploadingImg);
|
||||
|
||||
await apiService.login(userUploadingTxt.username, userUploadingTxt.password);
|
||||
|
||||
const sitesApi = new SitesApi(apiService.getInstance());
|
||||
|
||||
site = await sitesApi.createSite({
|
||||
title: StringUtil.generateRandomString(8),
|
||||
visibility: 'PUBLIC'
|
||||
});
|
||||
|
||||
await sitesApi.createSiteMembership(site.entry.id, {
|
||||
id: userUploadingImg.username,
|
||||
role: CONSTANTS.CS_USER_ROLES.MANAGER
|
||||
});
|
||||
|
||||
txtFile = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, site.entry.guid);
|
||||
|
||||
await apiService.login(userUploadingImg.username, userUploadingImg.password);
|
||||
|
||||
jpgFile = await uploadActions.uploadFile(jpgFileInfo.location, jpgFileInfo.name, site.entry.guid);
|
||||
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(userUploadingImg.username, userUploadingImg.password);
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter(`*${randomName}*`);
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().enterFilterInputValue(`${userUploadingTxt.firstName} ${userUploadingTxt.lastName}`);
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().enterFilterInputValue(`${userUploadingImg.firstName} ${userUploadingImg.lastName}`);
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name);
|
||||
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text');
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('JPEG Image');
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(2);
|
||||
await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
await searchResultsPage.checkContentIsDisplayed(jpgFile.entry.name);
|
||||
});
|
||||
});
|
||||
|
||||
describe('', () => {
|
||||
let txtFile: NodeEntry;
|
||||
const acsUser = new UserModel();
|
||||
|
||||
beforeAll(async () => {
|
||||
await createSite(acsUser);
|
||||
|
||||
txtFile = await uploadActions.uploadFile(txtFileInfo.location, txtFileInfo.name, '-my-');
|
||||
await browser.sleep(browser.params.testConfig.timeouts.index_search);
|
||||
|
||||
await loginPage.login(acsUser.username, acsUser.password);
|
||||
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter(`*${randomName}*`);
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await apiService.loginWithProfile('admin');
|
||||
await uploadActions.deleteFileOrFolder(txtFile.entry.id);
|
||||
const sitesApi = new SitesApi(apiService.getInstance());
|
||||
await sitesApi.deleteSite(site.entry.id, { permanent: true });
|
||||
});
|
||||
|
||||
it('[C280058] Should update filter facets items number when another filter facet item is selected', async () => {
|
||||
await searchBarPage.checkSearchIconIsVisible();
|
||||
await searchBarPage.clickOnSearchIcon();
|
||||
await searchBarPage.enterTextAndPressEnter(`*${randomName}*`);
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
await searchFiltersPage.checkSearchFiltersIsDisplayed();
|
||||
await searchFiltersPage.fileTypeCheckListFiltersPage().filterBy('Plain Text');
|
||||
await searchFiltersPage.creatorCheckListFiltersPage().enterFilterInputValue(`${acsUser.firstName} ${acsUser.lastName}`);
|
||||
await searchResultsPage.dataTable.waitTillContentLoaded();
|
||||
|
||||
expect(await searchResultsPage.numberOfResultsDisplayed()).toBe(1);
|
||||
await searchResultsPage.checkContentIsDisplayed(txtFile.entry.name);
|
||||
});
|
||||
});
|
||||
});
|
@@ -1,218 +0,0 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
||||
*
|
||||
* 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 {
|
||||
|
||||
static getConfiguration() {
|
||||
return {
|
||||
'app:fields': [
|
||||
'cm:name',
|
||||
'cm:title',
|
||||
'cm:description',
|
||||
'ia:whatEvent',
|
||||
'ia:descriptionEvent',
|
||||
'lnk:title',
|
||||
'lnk:description',
|
||||
'TEXT',
|
||||
'TAG'
|
||||
],
|
||||
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: 'SEARCH.FACET_FIELDS.TYPE'},
|
||||
{field: 'content.size', mincount: 1, label: 'SEARCH.FACET_FIELDS.SIZE'},
|
||||
{field: 'creator', mincount: 1, label: 'SEARCH.FACET_FIELDS.CREATOR'},
|
||||
{field: 'modifier', mincount: 1, label: 'SEARCH.FACET_FIELDS.MODIFIER'},
|
||||
{field: 'created', mincount: 1, label: 'SEARCH.FACET_FIELDS.CREATED'}
|
||||
]
|
||||
},
|
||||
facetQueries: {
|
||||
label: 'My facet queries',
|
||||
pageSize: 5,
|
||||
queries: [
|
||||
{query: 'created:2018', label: '1.Created This Year'},
|
||||
{query: 'content.mimetype:text/html', label: '2.Type: HTML'},
|
||||
{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',
|
||||
displayedLabelsByField: {
|
||||
'cm:created': 'Created Date'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'queryType',
|
||||
name: 'Type',
|
||||
enabled: true,
|
||||
component: {
|
||||
selector: 'radio',
|
||||
settings: {
|
||||
field: null,
|
||||
pageSize: 5,
|
||||
options: [
|
||||
{name: 'None', value: '', default: true},
|
||||
{name: 'All', value: 'TYPE:\'cm:folder\' OR TYPE:\'cm:content\''},
|
||||
{name: 'Folder', value: 'TYPE:\'cm:folder\''},
|
||||
{name: 'Document', value: 'TYPE:\'cm:content\''}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'createdModifiedDateRange',
|
||||
name: 'Date',
|
||||
enabled: true,
|
||||
component: {
|
||||
selector: 'date-range',
|
||||
settings: {
|
||||
dateFormat: 'dd-MMM-yy',
|
||||
maxDate: 'today',
|
||||
field: 'cm:created, cm:modified',
|
||||
displayedLabelsByField: {
|
||||
'cm:created': 'Created Date',
|
||||
'cm:modified': 'Modified Date'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
highlight: {
|
||||
prefix: '¿',
|
||||
postfix: '?',
|
||||
mergeContiguous: true,
|
||||
fields: [
|
||||
{
|
||||
field: 'cm:title'
|
||||
},
|
||||
{
|
||||
field: 'description',
|
||||
prefix: '(',
|
||||
postfix: ')'
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user