From 9735395f94088df7e6470e3e8a2638385ede36b6 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 26 Sep 2019 06:06:27 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- spec/frontend/helpers/tracking_helper.js | 25 +++++++ spec/frontend/ide/components/error_message_spec.js | 8 +-- .../sidebar/confidential_issue_sidebar_spec.js | 77 ++++++++++++++++++++++ 3 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 spec/frontend/helpers/tracking_helper.js create mode 100644 spec/frontend/sidebar/confidential_issue_sidebar_spec.js (limited to 'spec/frontend') diff --git a/spec/frontend/helpers/tracking_helper.js b/spec/frontend/helpers/tracking_helper.js new file mode 100644 index 00000000000..68c1bd2dbca --- /dev/null +++ b/spec/frontend/helpers/tracking_helper.js @@ -0,0 +1,25 @@ +import Tracking from '~/tracking'; + +export default Tracking; + +let document; +let handlers; + +export function mockTracking(category = '_category_', documentOverride, spyMethod) { + document = documentOverride || window.document; + window.snowplow = () => {}; + Tracking.bindDocument(category, document); + return spyMethod ? spyMethod(Tracking, 'event') : null; +} + +export function unmockTracking() { + window.snowplow = undefined; + handlers.forEach(event => document.removeEventListener(event.name, event.func)); +} + +export function triggerEvent(selectorOrEl, eventName = 'click') { + const event = new Event(eventName, { bubbles: true }); + const el = typeof selectorOrEl === 'string' ? document.querySelector(selectorOrEl) : selectorOrEl; + + el.dispatchEvent(event); +} diff --git a/spec/frontend/ide/components/error_message_spec.js b/spec/frontend/ide/components/error_message_spec.js index fd6d1a494d4..e995c64645e 100644 --- a/spec/frontend/ide/components/error_message_spec.js +++ b/spec/frontend/ide/components/error_message_spec.js @@ -95,18 +95,18 @@ describe('IDE error message component', () => { }); it('shows loading icon when loading', () => { - let resolve; + let resolveAction; actionMock.mockImplementation( () => - new Promise(ok => { - resolve = ok; + new Promise(resolve => { + resolveAction = resolve; }), ); wrapper.find('button').trigger('click'); return wrapper.vm.$nextTick(() => { expect(wrapper.find(GlLoadingIcon).isVisible()).toBe(true); - resolve(); + resolveAction(); }); }); diff --git a/spec/frontend/sidebar/confidential_issue_sidebar_spec.js b/spec/frontend/sidebar/confidential_issue_sidebar_spec.js new file mode 100644 index 00000000000..549010075db --- /dev/null +++ b/spec/frontend/sidebar/confidential_issue_sidebar_spec.js @@ -0,0 +1,77 @@ +import Vue from 'vue'; +import confidentialIssueSidebar from '~/sidebar/components/confidential/confidential_issue_sidebar.vue'; +import { mockTracking, triggerEvent } from 'helpers/tracking_helper'; + +describe('Confidential Issue Sidebar Block', () => { + let vm1; + let vm2; + + beforeEach(() => { + const Component = Vue.extend(confidentialIssueSidebar); + const service = { + update: () => Promise.resolve(true), + }; + + vm1 = new Component({ + propsData: { + isConfidential: true, + isEditable: true, + service, + }, + }).$mount(); + + vm2 = new Component({ + propsData: { + isConfidential: false, + isEditable: false, + service, + }, + }).$mount(); + }); + + it('shows if confidential and/or editable', () => { + expect(vm1.$el.innerHTML.includes('Edit')).toBe(true); + + expect(vm1.$el.innerHTML.includes('This issue is confidential')).toBe(true); + + expect(vm2.$el.innerHTML.includes('Not confidential')).toBe(true); + }); + + it('displays the edit form when editable', () => { + expect(vm1.edit).toBe(false); + + vm1.$el.querySelector('.confidential-edit').click(); + + expect(vm1.edit).toBe(true); + + return Vue.nextTick().then(() => { + expect(vm1.$el.innerHTML.includes('You are going to turn off the confidentiality.')).toBe( + true, + ); + }); + }); + + it('displays the edit form when opened from collapsed state', () => { + expect(vm1.edit).toBe(false); + + vm1.$el.querySelector('.sidebar-collapsed-icon').click(); + + expect(vm1.edit).toBe(true); + + return Vue.nextTick().then(() => { + expect(vm1.$el.innerHTML.includes('You are going to turn off the confidentiality.')).toBe( + true, + ); + }); + }); + + it('tracks the event when "Edit" is clicked', () => { + const spy = mockTracking('_category_', vm1.$el, jest.spyOn); + triggerEvent('.confidential-edit'); + + expect(spy).toHaveBeenCalledWith('_category_', 'click_edit_button', { + label: 'right_sidebar', + property: 'confidentiality', + }); + }); +}); -- cgit v1.2.3