1ad2ceb6dSDerick Montagueimport { mount, createLocalVue, createWrapper } from '@vue/test-utils';
298059c92SSukanya Pandeyimport Vue from 'vue';
36859203cSDerick Montagueimport Vuex from 'vuex';
498059c92SSukanya Pandeyimport AppHeader from '@/components/AppHeader';
56859203cSDerick Montague
66859203cSDerick Montague// Silencing warnings about undefined Bootsrap-vue components
76859203cSDerick MontagueVue.config.silent = true;
86859203cSDerick Montagueconst localVue = createLocalVue();
96859203cSDerick MontaguelocalVue.use(Vuex);
1098059c92SSukanya Pandey
1198059c92SSukanya Pandeydescribe('AppHeader.vue', () => {
126859203cSDerick Montague  const actions = {
1371114febSDerick Montague    'global/getServerStatus': jest.fn(),
14602e98aaSDerick Montague    'eventLog/getEventLogData': jest.fn(),
15f833c7e3SDerick Montague    'authentication/resetStoreState': jest.fn(),
16df8cf6acSwangqi02    'global/getSystemInfo': jest.fn(),
176859203cSDerick Montague  };
1898059c92SSukanya Pandey
19*665235c6SEd Tanous  // VueX requires that all modules be present, even if they aren't used
20*665235c6SEd Tanous  // in the test, so invent a Fake auth module and install it.
21*665235c6SEd Tanous  const modules = {
22*665235c6SEd Tanous    authentication: {
23*665235c6SEd Tanous      namespaced: true,
24*665235c6SEd Tanous    },
25*665235c6SEd Tanous  };
26*665235c6SEd Tanous
27*665235c6SEd Tanous  const store = new Vuex.Store({ actions, modules });
28ad2ceb6dSDerick Montague  const wrapper = mount(AppHeader, {
296859203cSDerick Montague    store,
306859203cSDerick Montague    localVue,
3198059c92SSukanya Pandey    mocks: {
32602e98aaSDerick Montague      $t: (key) => key,
33602e98aaSDerick Montague    },
3498059c92SSukanya Pandey  });
3598059c92SSukanya Pandey
36ad2ceb6dSDerick Montague  // Reset dispatch between tests so that multiple
37ad2ceb6dSDerick Montague  // actions are not dispatched for each test
3898059c92SSukanya Pandey  beforeEach(() => {
39ad2ceb6dSDerick Montague    store.dispatch = jest.fn();
4098059c92SSukanya Pandey  });
4198059c92SSukanya Pandey
42ad2ceb6dSDerick Montague  it('should exist', () => {
43ad2ceb6dSDerick Montague    expect(wrapper.exists()).toBe(true);
446859203cSDerick Montague  });
456859203cSDerick Montague
46ad2ceb6dSDerick Montague  it('should render correctly', () => {
47ad2ceb6dSDerick Montague    expect(wrapper.element).toMatchSnapshot();
486859203cSDerick Montague  });
496859203cSDerick Montague
506859203cSDerick Montague  it('refresh button click should emit refresh event', async () => {
516859203cSDerick Montague    wrapper.get('#app-header-refresh').trigger('click');
526859203cSDerick Montague    await wrapper.vm.$nextTick();
53ad2ceb6dSDerick Montague    expect(wrapper.emitted('refresh')).toBeTruthy();
546859203cSDerick Montague  });
556859203cSDerick Montague
56edb8a774SSukanya Pandey  it('nav-trigger button click should emit toggle-navigation event', async () => {
576859203cSDerick Montague    const rootWrapper = createWrapper(wrapper.vm.$root);
586859203cSDerick Montague    wrapper.get('#app-header-trigger').trigger('click');
596859203cSDerick Montague    await wrapper.vm.$nextTick();
60edb8a774SSukanya Pandey    expect(rootWrapper.emitted('toggle-navigation')).toBeTruthy();
616859203cSDerick Montague  });
626859203cSDerick Montague
636859203cSDerick Montague  it('logout button should dispatch authentication/logout', async () => {
6458a7a03cSDerick Montague    wrapper.get('[data-test-id="appHeader-link-logout"]').trigger('click');
656859203cSDerick Montague    await wrapper.vm.$nextTick();
66ad2ceb6dSDerick Montague    expect(store.dispatch).toHaveBeenCalledTimes(1);
6798059c92SSukanya Pandey  });
6898059c92SSukanya Pandey
69ad2ceb6dSDerick Montague  it('change:isNavigationOpen event should set isNavigationOpen prop to false', async () => {
70ad2ceb6dSDerick Montague    const rootWrapper = createWrapper(wrapper.vm.$root);
71edb8a774SSukanya Pandey    rootWrapper.vm.$emit('change-is-navigation-open', false);
72ad2ceb6dSDerick Montague    await rootWrapper.vm.$nextTick();
73ad2ceb6dSDerick Montague    expect(wrapper.vm.isNavigationOpen).toEqual(false);
74ad2ceb6dSDerick Montague  });
75ad2ceb6dSDerick Montague
76ad2ceb6dSDerick Montague  describe('Created lifecycle hook', () => {
774dd7eabfSSukanya Pandey    it('getSystemInfo should dispatch global/getSystemInfo', () => {
784dd7eabfSSukanya Pandey      wrapper.vm.getSystemInfo();
79ad2ceb6dSDerick Montague      expect(store.dispatch).toHaveBeenCalledTimes(1);
8098059c92SSukanya Pandey    });
8198059c92SSukanya Pandey
826859203cSDerick Montague    it('getEvents should dispatch eventLog/getEventLogData', () => {
8398059c92SSukanya Pandey      wrapper.vm.getEvents();
84ad2ceb6dSDerick Montague      expect(store.dispatch).toHaveBeenCalledTimes(1);
8598059c92SSukanya Pandey    });
8698059c92SSukanya Pandey  });
8798059c92SSukanya Pandey});
88