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