mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[ADF-3710] E2E for search date range (#3945)
* [ADF-3710] E2E for search date range * Improving PR for [ADF-3710]
This commit is contained in:
committed by
Eugenio Romano
parent
6ead388e55
commit
4a4b1519bf
@@ -0,0 +1,227 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Copyright 2016 Alfresco Software, Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { LoginPage } from '../../../pages/adf/loginPage';
|
||||||
|
import SearchDialog = require('../../../pages/adf/dialog/searchDialog');
|
||||||
|
import DataTablePage = require('../../../pages/adf/dataTablePage');
|
||||||
|
import { SearchResultsPage } from '../../../pages/adf/searchResultsPage';
|
||||||
|
import { DatePickerPage } from '../../../pages/adf/material/datePickerPage';
|
||||||
|
import { NavigationBarPage } from '../../../pages/adf/navigationBarPage';
|
||||||
|
import { ConfigEditorPage } from '../../../pages/adf/configEditorPage';
|
||||||
|
import { SearchFiltersPage } from '../../../pages/adf/searchFiltersPage';
|
||||||
|
import path = require('path');
|
||||||
|
|
||||||
|
import TestConfig = require('../../../test.config');
|
||||||
|
|
||||||
|
import AlfrescoApi = require('alfresco-js-api-node');
|
||||||
|
import { browser } from 'protractor';
|
||||||
|
|
||||||
|
describe('Search Filters', () => {
|
||||||
|
|
||||||
|
let loginPage = new LoginPage();
|
||||||
|
let searchDialog = new SearchDialog();
|
||||||
|
let searchFilters = new SearchFiltersPage();
|
||||||
|
let dateRangeFilter = searchFilters.createdDateRangeFilterPage();
|
||||||
|
let searchResults = new SearchResultsPage();
|
||||||
|
let datePicker = new DatePickerPage();
|
||||||
|
let navigationBar = new NavigationBarPage();
|
||||||
|
let configEditor = new ConfigEditorPage();
|
||||||
|
let dataTable = new DataTablePage();
|
||||||
|
|
||||||
|
beforeAll(async (done) => {
|
||||||
|
|
||||||
|
this.alfrescoJsApi = new AlfrescoApi({
|
||||||
|
provider: 'ECM',
|
||||||
|
hostEcm: TestConfig.adf.url
|
||||||
|
});
|
||||||
|
|
||||||
|
loginPage.loginToContentServices(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||||
|
|
||||||
|
searchDialog.checkSearchIconIsVisible()
|
||||||
|
.clickOnSearchIcon()
|
||||||
|
.enterTextAndPressEnter('*');
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
searchFilters.checkCreatedRangeFilterIsDisplayed()
|
||||||
|
.clickCreatedRangeFilterHeader()
|
||||||
|
.checkCreatedRangeFilterIsExpanded();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async (done) => {
|
||||||
|
await browser.refresh();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277106] Should display default values for Date Range widget', () => {
|
||||||
|
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||||
|
.checkFromDateToggleIsDisplayed()
|
||||||
|
.checkToFieldIsDisplayed()
|
||||||
|
.checkToDateToggleIsDisplayed()
|
||||||
|
.checkApplyButtonIsDisplayed()
|
||||||
|
.checkApplyButtonIsDisabled()
|
||||||
|
.checkClearButtonIsDisplayed();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277104] Should be able to set dates using date pickers', () => {
|
||||||
|
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||||
|
.selectTodayDate();
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(dateRangeFilter.getFromDate()).toEqual(dateRangeFilter.getFromCalendarSelectedDate());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277105] Should be able to type a date', () => {
|
||||||
|
let date = '01-May-18';
|
||||||
|
dateRangeFilter.putFromDate(date);
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(dateRangeFilter.getFromCalendarSelectedDate()).toEqual(dateRangeFilter.getFromDate());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277119] FROM and TO dates should depend on each other', () => {
|
||||||
|
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||||
|
.checkDatesAfterDateAreDisabled(new Date())
|
||||||
|
.closeDatePicker();
|
||||||
|
|
||||||
|
dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker()
|
||||||
|
.checkDatesAfterDateAreDisabled(new Date())
|
||||||
|
.closeDatePicker();
|
||||||
|
|
||||||
|
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||||
|
.selectTodayDate()
|
||||||
|
.checkDatePickerIsNotDisplayed();
|
||||||
|
|
||||||
|
dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker()
|
||||||
|
.checkDatesBeforeDateAreDisabled(new Date())
|
||||||
|
.checkDatesAfterDateAreDisabled(new Date());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277107] Should be able to apply a date range', () => {
|
||||||
|
let fromDate, toDate;
|
||||||
|
dateRangeFilter.checkFromDateToggleIsDisplayed().openFromDatePicker()
|
||||||
|
.selectTodayDate()
|
||||||
|
.checkDatePickerIsNotDisplayed();
|
||||||
|
dateRangeFilter.getFromDate().then((date) => {
|
||||||
|
fromDate = datePicker.convertDefaultFormatToDate(date);
|
||||||
|
});
|
||||||
|
|
||||||
|
dateRangeFilter.checkApplyButtonIsDisabled();
|
||||||
|
|
||||||
|
dateRangeFilter.checkToDateToggleIsDisplayed().openToDatePicker()
|
||||||
|
.selectTodayDate()
|
||||||
|
.checkDatePickerIsNotDisplayed();
|
||||||
|
dateRangeFilter.getToDate().then((date) => {
|
||||||
|
toDate = datePicker.convertDefaultFormatToDate(date);
|
||||||
|
});
|
||||||
|
|
||||||
|
dateRangeFilter.checkApplyButtonIsEnabled()
|
||||||
|
.clickApplyButton();
|
||||||
|
|
||||||
|
searchResults.sortByCreated(true);
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||||
|
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||||
|
this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then((node) => {
|
||||||
|
let nodeCreation = new Date(node.entry.createdAt);
|
||||||
|
nodeCreation.setHours(0, 0, 0, 0);
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(nodeCreation.getTime() >= fromDate.getTime()).toBe(true);
|
||||||
|
await expect(nodeCreation.getTime() <= toDate.getTime()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
searchResults.sortByCreated(false);
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
let firstResult = await dataTable.getNodeIdFirstElement();
|
||||||
|
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||||
|
this.alfrescoJsApi.core.nodesApi.getNode(firstResult).then((node) => {
|
||||||
|
let nodeCreation = new Date(node.entry.createdAt);
|
||||||
|
nodeCreation.setHours(0, 0, 0, 0);
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(nodeCreation.getTime() >= fromDate.getTime()).toBe(true);
|
||||||
|
await expect(nodeCreation.getTime() <= toDate.getTime()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => {
|
||||||
|
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||||
|
.clickFromField()
|
||||||
|
.clickToField()
|
||||||
|
.checkFromErrorMessageIsDisplayed('Required value')
|
||||||
|
.clickFromField()
|
||||||
|
.checkToErrorMessageIsDisplayed('Required value');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277114] Should display warning message if user doesn\'t set the date range properly', () => {
|
||||||
|
let toDate = '01-May-18';
|
||||||
|
let fromDate = '16-May-18';
|
||||||
|
|
||||||
|
dateRangeFilter.checkToFieldIsDisplayed()
|
||||||
|
.putToDate(toDate)
|
||||||
|
.checkFromFieldIsDisplayed()
|
||||||
|
.putFromDate(fromDate)
|
||||||
|
.clickFromField()
|
||||||
|
.checkToErrorMessageIsDisplayed('No days selected.');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277115] Should display warning message if user types a date later than today\'s date', () => {
|
||||||
|
let tomorrowDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
|
||||||
|
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||||
|
.putFromDate(datePicker.convertDateToDefaultFormat(tomorrowDate))
|
||||||
|
.checkFromErrorMessageIsDisplayed('The date is beyond the maximum date.');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277108] Should display a warning message when user doesn\'t set the date range at all', () => {
|
||||||
|
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||||
|
.putFromDate('Wrong Format')
|
||||||
|
.clickToField()
|
||||||
|
.checkFromErrorMessageIsDisplayed('Invalid date. The date must be in the format \'DD-MMM-YY\'')
|
||||||
|
.putFromDate('01-May-18')
|
||||||
|
.checkFromErrorMessageIsNotDisplayed();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('[C277117] Should be able to change date format', () => {
|
||||||
|
let json = JSON.parse(require('fs').readFileSync(path.join(TestConfig.main.rootPath, '/content-services/search/search.config.json'), 'utf8'));
|
||||||
|
json.categories[4].component.settings.dateFormat = 'MM-DD-YY';
|
||||||
|
|
||||||
|
navigationBar.clickConfigEditorButton();
|
||||||
|
configEditor.clickSearchConfiguration();
|
||||||
|
configEditor.clickClearButton();
|
||||||
|
configEditor.enterBigConfigurationText(JSON.stringify(json));
|
||||||
|
configEditor.clickSaveButton();
|
||||||
|
|
||||||
|
searchDialog.clickOnSearchIcon().enterTextAndPressEnter('*');
|
||||||
|
searchFilters.checkCreatedRangeFilterIsDisplayed()
|
||||||
|
.clickCreatedRangeFilterHeader()
|
||||||
|
.checkCreatedRangeFilterIsExpanded();
|
||||||
|
dateRangeFilter.checkFromFieldIsDisplayed()
|
||||||
|
.openFromDatePicker();
|
||||||
|
|
||||||
|
let todayDate = datePicker.convertDateToNewFormat(new Date());
|
||||||
|
datePicker.selectTodayDate();
|
||||||
|
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(dateRangeFilter.getFromDate()).toEqual(todayDate);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@@ -0,0 +1,162 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Copyright 2016 Alfresco Software, Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Util = require('../../../../../util/util');
|
||||||
|
import { by, browser, protractor } from 'protractor';
|
||||||
|
import { DatePickerPage } from '../../../material/datePickerPage';
|
||||||
|
|
||||||
|
export class DateRangeFilterPage {
|
||||||
|
|
||||||
|
fromField = by.css('input[data-automation-id="date-range-from-input"]');
|
||||||
|
fromDateToggle = by.css('mat-datepicker-toggle[data-automation-id="date-range-from-date-toggle"]');
|
||||||
|
toField = by.css('input[data-automation-id="date-range-to-input"]');
|
||||||
|
toDateToggle = by.css('mat-datepicker-toggle[data-automation-id="date-range-to-date-toggle"]');
|
||||||
|
applyButton = by.css('button[data-automation-id="date-range-apply-btn"]');
|
||||||
|
clearButton = by.css('button[data-automation-id="date-range-clear-btn"]');
|
||||||
|
fromErrorMessage = by.css('mat-error[data-automation-id="date-range-from-error"]');
|
||||||
|
toErrorMessage = by.css('mat-error[data-automation-id="date-range-to-error"]');
|
||||||
|
filter;
|
||||||
|
|
||||||
|
constructor(filter) {
|
||||||
|
this.filter = filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
getFromDate() {
|
||||||
|
return this.filter.element(this.fromField).getAttribute('value');
|
||||||
|
}
|
||||||
|
|
||||||
|
putFromDate(date) {
|
||||||
|
this.checkFromFieldIsDisplayed();
|
||||||
|
this.filter.element(this.fromField).clear();
|
||||||
|
this.filter.element(this.fromField).sendKeys(date);
|
||||||
|
this.filter.element(this.fromField).sendKeys(protractor.Key.ENTER);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
getFromCalendarSelectedDate() {
|
||||||
|
let selectedDate = this.openFromDatePicker().getSelectedDate();
|
||||||
|
new DatePickerPage().closeDatePicker();
|
||||||
|
return selectedDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
openFromDatePicker() {
|
||||||
|
Util.waitUntilElementIsClickable(this.filter.element(this.fromDateToggle));
|
||||||
|
this.filter.element(this.fromDateToggle).click();
|
||||||
|
return new DatePickerPage().checkDatePickerIsDisplayed();
|
||||||
|
}
|
||||||
|
|
||||||
|
openToDatePicker() {
|
||||||
|
Util.waitUntilElementIsClickable(this.filter.element(this.toDateToggle));
|
||||||
|
this.filter.element(this.toDateToggle).click();
|
||||||
|
return new DatePickerPage().checkDatePickerIsDisplayed();
|
||||||
|
}
|
||||||
|
|
||||||
|
clickFromField() {
|
||||||
|
Util.waitUntilElementIsClickable(this.filter.element(this.fromField));
|
||||||
|
this.filter.element(this.fromField).click();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkFromErrorMessageIsDisplayed(msg) {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.fromErrorMessage));
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(this.filter.element(this.fromErrorMessage).getText()).toEqual(msg);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkFromErrorMessageIsNotDisplayed() {
|
||||||
|
Util.waitUntilElementIsNotVisible(this.filter.element(this.fromErrorMessage));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkFromFieldIsDisplayed() {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.fromField));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkFromDateToggleIsDisplayed() {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.fromDateToggle));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
getToDate() {
|
||||||
|
return this.filter.element(this.toField).getAttribute('value');
|
||||||
|
}
|
||||||
|
|
||||||
|
putToDate(date) {
|
||||||
|
this.checkToFieldIsDisplayed();
|
||||||
|
this.filter.element(this.toField).clear();
|
||||||
|
this.filter.element(this.toField).sendKeys(date);
|
||||||
|
this.filter.element(this.toField).sendKeys(protractor.Key.ENTER);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clickToField() {
|
||||||
|
Util.waitUntilElementIsClickable(this.filter.element(this.toField));
|
||||||
|
this.filter.element(this.toField).click();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkToErrorMessageIsDisplayed(msg) {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.toErrorMessage));
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(this.filter.element(this.toErrorMessage).getText()).toEqual(msg);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkToFieldIsDisplayed() {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.toField));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkToDateToggleIsDisplayed() {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.toDateToggle));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clickApplyButton() {
|
||||||
|
Util.waitUntilElementIsClickable(this.filter.element(this.applyButton));
|
||||||
|
this.filter.element(this.applyButton).click();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkApplyButtonIsDisplayed() {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.applyButton));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkApplyButtonIsEnabled() {
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(this.filter.element(this.applyButton).isEnabled()).toBe(true);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkApplyButtonIsDisabled() {
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(this.filter.element(this.applyButton).isEnabled()).toBe(false);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkClearButtonIsDisplayed() {
|
||||||
|
Util.waitUntilElementIsVisible(this.filter.element(this.clearButton));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@@ -19,6 +19,7 @@ import Util = require('../../../../util/util');
|
|||||||
import { element, by } from 'protractor';
|
import { element, by } from 'protractor';
|
||||||
import { SearchTextPage } from './components/search-text';
|
import { SearchTextPage } from './components/search-text';
|
||||||
import { SearchCheckListPage } from './components/search-checkList';
|
import { SearchCheckListPage } from './components/search-checkList';
|
||||||
|
import { DateRangeFilterPage } from './components/dateRangeFilterPage';
|
||||||
|
|
||||||
export class SearchCategoriesPage {
|
export class SearchCategoriesPage {
|
||||||
|
|
||||||
@@ -30,6 +31,10 @@ export class SearchCategoriesPage {
|
|||||||
return new SearchTextPage(filter);
|
return new SearchTextPage(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dateRangeFilter(filter) {
|
||||||
|
return new DateRangeFilterPage(filter);
|
||||||
|
}
|
||||||
|
|
||||||
checkFilterIsDisplayed(filter) {
|
checkFilterIsDisplayed(filter) {
|
||||||
Util.waitUntilElementIsVisible(filter);
|
Util.waitUntilElementIsVisible(filter);
|
||||||
return this;
|
return this;
|
||||||
@@ -55,4 +60,11 @@ export class SearchCategoriesPage {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkFilterIsExpanded(filter) {
|
||||||
|
filter.getAttribute('class').then((elementClass) => {
|
||||||
|
expect(elementClass).toContain('mat-expanded');
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -251,5 +251,10 @@ var DataTablePage = function () {
|
|||||||
return inputFilter.sendKeys(filterText);
|
return inputFilter.sendKeys(filterText);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getNodeIdFirstElement = function () {
|
||||||
|
let firstNode = element.all(by.css('adf-datatable div[title="Node id"] span')).first();
|
||||||
|
return firstNode.getText();
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
module.exports = DataTablePage;
|
module.exports = DataTablePage;
|
||||||
|
@@ -49,38 +49,31 @@ export class LoginPage {
|
|||||||
successRouteSwitch = element(by.id('adf-toggle-show-successRoute'));
|
successRouteSwitch = element(by.id('adf-toggle-show-successRoute'));
|
||||||
logoSwitch = element(by.id('adf-toggle-logo'));
|
logoSwitch = element(by.id('adf-toggle-logo'));
|
||||||
header = element(by.id('adf-header'));
|
header = element(by.id('adf-header'));
|
||||||
cardBackground = element(by.css('mat-card[class*="adf-login-card"]'));
|
|
||||||
settingsPage = new SettingsPage();
|
settingsPage = new SettingsPage();
|
||||||
|
|
||||||
waitForElements() {
|
waitForElements() {
|
||||||
let deferred = protractor.promise.defer();
|
Util.waitUntilElementIsVisible(this.txtUsername);
|
||||||
|
Util.waitUntilElementIsVisible(this.txtPassword);
|
||||||
Util.waitUntilElementIsVisible(this.txtUsername).then(() => {
|
return this;
|
||||||
Util.waitUntilElementIsVisible(this.txtPassword).then(() => {
|
|
||||||
deferred.fulfill();
|
|
||||||
}, () => {
|
|
||||||
deferred.rejected();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enterUsername(username) {
|
enterUsername(username) {
|
||||||
Util.waitUntilElementIsVisible(this.txtUsername);
|
Util.waitUntilElementIsVisible(this.txtUsername);
|
||||||
this.txtUsername.sendKeys('');
|
this.txtUsername.sendKeys('');
|
||||||
return this.txtUsername.clear().sendKeys(username);
|
this.txtUsername.clear();
|
||||||
|
return this.txtUsername.sendKeys(username);
|
||||||
}
|
}
|
||||||
|
|
||||||
enterPassword(password) {
|
enterPassword(password) {
|
||||||
Util.waitUntilElementIsVisible(this.txtPassword);
|
Util.waitUntilElementIsVisible(this.txtPassword);
|
||||||
return this.txtPassword.clear().sendKeys(password);
|
this.txtPassword.clear();
|
||||||
|
return this.txtPassword.sendKeys(password);
|
||||||
}
|
}
|
||||||
|
|
||||||
clearUsername() {
|
clearUsername() {
|
||||||
Util.waitUntilElementIsVisible(this.txtUsername);
|
Util.waitUntilElementIsVisible(this.txtUsername);
|
||||||
return this.txtUsername.click().clear();
|
this.txtUsername.click();
|
||||||
|
return this.txtUsername.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
clearPassword() {
|
clearPassword() {
|
||||||
@@ -102,12 +95,16 @@ export class LoginPage {
|
|||||||
|
|
||||||
checkLoginError(message) {
|
checkLoginError(message) {
|
||||||
Util.waitUntilElementIsVisible(this.loginTooltip);
|
Util.waitUntilElementIsVisible(this.loginTooltip);
|
||||||
expect(this.loginTooltip.getText()).toEqual(message);
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(this.loginTooltip.getText()).toEqual(message);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
checkLoginImgURL(url) {
|
checkLoginImgURL(url) {
|
||||||
Util.waitUntilElementIsVisible(this.logoImg);
|
Util.waitUntilElementIsVisible(this.logoImg);
|
||||||
expect(this.logoImg.getAttribute('src')).toEqual(url);
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(this.logoImg.getAttribute('src')).toEqual(url);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
checkUsernameInactive() {
|
checkUsernameInactive() {
|
||||||
@@ -138,18 +135,9 @@ export class LoginPage {
|
|||||||
|
|
||||||
checkSignInButtonIsEnabled() {
|
checkSignInButtonIsEnabled() {
|
||||||
Util.waitUntilElementIsVisible(this.signInButton);
|
Util.waitUntilElementIsVisible(this.signInButton);
|
||||||
expect(this.signInButton.isEnabled()).toBe(true);
|
browser.controlFlow().execute(async () => {
|
||||||
}
|
await expect(this.signInButton.isEnabled()).toBe(true);
|
||||||
|
});
|
||||||
defaultLogin() {
|
|
||||||
browser.driver.get(TestConfig.adf.url + TestConfig.adf.login);
|
|
||||||
this.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
|
||||||
}
|
|
||||||
|
|
||||||
loginUsingUserModel(userModel) {
|
|
||||||
browser.driver.get(TestConfig.adf.url + TestConfig.adf.login);
|
|
||||||
this.waitForElements();
|
|
||||||
this.login(userModel.getId(), userModel.getPassword());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
loginToProcessServicesUsingUserModel(userModel) {
|
loginToProcessServicesUsingUserModel(userModel) {
|
||||||
@@ -158,12 +146,6 @@ export class LoginPage {
|
|||||||
this.login(userModel.email, userModel.password);
|
this.login(userModel.email, userModel.password);
|
||||||
}
|
}
|
||||||
|
|
||||||
loginToProcessServicesUsingDefaultUser() {
|
|
||||||
this.settingsPage.setProviderBpm();
|
|
||||||
this.waitForElements();
|
|
||||||
this.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
|
||||||
}
|
|
||||||
|
|
||||||
loginToContentServicesUsingUserModel(userModel) {
|
loginToContentServicesUsingUserModel(userModel) {
|
||||||
this.settingsPage.setProviderEcm();
|
this.settingsPage.setProviderEcm();
|
||||||
this.waitForElements();
|
this.waitForElements();
|
||||||
@@ -174,18 +156,21 @@ export class LoginPage {
|
|||||||
loginToContentServices(username, password) {
|
loginToContentServices(username, password) {
|
||||||
this.settingsPage.setProviderEcm();
|
this.settingsPage.setProviderEcm();
|
||||||
this.waitForElements();
|
this.waitForElements();
|
||||||
|
|
||||||
this.login(username, password);
|
this.login(username, password);
|
||||||
}
|
}
|
||||||
|
|
||||||
goToLoginPage() {
|
goToLoginPage() {
|
||||||
browser.driver.get(TestConfig.adf.url + TestConfig.adf.port + '/login');
|
browser.controlFlow().execute(async () => {
|
||||||
|
await browser.driver.get(TestConfig.adf.url + TestConfig.adf.port + '/login');
|
||||||
|
});
|
||||||
this.waitForElements();
|
this.waitForElements();
|
||||||
}
|
}
|
||||||
|
|
||||||
checkSignInButtonIsDisabled() {
|
checkSignInButtonIsDisabled() {
|
||||||
Util.waitUntilElementIsVisible(this.signInButton);
|
Util.waitUntilElementIsVisible(this.signInButton);
|
||||||
expect(this.signInButton.isEnabled()).toBe(false);
|
browser.controlFlow().execute(async () => {
|
||||||
|
await expect(this.signInButton.isEnabled()).toBe(false);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
clickSignInButton() {
|
clickSignInButton() {
|
||||||
@@ -193,57 +178,19 @@ export class LoginPage {
|
|||||||
this.signInButton.click();
|
this.signInButton.click();
|
||||||
}
|
}
|
||||||
|
|
||||||
clickRememberMe() {
|
|
||||||
Util.waitUntilElementIsVisible(this.rememberMe);
|
|
||||||
this.rememberMe.click();
|
|
||||||
}
|
|
||||||
|
|
||||||
showPassword() {
|
showPassword() {
|
||||||
Util.waitUntilElementIsVisible(this.showPasswordElement);
|
Util.waitUntilElementIsVisible(this.showPasswordElement);
|
||||||
this.showPasswordElement.click();
|
this.showPasswordElement.click();
|
||||||
}
|
}
|
||||||
|
|
||||||
getShowPasswordIconColor() {
|
|
||||||
let deferred = protractor.promise.defer();
|
|
||||||
|
|
||||||
Util.waitUntilElementIsVisible(this.showPasswordElement);
|
|
||||||
this.showPasswordElement.getCssValue('color').then((value) => {
|
|
||||||
deferred.fulfill(value);
|
|
||||||
});
|
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
}
|
|
||||||
|
|
||||||
getSignInButtonColor() {
|
|
||||||
let deferred = protractor.promise.defer();
|
|
||||||
|
|
||||||
Util.waitUntilElementIsVisible(this.signInButton);
|
|
||||||
this.signInButton.getCssValue('color').then((value) => {
|
|
||||||
deferred.fulfill(value);
|
|
||||||
});
|
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
}
|
|
||||||
|
|
||||||
getBackgroundColor() {
|
|
||||||
let deferred = protractor.promise.defer();
|
|
||||||
|
|
||||||
Util.waitUntilElementIsVisible(this.cardBackground);
|
|
||||||
this.cardBackground.getCssValue('color').then((value) => {
|
|
||||||
deferred.fulfill(value);
|
|
||||||
});
|
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
}
|
|
||||||
|
|
||||||
hidePassword() {
|
hidePassword() {
|
||||||
Util.waitUntilElementIsVisible(this.hidePasswordElement);
|
Util.waitUntilElementIsVisible(this.hidePasswordElement);
|
||||||
this.hidePasswordElement.click();
|
this.hidePasswordElement.click();
|
||||||
}
|
}
|
||||||
|
|
||||||
checkPasswordIsShown(password) {
|
checkPasswordIsShown(password) {
|
||||||
this.txtPassword.getAttribute('value').then((text) => {
|
this.txtPassword.getAttribute('value').then(async (text) => {
|
||||||
expect(text).toEqual(password);
|
await expect(text).toEqual(password);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,14 +234,6 @@ export class LoginPage {
|
|||||||
this.formControllersPage.disableToggle(this.rememberMeSwitch);
|
this.formControllersPage.disableToggle(this.rememberMeSwitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
enableRememberMe() {
|
|
||||||
this.formControllersPage.enableToggle(this.rememberMeSwitch);
|
|
||||||
}
|
|
||||||
|
|
||||||
disableSuccessRouteSwitch() {
|
|
||||||
this.formControllersPage.disableToggle(this.successRouteSwitch);
|
|
||||||
}
|
|
||||||
|
|
||||||
enableSuccessRouteSwitch() {
|
enableSuccessRouteSwitch() {
|
||||||
this.formControllersPage.enableToggle(this.successRouteSwitch);
|
this.formControllersPage.enableToggle(this.successRouteSwitch);
|
||||||
}
|
}
|
||||||
@@ -306,13 +245,15 @@ export class LoginPage {
|
|||||||
enterSuccessRoute(route) {
|
enterSuccessRoute(route) {
|
||||||
Util.waitUntilElementIsVisible(this.successRouteTxt);
|
Util.waitUntilElementIsVisible(this.successRouteTxt);
|
||||||
this.successRouteTxt.sendKeys('');
|
this.successRouteTxt.sendKeys('');
|
||||||
return this.successRouteTxt.clear().sendKeys(route);
|
this.successRouteTxt.clear();
|
||||||
|
return this.successRouteTxt.sendKeys(route);
|
||||||
}
|
}
|
||||||
|
|
||||||
enterLogo(logo) {
|
enterLogo(logo) {
|
||||||
Util.waitUntilElementIsVisible(this.logoTxt);
|
Util.waitUntilElementIsVisible(this.logoTxt);
|
||||||
this.logoTxt.sendKeys('');
|
this.logoTxt.sendKeys('');
|
||||||
return this.logoTxt.clear().sendKeys(logo);
|
this.logoTxt.clear();
|
||||||
|
return this.logoTxt.sendKeys(logo);
|
||||||
}
|
}
|
||||||
|
|
||||||
login(username, password) {
|
login(username, password) {
|
||||||
|
93
e2e/pages/adf/material/datePickerPage.ts
Normal file
93
e2e/pages/adf/material/datePickerPage.ts
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Copyright 2016 Alfresco Software, Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Util = require('../../../util/util');
|
||||||
|
import { element, by, browser, protractor } from 'protractor';
|
||||||
|
|
||||||
|
export class DatePickerPage {
|
||||||
|
|
||||||
|
datePicker = element(by.css('mat-calendar'));
|
||||||
|
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||||
|
nextMonthButton = element(by.css('button[class*="mat-calendar-next-button"]'));
|
||||||
|
previousMonthButton = element(by.css('button[class*="mat-calendar-previous-button"]'));
|
||||||
|
|
||||||
|
getSelectedDate() {
|
||||||
|
return element(by.css('td[class*="mat-calendar-body-active"]')).getAttribute('aria-label');
|
||||||
|
}
|
||||||
|
|
||||||
|
checkDatesAfterDateAreDisabled(date) {
|
||||||
|
let afterDate = new Date(date.getTime() + 24 * 60 * 60 * 1000);
|
||||||
|
let afterCalendar = element(by.css(`td[class*="mat-calendar-body-cell"][aria-label="${this.convertDateToDefaultFormat(afterDate)}"]`));
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
if (await afterCalendar.isPresent()) {
|
||||||
|
await expect(afterCalendar.getAttribute('aria-disabled')).toBe('true');
|
||||||
|
}
|
||||||
|
await expect(this.nextMonthButton.isEnabled()).toBe(false);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkDatesBeforeDateAreDisabled(date) {
|
||||||
|
let beforeDate = new Date(date.getTime() - 24 * 60 * 60 * 1000);
|
||||||
|
let beforeCalendar = element(by.css(`td[class*="mat-calendar-body-cell"][aria-label="${this.convertDateToDefaultFormat(beforeDate)}"]`));
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
if (await beforeCalendar.isPresent()) {
|
||||||
|
await expect(beforeCalendar.getAttribute('aria-disabled')).toBe('true');
|
||||||
|
}
|
||||||
|
await expect(this.previousMonthButton.isEnabled()).toBe(false);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
convertDefaultFormatToDate(dateString) { // Format : dd-Mmm-yy
|
||||||
|
let date = dateString.split('-');
|
||||||
|
return new Date((2000 + parseInt(date[2], 10)), this.months.indexOf(date[1]), date[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
convertDateToDefaultFormat(date) { // Format : dd-Mmm-yy
|
||||||
|
return `${('0' + date.getDate()).slice(-2)}-${this.months[date.getMonth()]}-${date.getFullYear().toString().substr(-2)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
convertDateToNewFormat(date) { // Format : mm-dd-yy
|
||||||
|
return `${date.getMonth() + 1}-${('0' + date.getDate()).slice(-2)}-${date.getFullYear().toString().substr(-2)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
selectTodayDate() {
|
||||||
|
this.checkDatePickerIsDisplayed();
|
||||||
|
let todayDate = element(by.css('.mat-calendar-body-today'));
|
||||||
|
Util.waitUntilElementIsClickable(todayDate);
|
||||||
|
todayDate.click();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
closeDatePicker() {
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await browser.actions().sendKeys(protractor.Key.ESCAPE).perform();
|
||||||
|
});
|
||||||
|
this.checkDatePickerIsNotDisplayed();
|
||||||
|
}
|
||||||
|
|
||||||
|
checkDatePickerIsDisplayed() {
|
||||||
|
Util.waitUntilElementIsVisible(this.datePicker);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkDatePickerIsNotDisplayed() {
|
||||||
|
Util.waitUntilElementIsNotVisible(this.datePicker);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@@ -29,11 +29,16 @@ export class SearchFiltersPage {
|
|||||||
fileSizeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.SIZE"]'));
|
fileSizeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-SEARCH.FACET_FIELDS.SIZE"]'));
|
||||||
nameFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Name"]'));
|
nameFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Name"]'));
|
||||||
checkListFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Check List"]'));
|
checkListFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Check List"]'));
|
||||||
|
createdDateRangeFilter = element(by.css('mat-expansion-panel[data-automation-id="expansion-panel-Created Date (range)"]'));
|
||||||
|
|
||||||
checkSearchFiltersIsDisplayed() {
|
checkSearchFiltersIsDisplayed() {
|
||||||
Util.waitUntilElementIsVisible(this.searchFilters);
|
Util.waitUntilElementIsVisible(this.searchFilters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createdDateRangeFilterPage() {
|
||||||
|
return this.searchCategoriesPage.dateRangeFilter(this.createdDateRangeFilter);
|
||||||
|
}
|
||||||
|
|
||||||
textFiltersPage() {
|
textFiltersPage() {
|
||||||
return this.searchCategoriesPage.textFiltersPage(this.nameFilter);
|
return this.searchCategoriesPage.textFiltersPage(this.nameFilter);
|
||||||
}
|
}
|
||||||
@@ -99,4 +104,19 @@ export class SearchFiltersPage {
|
|||||||
this.searchCategoriesPage.checkFilterIsCollapsed(this.fileSizeFilter);
|
this.searchCategoriesPage.checkFilterIsCollapsed(this.fileSizeFilter);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkCreatedRangeFilterIsDisplayed() {
|
||||||
|
this.searchCategoriesPage.checkFilterIsDisplayed(this.createdDateRangeFilter);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
clickCreatedRangeFilterHeader() {
|
||||||
|
this.searchCategoriesPage.clickFilterHeader(this.createdDateRangeFilter);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkCreatedRangeFilterIsExpanded() {
|
||||||
|
this.searchCategoriesPage.checkFilterIsExpanded(this.createdDateRangeFilter);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -79,14 +79,6 @@ export class SearchResultsPage {
|
|||||||
this.closeActionButton();
|
this.closeActionButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
copyContent(content) {
|
|
||||||
this.contentList.copyContent(content);
|
|
||||||
}
|
|
||||||
|
|
||||||
moveContent(content) {
|
|
||||||
this.contentList.moveContent(content);
|
|
||||||
}
|
|
||||||
|
|
||||||
sortByName(sortOrder) {
|
sortByName(sortOrder) {
|
||||||
this.sortBy(sortOrder, 'Name');
|
this.sortBy(sortOrder, 'Name');
|
||||||
}
|
}
|
||||||
@@ -99,6 +91,10 @@ export class SearchResultsPage {
|
|||||||
Util.waitUntilElementIsClickable(selectedSortingOption);
|
Util.waitUntilElementIsClickable(selectedSortingOption);
|
||||||
browser.executeScript(`document.evaluate('//span [contains(text(), "${sortType}")]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();`);
|
browser.executeScript(`document.evaluate('//span [contains(text(), "${sortType}")]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();`);
|
||||||
|
|
||||||
|
browser.controlFlow().execute(async () => {
|
||||||
|
await browser.actions().sendKeys(protractor.Key.ESCAPE).perform();
|
||||||
|
});
|
||||||
|
|
||||||
this.sortByOrder(sortOrder);
|
this.sortByOrder(sortOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ import ProcessFiltersPage = require('../pages/adf/process_services/processFilter
|
|||||||
import { AppNavigationBarPage } from '../pages/adf/process_services/appNavigationBarPage';
|
import { AppNavigationBarPage } from '../pages/adf/process_services/appNavigationBarPage';
|
||||||
import { DynamicTableWidget } from '../pages/adf/process_services/widgets/dynamicTableWidget';
|
import { DynamicTableWidget } from '../pages/adf/process_services/widgets/dynamicTableWidget';
|
||||||
import { DropdownWidget } from '../pages/adf/process_services/widgets/dropdownWidget';
|
import { DropdownWidget } from '../pages/adf/process_services/widgets/dropdownWidget';
|
||||||
|
import { DatePickerPage } from '../pages/adf/material/datePickerPage';
|
||||||
|
|
||||||
import TestConfig = require('../test.config');
|
import TestConfig = require('../test.config');
|
||||||
import resources = require('../util/resources');
|
import resources = require('../util/resources');
|
||||||
@@ -36,6 +37,7 @@ describe('Dynamic Table', () => {
|
|||||||
let processFiltersPage = new ProcessFiltersPage();
|
let processFiltersPage = new ProcessFiltersPage();
|
||||||
let appNavigationBarPage = new AppNavigationBarPage();
|
let appNavigationBarPage = new AppNavigationBarPage();
|
||||||
let dynamicTable = new DynamicTableWidget();
|
let dynamicTable = new DynamicTableWidget();
|
||||||
|
let datePicker = new DatePickerPage();
|
||||||
let user, tenantId, appId, apps, users;
|
let user, tenantId, appId, apps, users;
|
||||||
|
|
||||||
beforeAll(async(done) => {
|
beforeAll(async(done) => {
|
||||||
@@ -73,7 +75,6 @@ describe('Dynamic Table', () => {
|
|||||||
error: `Field 'columnDate' is required.`
|
error: `Field 'columnDate' is required.`
|
||||||
};
|
};
|
||||||
|
|
||||||
let datePosition = 15;
|
|
||||||
let rowPosition = 0;
|
let rowPosition = 0;
|
||||||
|
|
||||||
beforeAll(async(done) => {
|
beforeAll(async(done) => {
|
||||||
@@ -119,8 +120,8 @@ describe('Dynamic Table', () => {
|
|||||||
expect(dynamicTable.checkErrorMessage()).toBe(randomText.error);
|
expect(dynamicTable.checkErrorMessage()).toBe(randomText.error);
|
||||||
|
|
||||||
dynamicTable.clickDateWidget();
|
dynamicTable.clickDateWidget();
|
||||||
dynamicTable.getDateCalendarNumber(datePosition);
|
datePicker.selectTodayDate()
|
||||||
dynamicTable.waitForCalendarToDisappear();
|
.checkDatePickerIsNotDisplayed();
|
||||||
dynamicTable.clickSaveButton();
|
dynamicTable.clickSaveButton();
|
||||||
dynamicTable.getTableRow(rowPosition);
|
dynamicTable.getTableRow(rowPosition);
|
||||||
});
|
});
|
||||||
|
@@ -7,10 +7,11 @@
|
|||||||
placeholder="{{ 'SEARCH.FILTER.RANGE.FROM-DATE' | translate }}"
|
placeholder="{{ 'SEARCH.FILTER.RANGE.FROM-DATE' | translate }}"
|
||||||
[matDatepicker]="fromDatepicker"
|
[matDatepicker]="fromDatepicker"
|
||||||
[max]="maxDate"
|
[max]="maxDate"
|
||||||
(focusout)="onChangedHandler($event, from)">
|
(focusout)="onChangedHandler($event, from)"
|
||||||
<mat-datepicker-toggle matSuffix [for]="fromDatepicker"></mat-datepicker-toggle>
|
data-automation-id="date-range-from-input">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="fromDatepicker" data-automation-id="date-range-from-date-toggle"></mat-datepicker-toggle>
|
||||||
<mat-datepicker #fromDatepicker></mat-datepicker>
|
<mat-datepicker #fromDatepicker></mat-datepicker>
|
||||||
<mat-error *ngIf="from.invalid">
|
<mat-error *ngIf="from.invalid" data-automation-id="date-range-from-error">
|
||||||
{{ getFromValidationMessage() | translate: { requiredFormat: datePickerDateFormat } }}
|
{{ getFromValidationMessage() | translate: { requiredFormat: datePickerDateFormat } }}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
@@ -24,19 +25,20 @@
|
|||||||
[matDatepicker]="toDatepicker"
|
[matDatepicker]="toDatepicker"
|
||||||
[min]="from.value"
|
[min]="from.value"
|
||||||
[max]="maxDate"
|
[max]="maxDate"
|
||||||
(focusout)="onChangedHandler($event, to)">
|
(focusout)="onChangedHandler($event, to)"
|
||||||
<mat-datepicker-toggle matSuffix [for]="toDatepicker"></mat-datepicker-toggle>
|
data-automation-id="date-range-to-input">
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="toDatepicker" data-automation-id="date-range-to-date-toggle"></mat-datepicker-toggle>
|
||||||
<mat-datepicker #toDatepicker></mat-datepicker>
|
<mat-datepicker #toDatepicker></mat-datepicker>
|
||||||
<mat-error *ngIf="to.invalid">
|
<mat-error *ngIf="to.invalid" data-automation-id="date-range-to-error">
|
||||||
{{ getToValidationMessage() | translate: { requiredFormat: datePickerDateFormat } }}
|
{{ getToValidationMessage() | translate: { requiredFormat: datePickerDateFormat } }}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<div class="facet-buttons facet-buttons--topSpace">
|
<div class="facet-buttons facet-buttons--topSpace">
|
||||||
<button mat-button color="primary" type="button" (click)="reset()">
|
<button mat-button color="primary" type="button" (click)="reset()" data-automation-id="date-range-clear-btn">
|
||||||
{{ 'SEARCH.FILTER.ACTIONS.CLEAR' | translate }}
|
{{ 'SEARCH.FILTER.ACTIONS.CLEAR' | translate }}
|
||||||
</button>
|
</button>
|
||||||
<button mat-button color="primary" type="submit" [disabled]="!form.valid">
|
<button mat-button color="primary" type="submit" [disabled]="!form.valid" data-automation-id="date-range-apply-btn">
|
||||||
{{ 'SEARCH.FILTER.ACTIONS.APPLY' | translate }}
|
{{ 'SEARCH.FILTER.ACTIONS.APPLY' | translate }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user