diff options
Diffstat (limited to 'spec/frontend/whats_new/components/app_spec.js')
-rw-r--r-- | spec/frontend/whats_new/components/app_spec.js | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/spec/frontend/whats_new/components/app_spec.js b/spec/frontend/whats_new/components/app_spec.js index 59d05f68fdd..77c2ae19d1f 100644 --- a/spec/frontend/whats_new/components/app_spec.js +++ b/spec/frontend/whats_new/components/app_spec.js @@ -1,26 +1,30 @@ import { createLocalVue, mount } from '@vue/test-utils'; import Vuex from 'vuex'; import { GlDrawer } from '@gitlab/ui'; +import { mockTracking, unmockTracking, triggerEvent } from 'helpers/tracking_helper'; import App from '~/whats_new/components/app.vue'; const localVue = createLocalVue(); localVue.use(Vuex); describe('App', () => { + const propsData = { storageKey: 'storage-key' }; let wrapper; let store; let actions; let state; - let propsData = { features: '[ {"title":"Whats New Drawer"} ]' }; + let trackingSpy; const buildWrapper = () => { actions = { openDrawer: jest.fn(), closeDrawer: jest.fn(), + fetchItems: jest.fn(), }; state = { open: true, + features: null, }; store = new Vuex.Store({ @@ -35,12 +39,20 @@ describe('App', () => { }); }; - beforeEach(() => { + beforeEach(async () => { + document.body.dataset.page = 'test-page'; + document.body.dataset.namespaceId = 'namespace-840'; + + trackingSpy = mockTracking('_category_', null, jest.spyOn); buildWrapper(); + + wrapper.vm.$store.state.features = [{ title: 'Whats New Drawer', url: 'www.url.com' }]; + await wrapper.vm.$nextTick(); }); afterEach(() => { wrapper.destroy(); + unmockTracking(); }); const getDrawer = () => wrapper.find(GlDrawer); @@ -50,7 +62,11 @@ describe('App', () => { }); it('dispatches openDrawer when mounted', () => { - expect(actions.openDrawer).toHaveBeenCalled(); + expect(actions.openDrawer).toHaveBeenCalledWith(expect.any(Object), 'storage-key'); + expect(trackingSpy).toHaveBeenCalledWith(undefined, 'click_whats_new_drawer', { + label: 'namespace_id', + value: 'namespace-840', + }); }); it('dispatches closeDrawer when clicking close', () => { @@ -66,14 +82,24 @@ describe('App', () => { expect(getDrawer().props('open')).toBe(openState); }); - it('renders features when provided as props', () => { + it('renders features when provided via ajax', () => { + expect(actions.fetchItems).toHaveBeenCalled(); expect(wrapper.find('h5').text()).toBe('Whats New Drawer'); }); - it('handles bad json argument gracefully', () => { - propsData = { features: 'this is not json' }; - buildWrapper(); + it('send an event when feature item is clicked', () => { + trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn); - expect(getDrawer().exists()).toBe(true); + const link = wrapper.find('[data-testid="whats-new-title-link"]'); + triggerEvent(link.element); + + expect(trackingSpy.mock.calls[1]).toMatchObject([ + '_category_', + 'click_whats_new_item', + { + label: 'Whats New Drawer', + property: 'www.url.com', + }, + ]); }); }); |