aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-ui/resources/scss/_components.scss
blob: 5458cbc411b650413398986f0be0e31f29fc0ac6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
@import 'components/forms';
@import 'components/validationForm';
@import 'components/dualListBox';
@import 'components/listEditorView';
@import 'components/toggleInput';
@import 'components/inputOptions';
@import 'components/progressBar';
@import 'components/versionController';
@import 'components/sequenceDiagram';
@import 'components/navigationSideBar';
@import 'components/loader';
@import 'components/dropzone';
@import 'components/submitErrorResponse';
@import 'components/expandableInput';
@import 'components/grid';
@import 'components/activityLog';
@import 'components/selectActionTable';
@import 'components/datepicker';
@import 'components/tree';
@import 'components/commitModal';
@import 'components/userNotifications';
@import 'components/overlay';
@import 'components/vspDetailsVendorSelect';
@import 'components/vnfBrowse';

%noselect {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

.clickable {
    cursor: pointer;
}

.no-padding {
    padding: 0;
}

.next-to-icon-label {
    $margin: 10px;
    margin-left: $margin;
    &.right {
        margin-left: 0;
        margin-right: $margin;
    }
}

.search-wrapper {
    display: flex;
    .search-input-control {
        flex: 1 1;
        margin: 0;
        .form-control {
            font-style: italic;
        }
    }
    .search-icon {
        position: relative;
        left: -23px;
        align-self: center;
        width: 0;
        color: $dark-gray;
    }
    .filter-icon {
        position: relative;
        left: -20px;
        align-self: center;
        width: 0;
        background-color: $white;
    }
}

.chevron::before {
    border-style: solid;
    border-width: 0.15em 0.15em 0 0;
    content: '';
    display: inline-block;
    height: 0.8em;
    left: 0.15em;
    position: relative;
    top: 0.15em;
    vertical-align: top;
    width: 0.8em;
}
.chevron.right:before {
    left: 0;
    transform: rotate(45deg);
}
.chevron.down:before {
    transform: rotate(135deg);
}
.chevron.left:before {
    transform: rotate(-135deg);
}
.chevron.top:before {
    transform: rotate(-45deg);
}
>, TS_BACKEND_SEARCH_SELECTED_NODE_URL, NO_MATCHES_FOUND } from 'generic-components/autoCompleteSearchBar/AutoCompleteSearchBarConstants.js'; import {AutoCompleteSearchBar} from 'generic-components/autoCompleteSearchBar/AutoCompleteSearchBar.jsx'; import {ERROR_RETRIEVING_DATA, POST, POST_HEADER} from 'app/networking/NetworkConstants.js'; import {tierSupportActionTypes, TSUI_SEARCH_URL} from 'app/tierSupport/TierSupportConstants.js'; import {TABLE_DATA} from 'app/tierSupport/selectedNodeDetails/SelectedNodeDetailsConstants.js'; import {mount, shallow} from 'enzyme'; import i18n from 'utils/i18n/i18n'; import { queryRequestedValues, clearSuggestionsTextField, onSuggestionsChange, onSuggestionsClearRequested, querySelectedNodeElement, getInvalidSearchInputEvent } from 'app/tierSupport/autoCompleteSearchBar/AutoCompleteSearchBarActions.js'; import * as networkCall from 'app/networking/NetworkCalls.js'; import autoCompleteSearchBarTestConstants from './autoCompleteSearchBarTestConstants'; const middlewares = [thunk]; // add your middlewares like `redux-thunk` const mockStore = configureStore(middlewares); describe('Core AutoCompleteSearchBar suite', function() { describe('AutoCompleteSearchBar - View test ', function() { let wrapper = undefined; beforeEach(() => { wrapper = mount( <AutoCompleteSearchBar onSuggestionsFetchRequested={() => {}} value='' suggestions={[]} cachedSuggestions={[]} feedbackMsgText='' feedbackMsgSeverity='' /> ); }); function createState(currentScreen, tierSupport) { return { currentScreen: currentScreen, tierSupport: tierSupport }; } 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 => { const mStore = mockStore({}); let mockNetwork = sinon.mock(networkCall); mockNetwork.expects('fetchRequest').once().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.validResponseJsonForNodeSearchFromFetchWithHits)); let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, onNewSearch: (searchRequestObject, value) => { if (Object.keys(searchRequestObject).length === 0) { mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword)); } else { mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest)); } } }); function onSucessfullNodeDetailsFoundEvent(){ return { type: tierSupportActionTypes.TS_NODE_SEARCH_RESULTS, data: autoCompleteSearchBarTestConstants.validResponseJsonForNodeSearchFromFetchWithHits }; } wrapper.find('.auto-complete-search-button').simulate('click'); mockNetwork.verify(); mockNetwork.restore(); setTimeout(() => expect(mStore.getActions()[0]).to.deep.equal(onSucessfullNodeDetailsFoundEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut); setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut); }); 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 => { const mStore = mockStore({}); let mockNetwork = sinon.mock(networkCall); mockNetwork.expects('fetchRequest').once().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.inValidResponseJsonForNodeSearchFromFetchWithHits)); let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, onNewSearch: (searchRequestObject, value) => { if (Object.keys(searchRequestObject).length === 0) { mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword)); } else { mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest)); } } }); function onNofullNodeDetailsFoundEvent(){ return { type: tierSupportActionTypes.TS_NODE_SEARCH_NO_RESULTS, data: {searchTag: autoCompleteSearchBarTestConstants.nodeSearchKeyword} }; } wrapper.find('.auto-complete-search-button').simulate('click'); mockNetwork.verify(); mockNetwork.restore(); setTimeout(() => { expect(mStore.getActions()[0]).to.deep.equal(onNofullNodeDetailsFoundEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut; }); setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut); }); it('Test flow - test onNewSearch() failure: Expect tierSupportActionTypes.TIER_SUPPORT_NETWORK_ERROR action being passed When Network fails', done => { const mStore = mockStore({}); let mockNetwork = sinon.mock(networkCall); mockNetwork.expects('fetchRequest').once().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError)); let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, onNewSearch: (searchRequestObject, value) => { if (Object.keys(searchRequestObject).length === 0) { mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword)); } else { mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest)); } } }); function onInvalidSelectedNodeSearchEvent(){ return { type: tierSupportActionTypes.TIER_SUPPORT_NETWORK_ERROR, data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_RETRIEVING_DATA} }; } wrapper.find('.auto-complete-search-button').simulate('click'); mockNetwork.verify(); mockNetwork.restore(); setTimeout(() => { expect(mStore.getActions()[0]).to.deep.equal(onInvalidSelectedNodeSearchEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut; }); setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut); }); it('Test flow - test onNewSearch() failure: Expect tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS action being passed When no cached suggestions are found', done => { const mStore = mockStore({}); let mockNetwork = sinon.mock(networkCall); mockNetwork.expects('fetchRequest').never().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError)); let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, cachedSuggestions: [], onNewSearch: (searchRequestObject, value) => { if (Object.keys(searchRequestObject).length === 0) { mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword)); } else { mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest)); } } }); function onInvalidSearchInputEvent(){ return { type: tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS, data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_INVALID_SEARCH_TERMS} }; } wrapper.find('.auto-complete-search-button').simulate('click'); mockNetwork.verify(); mockNetwork.restore(); setTimeout(() => { expect(mStore.getActions()[0]).to.deep.equal(onInvalidSearchInputEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut; }); setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut); }); it('Test flow - test onNewSearch() failure: Expect no matches found When no cached suggestions does not have the node searched for', done => { const mStore = mockStore({}); let mockNetwork = sinon.mock(networkCall); mockNetwork.expects('fetchRequest').never().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError)); let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType2.hits.hits, onNewSearch: (searchRequestObject, value) => { if (Object.keys(searchRequestObject).length === 0) { mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword)); } else { mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest)); } } }); function onInvalidSearchInputEvent(){ return { type: tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS, data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_INVALID_SEARCH_TERMS} }; } wrapper.find('.auto-complete-search-button').simulate('click'); mockNetwork.verify(); mockNetwork.restore(); setTimeout(() => { expect(mStore.getActions()[0]).to.deep.equal(onInvalidSearchInputEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut; }); setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut); }); it('Test flow - test onNewSearch() failure: Expect no node search When no matches are found in lookup search', done => { const mStore = mockStore({}); let mockNetwork = sinon.mock(networkCall); mockNetwork.expects('fetchRequest').never().withArgs(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword).returns(Promise.resolve(autoCompleteSearchBarTestConstants.networkError)); let mockedNetworkFetchRequest = () => networkCall.fetchRequest(TS_BACKEND_SEARCH_SELECTED_NODE_URL, POST, POST_HEADER, autoCompleteSearchBarTestConstants.nodeSearchKeyword); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.multipleNodeSearchKeyword, suggestions: [{_source:{ entityType:i18n(NO_MATCHES_FOUND),searchTags:''}}], cachedSuggestions: [{_source:{ entityType:i18n(NO_MATCHES_FOUND),searchTags:''}}], onNewSearch: (searchRequestObject, value) => { if (Object.keys(searchRequestObject).length === 0) { mStore.dispatch(getInvalidSearchInputEvent(autoCompleteSearchBarTestConstants.nodeSearchKeyword)); } else { mStore.dispatch(querySelectedNodeElement(searchRequestObject, autoCompleteSearchBarTestConstants.nodeSearchKeyword, mockedNetworkFetchRequest)); } } }); function onInvalidSearchInputEvent(){ return { type: tierSupportActionTypes.TS_NODE_SEARCH_INVALID_TERMS, data: {value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, errorMsg: ERROR_INVALID_SEARCH_TERMS} }; } wrapper.find('.react-autosuggest__input').simulate('focus'); wrapper.find('.auto-complete-search-button').simulate('click'); mockNetwork.verify(); mockNetwork.restore(); setTimeout(() => { expect(mStore.getActions()[0]).to.deep.equal(onInvalidSearchInputEvent()), autoCompleteSearchBarTestConstants.mockRequestTimeOut; }); setTimeout(() => done(), autoCompleteSearchBarTestConstants.mockRequestTimeOut); }); it('Expect the list to be populated when a the auto suggest input box is focused', function() { const mStore = mockStore({}); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.nodeSearchKeywordWithOutEqualSign, suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType1.hits.hits, }); wrapper.find('.react-autosuggest__input').simulate('focus'); expect(wrapper.find('Item').children()).to.have.length(6); }); it('Expect small list to be populated when a the auto suggest input box is focused', function() { const mStore = mockStore({}); wrapper.setProps({ value: autoCompleteSearchBarTestConstants.nodeSearchKeyword, suggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType2.hits.hits, cachedSuggestions: autoCompleteSearchBarTestConstants.validResponseJsonForRequestFromFetchWithHitsType2.hits.hits, }); wrapper.find('.react-autosuggest__input').simulate('focus'); expect(wrapper.find('Item').children()).to.have.length(3); }); }); });