/*! * @license * Alfresco Example Content Application * * Copyright (C) 2005 - 2020 Alfresco Software Limited * * This file is part of the Alfresco Example Content Application. * If the software was purchased under a paid Alfresco license, the terms of * the paid license agreement will prevail. Otherwise, the software is * provided under the following open source license terms: * * The Alfresco Example Content Application is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The Alfresco Example Content Application is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ import { ElementFinder, by, browser, ExpectedConditions as EC, ElementArrayFinder } from 'protractor'; import { BROWSER_WAIT_TIMEOUT } from '../../configs'; import { Component } from '../component'; export class SearchSortingPicker extends Component { private static selectors = { root: 'adf-search-sorting-picker', sortByOption: '.mat-option .mat-option-text' }; sortOrderButton: ElementFinder = this.component.element(by.css('button[mat-icon-button]')); sortByDropdownCollapsed: ElementFinder = this.component.element(by.css('.mat-select')); sortByDropdownExpanded: ElementFinder = browser.element(by.css('.mat-select-panel')); sortByList: ElementArrayFinder = this.sortByDropdownExpanded.all(by.css(SearchSortingPicker.selectors.sortByOption)); constructor(ancestor?: string) { super(SearchSortingPicker.selectors.root, ancestor); } async waitForSortByDropdownToExpand(): Promise { await browser.wait(EC.visibilityOf(this.sortByDropdownExpanded), BROWSER_WAIT_TIMEOUT, 'Timeout waiting for sortBy dropdown to expand'); } async isSortOrderButtonDisplayed(): Promise { return (await this.sortOrderButton.isPresent()) && (await this.sortOrderButton.isDisplayed()); } async getSortOrder(): Promise<'ASC' | 'DESC' | ''> { const orderArrow = await this.sortOrderButton.getText(); if ( orderArrow.includes('upward') ) { return 'ASC' } else if ( orderArrow.includes('downward') ) { return 'DESC' } else { return ''; } } async isSortByOptionDisplayed(): Promise { return (await this.sortByDropdownCollapsed.isPresent()) && (await this.sortByDropdownCollapsed.isDisplayed()); } async isSortByDropdownExpanded(): Promise { return (await this.sortByDropdownExpanded.isPresent()) && (await this.sortByDropdownExpanded.isDisplayed()); } async getSelectedSortByOption(): Promise { return await this.sortByDropdownCollapsed.getText(); } async clickSortByDropdown(): Promise { await this.sortByDropdownCollapsed.click(); await this.waitForSortByDropdownToExpand(); } async getSortByOptionsList(): Promise { const list: string[] = await this.sortByList.map(async option => { return option.getText(); }); return list; } async sortByOption(option: string): Promise { if ( !(await this.isSortByDropdownExpanded()) ) { await this.clickSortByDropdown(); } const elem = browser.element(by.cssContainingText(SearchSortingPicker.selectors.sortByOption, option)); await elem.click(); } async sortByName(): Promise { await this.sortByOption('Filename'); } async sortByRelevance(): Promise { await this.sortByOption('Relevance'); } async sortByTitle(): Promise { await this.sortByOption('Title'); } async sortByModifiedDate(): Promise { await this.sortByOption('Modified date'); } async sortByModifier(): Promise { await this.sortByOption('Modifier'); } async sortByCreatedDate(): Promise { await this.sortByOption('Created date'); } async sortBySize(): Promise { await this.sortByOption('Size'); } async sortByType(): Promise { await this.sortByOption('Type'); } async setSortOrderASC(): Promise { if ( (await this.getSortOrder()) !== 'ASC' ) { await this.sortOrderButton.click(); } } async setSortOrderDESC(): Promise { if ( (await this.getSortOrder()) !== 'DESC' ) { await this.sortOrderButton.click(); } } }