import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk'
import {
  onNodeDetailsChange,
  splitPaneResize,
  onNodeMenuChange,
  clearVIData,
  setNotificationText
} from 'app/tierSupport/TierSupportActions.js';
import {
  tierSupportActionTypes
} from 'app/tierSupport/TierSupportConstants.js';
import {
  MESSAGE_LEVEL_WARNING
} from 'utils/GlobalConstants.js';
import {
  globalInlineMessageBarActionTypes
} from 'app/globalInlineMessageBar/GlobalInlineMessageBarConstants.js';

describe('TierSupportActionTests', () => {
  it('onNodeDetailsChange', () => {
    const newDetails = {
      id: '7352312c7bfa814c3071a803d98c5b670952765974876e55ef954e0f8a930b1c',
      itemType: 'complex',
      nodeMeta: {
        nodeLabel1: 'Artic',
        nodeValidated: false,
        nodeLocation: 'bottom'
      },
      rootNode: false,
      index: 2,
    };
    const middlewares = [thunk];
    const mockStore = configureStore(middlewares);
    const store = mockStore({ tierSupportReducer: {} });
    store.dispatch(onNodeDetailsChange(newDetails));
    const actions = store.getActions();
    expect(actions).toEqual([{
      type: tierSupportActionTypes.TS_GRAPH_NODE_SELECTED,
      data: newDetails
    }]);
  });

  it('splitPaneResize', () => {
    const initialLoad = {
      test: 'message'
    };
    const middlewares = [thunk];
    const mockStore = configureStore(middlewares);
    const store = mockStore({ tierSupportReducer: {} });
    store.dispatch(splitPaneResize(initialLoad));
    const actions = store.getActions();
    expect(actions).toEqual([{
      type: tierSupportActionTypes.SPLIT_PANE_RESIZE,
      data: initialLoad
    }]);
  });

  it('onNodeMenuChange', () => {
    const selectedMenu = {
      test: 'menuData'
    };
    const middlewares = [thunk];
    const mockStore = configureStore(middlewares);
    const store = mockStore({ tierSupportReducer: {} });
    store.dispatch(onNodeMenuChange(selectedMenu));
    const actions = store.getActions();
    expect(actions).toEqual([{
      type: tierSupportActionTypes.TS_GRAPH_NODE_MENU_SELECTED,
      data: selectedMenu
    }]);
  });

  it('clearVIData', () => {
    const middlewares = [thunk];
    const mockStore = configureStore(middlewares);
    const store = mockStore({ tierSupportReducer: {} });
    store.dispatch(clearVIData());
    const actions = store.getActions();
    expect(actions).toEqual([{
      type: tierSupportActionTypes.TIER_SUPPORT_CLEAR_DATA
    }]);
  });
  //
  // it('fetchSelectedNodeElement - no results', () => {
  //   const middlewares = [thunk];
  //   const mockStore = configureStore(middlewares);
  //   const store = mockStore({ tierSupportReducer: {} });
  //   const nodes = [
  //     {
  //       id: '7352312c7bfa814c3071a803d98c5b670952765974876e55ef954e0f8a930b1c',
  //       itemType: 'complex',
  //       nodeMeta: {
  //         className: 'selectedSearchedNodeClass',
  //         nodeLabel1: 'Artic',
  //         nodeValidated: false,
  //         nodeLocation: 'bottom'
  //       },
  //       rootNode: false,
  //       index: 2
  //     },
  //     {
  //       id: '3899453d98c5b670952765974876e55ef954e0f8a930b1c',
  //       itemType: 'generic-vnf',
  //       nodeMeta: {
  //         className: 'someOtherClassName',
  //         nodeLabel1: 'Artic',
  //         nodeValidated: false,
  //         nodeLocation: 'bottom'
  //       },
  //       rootNode: false,
  //       index: 1
  //     }
  //   ];
  //   const expectedActions = [
  //     {
  //       type: tierSupportActionTypes.TS_NODE_SEARCH_RESULTS,
  //       data: {
  //         nodes: nodes
  //       }
  //     },
  //     {
  //       type: tierSupportActionTypes.TS_GRAPH_NODE_SELECTED,
  //       data: nodes[0]
  //     }
  //   ];
  //
  //   console.log(nodes);
  //
  //   let fetchRequestCallback = () => {
  //     const results = {
  //       nodes: nodes
  //     };
  //     let init = { status: 200 };
  //     let myBlob = new Blob();
  //     let response = new Response();
  //     return new Promise((resolve, reject) => {
  //       resolve(response);
  //     });
  //   };
  //   return store.dispatch(fetchSelectedNodeElement(fetchRequestCallback))
  //     .then( () => {
  //       const actions = store.getActions();
  //       expect(actions).toEqual(expectedActions);
  //     });
  // });

  it('setNotificationText', () => {
    const middlewares = [thunk];
    const mockStore = configureStore(middlewares);
    const store = mockStore({ tierSupportReducer: {} });
    const msgText = 'some test text';
    const msgSeverity = MESSAGE_LEVEL_WARNING;
    store.dispatch(setNotificationText(msgText, msgSeverity));
    const actions = store.getActions();
    expect(actions).toEqual([{
      type: globalInlineMessageBarActionTypes.SET_GLOBAL_MESSAGE,
      data: {
        msgText: msgText,
        msgSeverity: msgSeverity
      }
    }]);
  });

  it('Clear notification text with setNotificationText', () => {
    const middlewares = [thunk];
    const mockStore = configureStore(middlewares);
    const store = mockStore({ tierSupportReducer: {} });
    const msgText = '';
    const msgSeverity = MESSAGE_LEVEL_WARNING;
    store.dispatch(setNotificationText(msgText, msgSeverity));
    const actions = store.getActions();
    expect(actions).toEqual([{
      type: globalInlineMessageBarActionTypes.CLEAR_GLOBAL_MESSAGE
    }]);
  });
})