2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 import React from 'react';
22 import TestUtils from 'react-dom/test-utils';
23 import {Provider} from 'react-redux';
24 import {expect} from 'chai';
25 import i18n from 'utils/i18n/i18n';
27 import store from 'app/AppStore.js';
28 import DateRange from 'generic-components/dateRange/DateRange.jsx';
33 DATE_PICKER_PLACEHOLDER,
37 START_DATE} from 'generic-components/dateRange/DateRangeConstants.js';
38 import DateRangeActions from 'generic-components/dateRange/DateRangeActions.js';
39 import reducer from 'generic-components/dateRange/DateRangeReducer.js';
40 import sinon from 'sinon';
42 import { moment } from 'moment';
44 describe('Core Date Range suite', function() {
46 beforeEach(function() {
47 this.component = TestUtils.renderIntoDocument(<Provider store={store}><DateRange /></Provider>);
51 it('Date Range - Validate start & end lables', function() {
52 let labels = TestUtils.scryRenderedDOMComponentsWithTag(this.component, 'label');
53 expect(labels.length).to.equal(2);
54 expect(labels[0].textContent).to.equal(LABEL_START_DATE + ': ');
55 expect(labels[1].textContent).to.equal(LABEL_END_DATE + ': ');
58 it('Date Range - Start Date Picker exists', function() {
59 let datePicker = TestUtils.findRenderedDOMComponentWithClass(this.component, 'start-date-picker');
60 expect(datePicker).to.exist;
61 expect(datePicker.type).to.equal('text');
62 expect(datePicker.placeholder).to.equal(DATE_PICKER_PLACEHOLDER);
65 it('Date Range - End Date Picker exists', function() {
66 let datePicker = TestUtils.findRenderedDOMComponentWithClass(this.component, 'end-date-picker');
67 expect(datePicker).to.exist;
68 expect(datePicker.type).to.equal('text');
69 expect(datePicker.placeholder).to.equal(DATE_PICKER_PLACEHOLDER);
73 it('Date Range Reducer ... set start date (no initial dates)', function() {
74 var moment = require('moment');
75 const initialState = {};
76 const dateChangeAction = {type: dateRangeActionTypes.DATE_RANGE_CHANGE, data: {dateRange: {startDate: moment(new Date('05/04/2016'))}, errorMsg: ''}};
77 const newState = reducer(initialState, dateChangeAction);
78 expect(newState.dateRangeStart).to.exist;
79 expect(newState.dateRangeStart.toDate().getTime()).to.equal(new Date('05/04/2016').getTime());
80 expect(newState.dateRangeEnd).to.not.exist;
81 expect(newState.dateRangeError).to.equal('');
83 it('Date Range Reducer ... update start date (no end date)', function() {
84 var moment = require('moment');
85 const initialStartDate = new Date('05/01/2016');
86 const initialState = {dateRange: {startDate: moment(initialStartDate)}};
87 const dateChangeAction = {type: dateRangeActionTypes.DATE_RANGE_CHANGE, data: {dateRange: {startDate: moment(new Date('05/04/2016'))}, errorMsg: ''}};
88 const newState = reducer(initialState, dateChangeAction);
89 expect(newState.dateRangeStart).to.exist;
90 expect(newState.dateRangeStart.toDate().getTime()).to.equal(new Date('05/04/2016').getTime());
91 expect(newState.dateRangeEnd).to.not.exist;
92 expect(newState.dateRangeError).to.equal('');
94 it('Date Range Reducer - set end date (no start date)', function() {
95 var moment = require('moment');
96 const initialState = {};
97 const dateChangeAction = {type: dateRangeActionTypes.DATE_RANGE_CHANGE, data: {dateRange: {endDate: moment(new Date('05/04/2016'))}, errorMsg: ''}};
98 const newState = reducer(initialState, dateChangeAction);
99 expect(newState.dateRangeEnd).to.exist;
100 expect(newState.dateRangeEnd.toDate().getTime()).to.equal(new Date('05/04/2016').getTime());
101 expect(newState.dateRangeStart).to.not.exist;
102 expect(newState.dateRangeError).to.equal('');
104 it('Date Range Reducer - update end date (no start date)', function() {
105 var moment = require('moment');
106 const initialEndDate = new Date('05/01/2016');
107 const initialState = {dateRange: {endDate: moment(initialEndDate)}};
108 const dateChangeAction = {type: dateRangeActionTypes.DATE_RANGE_CHANGE, data: {dateRange: {endDate: moment(new Date('05/04/2016'))}, errorMsg: ''}};
109 const newState = reducer(initialState, dateChangeAction);
110 expect(newState.dateRangeEnd).to.exist;
111 expect(newState.dateRangeEnd.toDate().getTime()).to.equal(new Date('05/04/2016').getTime());
112 expect(newState.dateRangeStart).to.not.exist;
113 expect(newState.dateRangeError).to.equal('');
115 it('Date Range Reducer - set end date with initial start date', function() {
116 var moment = require('moment');
117 const initialStartDate = new Date('05/01/2016');
118 const initialState = {dateRange: {startDate: moment(initialStartDate)}};
119 const dateChangeAction = {type: dateRangeActionTypes.DATE_RANGE_CHANGE, data: {dateRange: {startDate: moment(new Date('05/01/2016')), endDate: moment(new Date('05/04/2016'))}, errorMsg: ''}};
120 const newState = reducer(initialState, dateChangeAction);
121 expect(newState.dateRangeStart).to.exist;
122 expect(newState.dateRangeStart.toDate().getTime()).to.equal(new Date('05/01/2016').getTime());
123 expect(newState.dateRangeEnd).to.exist;
124 expect(newState.dateRangeEnd.toDate().getTime()).to.equal(new Date('05/04/2016').getTime());
125 expect(newState.dateRangeError).to.equal('');
127 it('Date Range Reducer - set start date with initial end date', function() {
128 var moment = require('moment');
129 const initialEndDate = new Date('05/04/2016');
130 const initialState = {dateRange: {endDate: moment(initialEndDate)}};
131 const dateChangeAction = {type: dateRangeActionTypes.DATE_RANGE_CHANGE, data: {dateRange: {startDate: moment(new Date('05/01/2016')), endDate: moment(new Date('05/04/2016'))}, errorMsg: ''}};
132 const newState = reducer(initialState, dateChangeAction);
133 expect(newState.dateRangeStart).to.exist;
134 expect(newState.dateRangeStart.toDate().getTime()).to.equal(new Date('05/01/2016').getTime());
135 expect(newState.dateRangeEnd).to.exist;
136 expect(newState.dateRangeEnd.toDate().getTime()).to.equal(new Date('05/04/2016').getTime());
137 expect(newState.dateRangeError).to.equal('');
139 it('Date Range Reducer - verify INVALID_DATE_RANGE event', function() {
140 var moment = require('moment');
141 const errMsg = 'Some error message';
142 const initialEndDate = new Date('05/01/2016');
143 const initialStartDate = new Date('05/02/2016');
144 const initialState = {startDate: moment(initialStartDate), endDate: moment(initialEndDate)};
145 const invalidRangeAction = {type: dateRangeActionTypes.INVALID_DATE_RANGE, data: {dateRange: {startDate: moment(initialStartDate), endDate: moment(initialEndDate)}, errorMsg: errMsg}};
146 const newState = reducer(initialState, invalidRangeAction);
147 expect(newState.endDate.toDate().getTime()).to.equal(new Date('05/01/2016').getTime());
148 expect(newState.startDate.toDate().getTime()).to.equal(new Date('05/02/2016').getTime());
149 expect(newState.dateRangeError).to.equal(errMsg);
153 it('Date Range Action - valid start date change', function() {
154 var moment = require('moment');
155 const startDate = moment(new Date('07/19/2016'));
156 const endDate = moment(new Date('07/20/2016'));
157 const expectedAction = {
158 type: dateRangeActionTypes.DATE_RANGE_CHANGE,
161 startDate: startDate,
167 const results = DateRangeActions.onStartDateChange(startDate, endDate);
169 expect(results.type).to.equal(expectedAction.type);
170 expect(results.data.dateRange.startDate).to.equal(expectedAction.data.dateRange.startDate);
171 expect(results.data.dateRange.endDate).to.equal(expectedAction.data.dateRange.endDate);
173 it('Date Range Action - valid end date change', function() {
174 var moment = require('moment');
175 const startDate = moment(new Date('07/19/2016'));
176 const endDate = moment(new Date('07/20/2016'));
177 const expectedAction = {
178 type: dateRangeActionTypes.DATE_RANGE_CHANGE,
181 startDate: startDate,
187 const results = DateRangeActions.onEndDateChange(startDate, endDate);
189 expect(results.type).to.equal(expectedAction.type);
190 expect(results.data.dateRange.startDate).to.equal(expectedAction.data.dateRange.startDate);
191 expect(results.data.dateRange.endDate).to.equal(expectedAction.data.dateRange.endDate);
193 it('Date Range Action - end date before start date', function() {
194 var moment = require('moment');
195 const startDate = moment(new Date('07/21/2016'));
196 const endDate = moment(new Date('07/20/2016'));
197 const errorMsg = i18n(END_DATE) + ': ' +
198 moment(new Date(endDate)).format(DATE_PICKER_PLACEHOLDER) +
199 ' ' + i18n(IS_BEFORE_START_DATE);
200 const expectedAction = {
201 type: dateRangeActionTypes.INVALID_DATE_RANGE,
204 startDate: startDate,
211 const results = DateRangeActions.onEndDateChange(startDate, endDate);
213 expect(results.type).to.equal(expectedAction.type);
214 expect(results.data.dateRange.startDate).to.equal(expectedAction.data.dateRange.startDate);
215 expect(results.data.dateRange.endDate).to.equal(expectedAction.data.dateRange.endDate);
216 expect(results.data.errorMsg).to.equal(expectedAction.data.errorMsg);
218 it('Date Range Action - start date after date', function() {
219 var moment = require('moment');
220 const startDate = moment(new Date('07/21/2016'));
221 const endDate = moment(new Date('07/20/2016'));
222 const errorMsg = i18n(START_DATE) + ': ' +
223 moment(new Date(startDate)).format(DATE_PICKER_PLACEHOLDER) +
224 ' ' + i18n(IS_AFTER_END_DATE);
225 const expectedAction = {
226 type: dateRangeActionTypes.INVALID_DATE_RANGE,
229 startDate: startDate,
236 const results = DateRangeActions.onStartDateChange(startDate, endDate);
238 expect(results.type).to.equal(expectedAction.type);
239 expect(results.data.dateRange.startDate).to.equal(expectedAction.data.dateRange.startDate);
240 expect(results.data.dateRange.endDate).to.equal(expectedAction.data.dateRange.endDate);
241 expect(results.data.errorMsg).to.equal(expectedAction.data.errorMsg);
243 it('Date Range Action - confirm onStartDateChange action called on startDate change', function() {
244 const spy = sinon.spy(DateRangeActions, 'onStartDateChange');
245 let startDatePicker = TestUtils.findRenderedDOMComponentWithClass(this.component, 'start-date-picker');
246 startDatePicker.value = '05/09/2016';
247 TestUtils.Simulate.change(startDatePicker);
248 expect(DateRangeActions.onStartDateChange.calledOnce).to.be.true;
249 DateRangeActions.onStartDateChange.restore();
251 it('Date Range Action - confirm onEndDateChange action called on endDate change', function() {
252 const spy = sinon.spy(DateRangeActions, 'onEndDateChange');
253 let endDatePicker = TestUtils.findRenderedDOMComponentWithClass(this.component, 'end-date-picker');
254 endDatePicker.value = '05/09/2016';
255 TestUtils.Simulate.change(endDatePicker);
256 expect(DateRangeActions.onEndDateChange.calledOnce).to.be.true;
257 DateRangeActions.onEndDateChange.restore();