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 {expect, deep} from 'chai';
22 import React from 'react';
23 import {Provider} from 'react-redux';
24 import sinon from 'sinon';
25 import configureStore from 'redux-mock-store';
26 import thunk from 'redux-thunk';
27 import {storeCreator} from 'app/AppStore.js';
28 import TestUtils from 'react-dom/test-utils';
30 autoCompleteSearchBarActionTypes,
31 ERROR_INVALID_SEARCH_TERMS,
32 TS_BACKEND_SEARCH_SELECTED_NODE_URL,
34 } from 'generic-components/autoCompleteSearchBar/AutoCompleteSearchBarConstants.js';
35 import {AutoCompleteSearchBar} from 'generic-components/autoCompleteSearchBar/AutoCompleteSearchBar.jsx';
36 import {ERROR_RETRIEVING_DATA, POST, POST_HEADER} from 'app/networking/NetworkConstants.js';
37 import {tierSupportActionTypes, TSUI_SEARCH_URL} from 'app/tierSupport/TierSupportConstants.js';
39 import {mount, shallow} from 'enzyme';
40 import i18n from 'utils/i18n/i18n';
43 clearSuggestionsTextField,
45 onSuggestionsClearRequested,
46 querySelectedNodeElement,
47 getInvalidSearchInputEvent
48 } from 'app/globalAutoCompleteSearchBar/GlobalAutoCompleteSearchBarActions.js';
49 import * as networkCall from 'app/networking/NetworkCalls.js';
50 import autoCompleteSearchBarTestConstants from './autoCompleteSearchBarTestConstants';
52 const middlewares = [thunk]; // add your middlewares like `redux-thunk`
53 const mockStore = configureStore(middlewares);
56 describe('Core AutoCompleteSearchBar suite', function() {
58 describe('AutoCompleteSearchBar - View test ', function() {
59 let wrapper = undefined;
63 <AutoCompleteSearchBar
64 onSuggestionsFetchRequested={() => {}}
67 cachedSuggestions={[]}
69 feedbackMsgSeverity=''
74 function createState(currentScreen, tierSupport) {
76 currentScreen: currentScreen,
77 tierSupport: tierSupport
83 it('Test flow - test onNewSearch() success test: Expect tierSupportActionTypes.TS_NODE_SEARCH_RESULTS action being passed When the selected node is found in the main database and e', done => {
84 const mStore = mockStore({});
85 let mockNetwork = sinon.mock(networkCall);
86 mockNetwork.expects('fetchRequest').once().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.validResponseJsonForNodeSearchFromFetchWithHits));
87 let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword);
89 value: autoCompleteSearchBarTestConstants.nodeSearchKeyword,
90 suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
91 cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
92 onNewSearch: (searchRequestObject, value) => {
93 if (Object.keys(searchRequestObject).length === 0) {
94 mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword));
96 mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest));
102 function onSucessfullNodeDetailsFoundEvent(){
104 type: tierSupportActionTypes.TS_NODE_SEARCH_RESULTS,
105 data: autoCompleteSearchBarTestConstants.validResponseJsonForNodeSearchFromFetchWithHits
108 wrapper.find('.auto-complete-search-button').simulate('click');
109 mockNetwork.verify();
110 mockNetwork.restore();
111 setTimeout(() => expect(mStore.getActions()[0]).to.deep.equal(onSucessfullNodeDetailsFoundEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut);
112 setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut);
115 it('Test flow - test onNewSearch() failure test: Expect tierSupportActionTypes.TS_NODE_SEARCH_NO_RESULTS action being passed When the selected node is not found in the main database and e', done => {
117 const mStore = mockStore({});
118 let mockNetwork = sinon.mock(networkCall);
119 mockNetwork.expects('fetchRequest').once().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.inValidResponseJsonForNodeSearchFromFetchWithHits));
120 let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword);
122 value: autoCompleteSearchBarTestConstants.nodeSearchKeyword,
123 suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
124 cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
125 onNewSearch: (searchRequestObject, value) => {
126 if (Object.keys(searchRequestObject).length === 0) {
127 mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword));
129 mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest));
135 function onNofullNodeDetailsFoundEvent(){
137 type: tierSupportActionTypes.TS_NODE_SEARCH_NO_RESULTS,
138 data: {searchTag: autoCompleteSearchBarTestConstants.nodeSearchKeyword}
141 wrapper.find('.auto-complete-search-button').simulate('click');
142 mockNetwork.verify();
143 mockNetwork.restore();
145 expect(mStore.getActions()[0]).to.deep.equal(onNofullNodeDetailsFoundEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut;
147 setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut);
150 it('Test flow - test onNewSearch() failure: Expect tierSupportActionTypes.TIER_SUPPORT_NETWORK_ERROR action being passed When Network fails', done => {
151 const mStore = mockStore({});
152 let mockNetwork = sinon.mock(networkCall);
153 mockNetwork.expects('fetchRequest').once().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError));
154 let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword);
156 value: autoCompleteSearchBarTestConstants.nodeSearchKeyword,
157 suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
158 cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
159 onNewSearch: (searchRequestObject, value) => {
160 if (Object.keys(searchRequestObject).length === 0) {
161 mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword));
163 mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest));
169 function onInvalidSelectedNodeSearchEvent(){
171 type: tierSupportActionTypes.TIER_SUPPORT_NETWORK_ERROR,
172 data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_RETRIEVING_DATA}
175 wrapper.find('.auto-complete-search-button').simulate('click');
176 mockNetwork.verify();
177 mockNetwork.restore();
179 expect(mStore.getActions()[0]).to.deep.equal(onInvalidSelectedNodeSearchEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut;
181 setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut);
185 it('Test flow - test onNewSearch() failure: Expect tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS action being passed When no cached suggestions are found', done => {
186 const mStore = mockStore({});
187 let mockNetwork = sinon.mock(networkCall);
188 mockNetwork.expects('fetchRequest').never().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError));
189 let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword);
191 value: autoCompleteSearchBarTestConstants.nodeSearchKeyword,
192 suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
193 cachedSuggestions: [],
194 onNewSearch: (searchRequestObject, value) => {
195 if (Object.keys(searchRequestObject).length === 0) {
196 mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword));
198 mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest));
204 function onInvalidSearchInputEvent(){
206 type: tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS,
207 data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_INVALID_SEARCH_TERMS}
210 wrapper.find('.auto-complete-search-button').simulate('click');
211 mockNetwork.verify();
212 mockNetwork.restore();
214 expect(mStore.getActions()[0]).to.deep.equal(onInvalidSearchInputEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut;
216 setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut);
219 it('Test flow - test onNewSearch() failure: Expect no matches found When no cached suggestions does not have the node searched for', done => {
220 const mStore = mockStore({});
221 let mockNetwork = sinon.mock(networkCall);
222 mockNetwork.expects('fetchRequest').never().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError));
223 let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword);
225 value: autoCompleteSearchBarTestConstants.nodeSearchKeyword,
226 suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
227 cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType2.hits.hits,
228 onNewSearch: (searchRequestObject, value) => {
229 if (Object.keys(searchRequestObject).length === 0) {
230 mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword));
232 mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest));
238 function onInvalidSearchInputEvent(){
240 type: tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS,
241 data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_INVALID_SEARCH_TERMS}
244 wrapper.find('.auto-complete-search-button').simulate('click');
245 mockNetwork.verify();
246 mockNetwork.restore();
248 expect(mStore.getActions()[0]).to.deep.equal(onInvalidSearchInputEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut;
250 setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut);
253 it('Test flow - test onNewSearch() failure: Expect no node search When no matches are found in lookup search', done => {
254 const mStore = mockStore({});
255 let mockNetwork = sinon.mock(networkCall);
256 mockNetwork.expects('fetchRequest').never().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError));
257 let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword);
259 value: autoCompleteSearchBarTestConstants.multipleNodeSearchKeyword,
260 suggestions: [{_source:{ entityType:i18n(NO_MATCHES_FOUND),searchTags:''}}],
261 cachedSuggestions: [{_source:{ entityType:i18n(NO_MATCHES_FOUND),searchTags:''}}],
262 onNewSearch: (searchRequestObject, value) => {
263 if (Object.keys(searchRequestObject).length === 0) {
264 mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword));
266 mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest));
272 function onInvalidSearchInputEvent(){
274 type: tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS,
275 data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_INVALID_SEARCH_TERMS}
279 wrapper.find('.react-autosuggest__input').simulate('focus');
280 wrapper.find('.auto-complete-search-button').simulate('click');
281 mockNetwork.verify();
282 mockNetwork.restore();
284 expect(mStore.getActions()[0]).to.deep.equal(onInvalidSearchInputEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut;
286 setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut);
289 it('Expect the list to be populated when a the auto suggest input box is focused', function() {
290 const mStore = mockStore({});
292 value: autoCompleteSearchBarTestConstants.nodeSearchKeywordWithOutEqualSign,
293 suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
294 cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits,
297 wrapper.find('.react-autosuggest__input').simulate('focus');
298 expect(wrapper.find('Item').children()).to.have.length(6);
301 it('Expect small list to be populated when a the auto suggest input box is focused', function() {
302 const mStore = mockStore({});
304 value: autoCompleteSearchBarTestConstants.nodeSearchKeyword,
305 suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType2.hits.hits,
306 cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType2.hits.hits,
309 wrapper.find('.react-autosuggest__input').simulate('focus');
310 expect(wrapper.find('Item').children()).to.have.length(3);