diff options
Diffstat (limited to 'spec/frontend/pages')
9 files changed, 80 insertions, 19 deletions
diff --git a/spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap b/spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap index fc37a545511..2fbc700d4f5 100644 --- a/spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap +++ b/spec/frontend/pages/admin/users/components/__snapshots__/delete_user_modal_spec.js.snap @@ -3,14 +3,15 @@ exports[`User Operation confirmation modal renders modal with form included 1`] = ` <div> <p> - content + <gl-sprintf-stub + message="content" + /> </p> <p> - To confirm, type - <code> - username - </code> + <gl-sprintf-stub + message="To confirm, type %{username}" + /> </p> <form diff --git a/spec/frontend/pages/dashboard/projects/index/components/customize_homepage_banner_spec.js b/spec/frontend/pages/dashboard/projects/index/components/customize_homepage_banner_spec.js index b3a297ac2c5..fbe2274c40d 100644 --- a/spec/frontend/pages/dashboard/projects/index/components/customize_homepage_banner_spec.js +++ b/spec/frontend/pages/dashboard/projects/index/components/customize_homepage_banner_spec.js @@ -1,6 +1,7 @@ import { shallowMount } from '@vue/test-utils'; import { GlBanner } from '@gitlab/ui'; import MockAdapter from 'axios-mock-adapter'; +import { mockTracking, unmockTracking, triggerEvent } from 'helpers/tracking_helper'; import CustomizeHomepageBanner from '~/pages/dashboard/projects/index/components/customize_homepage_banner.vue'; import axios from '~/lib/utils/axios_utils'; @@ -10,18 +11,22 @@ const provide = { preferencesBehaviorPath: 'some/behavior/path', calloutsPath: 'call/out/path', calloutsFeatureId: 'some-feature-id', + trackLabel: 'home_page', }; const createComponent = () => { - return shallowMount(CustomizeHomepageBanner, { provide }); + return shallowMount(CustomizeHomepageBanner, { provide, stubs: { GlBanner } }); }; describe('CustomizeHomepageBanner', () => { + let trackingSpy; let mockAxios; let wrapper; beforeEach(() => { mockAxios = new MockAdapter(axios); + document.body.dataset.page = 'some:page'; + trackingSpy = mockTracking('_category_', undefined, jest.spyOn); wrapper = createComponent(); }); @@ -29,22 +34,75 @@ describe('CustomizeHomepageBanner', () => { wrapper.destroy(); wrapper = null; mockAxios.restore(); + unmockTracking(); }); it('should render the banner when not dismissed', () => { - expect(wrapper.contains(GlBanner)).toBe(true); + expect(wrapper.find(GlBanner).exists()).toBe(true); }); it('should close the banner when dismiss is clicked', async () => { mockAxios.onPost(provide.calloutsPath).replyOnce(200); - expect(wrapper.contains(GlBanner)).toBe(true); + expect(wrapper.find(GlBanner).exists()).toBe(true); wrapper.find(GlBanner).vm.$emit('close'); await wrapper.vm.$nextTick(); - expect(wrapper.contains(GlBanner)).toBe(false); + expect(wrapper.find(GlBanner).exists()).toBe(false); }); it('includes the body text from options', () => { expect(wrapper.html()).toContain(wrapper.vm.$options.i18n.body); }); + + describe('tracking', () => { + const preferencesTrackingEvent = 'click_go_to_preferences'; + const mockTrackingOnWrapper = () => { + unmockTracking(); + trackingSpy = mockTracking('_category_', wrapper.element, jest.spyOn); + }; + + it('sets the needed data attributes for tracking button', async () => { + await wrapper.vm.$nextTick(); + const button = wrapper.find(`[href='${wrapper.vm.preferencesBehaviorPath}']`); + + expect(button.attributes('data-track-event')).toEqual(preferencesTrackingEvent); + expect(button.attributes('data-track-label')).toEqual(provide.trackLabel); + }); + + it('sends a tracking event when the banner is shown', () => { + const trackCategory = undefined; + const trackEvent = 'show_home_page_banner'; + + expect(trackingSpy).toHaveBeenCalledWith(trackCategory, trackEvent, { + label: provide.trackLabel, + }); + }); + + it('sends a tracking event when the banner is dismissed', async () => { + mockTrackingOnWrapper(); + mockAxios.onPost(provide.calloutsPath).replyOnce(200); + const trackCategory = undefined; + const trackEvent = 'click_dismiss'; + + wrapper.find(GlBanner).vm.$emit('close'); + + await wrapper.vm.$nextTick(); + expect(trackingSpy).toHaveBeenCalledWith(trackCategory, trackEvent, { + label: provide.trackLabel, + }); + }); + + it('sends a tracking event when the button is clicked', async () => { + mockTrackingOnWrapper(); + mockAxios.onPost(provide.calloutsPath).replyOnce(200); + const button = wrapper.find(`[href='${wrapper.vm.preferencesBehaviorPath}']`); + + triggerEvent(button.element); + + await wrapper.vm.$nextTick(); + expect(trackingSpy).toHaveBeenCalledWith('_category_', preferencesTrackingEvent, { + label: provide.trackLabel, + }); + }); + }); }); diff --git a/spec/frontend/pages/dashboard/todos/index/todos_spec.js b/spec/frontend/pages/dashboard/todos/index/todos_spec.js index 204fe3d0a68..5ecb7860103 100644 --- a/spec/frontend/pages/dashboard/todos/index/todos_spec.js +++ b/spec/frontend/pages/dashboard/todos/index/todos_spec.js @@ -2,7 +2,6 @@ import $ from 'jquery'; import MockAdapter from 'axios-mock-adapter'; import Todos from '~/pages/dashboard/todos/index/todos'; import '~/lib/utils/common_utils'; -import '~/gl_dropdown'; import axios from '~/lib/utils/axios_utils'; import { addDelimiter } from '~/lib/utils/text_utility'; import { visitUrl } from '~/lib/utils/url_utility'; diff --git a/spec/frontend/pages/import/bitbucket_server/components/bitbucket_server_status_table_spec.js b/spec/frontend/pages/import/bitbucket_server/components/bitbucket_server_status_table_spec.js index 0bb96ee33d4..67ace608127 100644 --- a/spec/frontend/pages/import/bitbucket_server/components/bitbucket_server_status_table_spec.js +++ b/spec/frontend/pages/import/bitbucket_server/components/bitbucket_server_status_table_spec.js @@ -36,7 +36,7 @@ describe('BitbucketServerStatusTable', () => { it('renders bitbucket status table component', () => { createComponent(); - expect(wrapper.contains(BitbucketStatusTable)).toBe(true); + expect(wrapper.find(BitbucketStatusTable).exists()).toBe(true); }); it('renders Reconfigure button', async () => { diff --git a/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js b/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js index 2ec608569e3..9993e4da980 100644 --- a/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js +++ b/spec/frontend/pages/projects/forks/new/components/fork_groups_list_spec.js @@ -70,7 +70,7 @@ describe('Fork groups list component', () => { replyWith(() => new Promise(() => {})); createWrapper(); - expect(wrapper.contains(GlLoadingIcon)).toBe(true); + expect(wrapper.find(GlLoadingIcon).exists()).toBe(true); }); it('displays empty text if no groups are available', async () => { @@ -89,7 +89,7 @@ describe('Fork groups list component', () => { await waitForPromises(); - expect(wrapper.contains(GlSearchBoxByType)).toBe(true); + expect(wrapper.find(GlSearchBoxByType).exists()).toBe(true); }); it('renders list items for each available group', async () => { diff --git a/spec/frontend/pages/projects/graphs/code_coverage_spec.js b/spec/frontend/pages/projects/graphs/code_coverage_spec.js index 54a080fb62b..8884f7815ab 100644 --- a/spec/frontend/pages/projects/graphs/code_coverage_spec.js +++ b/spec/frontend/pages/projects/graphs/code_coverage_spec.js @@ -124,7 +124,7 @@ describe('Code Coverage', () => { }); it('renders the dropdown with all custom names as options', () => { - expect(wrapper.contains(GlDeprecatedDropdown)).toBeDefined(); + expect(wrapper.find(GlDeprecatedDropdown).exists()).toBeDefined(); expect(findAllDropdownItems()).toHaveLength(codeCoverageMockData.length); expect(findFirstDropdownItem().text()).toBe(codeCoverageMockData[0].group_name); }); @@ -150,7 +150,11 @@ describe('Code Coverage', () => { .find(GlIcon) .exists(), ).toBe(false); - expect(findSecondDropdownItem().contains(GlIcon)).toBe(true); + expect( + findSecondDropdownItem() + .find(GlIcon) + .exists(), + ).toBe(true); }); it('updates the graph data when selecting a different option in dropdown', async () => { diff --git a/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js b/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js index 4c73225b54c..5efcedf678b 100644 --- a/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js +++ b/spec/frontend/pages/projects/pipeline_schedules/shared/components/timezone_dropdown_spec.js @@ -1,5 +1,4 @@ import $ from 'jquery'; -import '~/gl_dropdown'; import TimezoneDropdown, { formatUtcOffset, formatTimezone, diff --git a/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js b/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js index 8ab5426a005..1fd9d285610 100644 --- a/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js +++ b/spec/frontend/pages/projects/shared/permissions/components/project_feature_settings_spec.js @@ -27,14 +27,14 @@ describe('Project Feature Settings', () => { describe('Hidden name input', () => { it('should set the hidden name input if the name exists', () => { - expect(wrapper.find({ name: 'Test' }).props().value).toBe(1); + expect(wrapper.find(`input[name=${defaultProps.name}]`).attributes().value).toBe('1'); }); it('should not set the hidden name input if the name does not exist', () => { wrapper.setProps({ name: null }); return wrapper.vm.$nextTick(() => { - expect(wrapper.find({ name: 'Test' }).exists()).toBe(false); + expect(wrapper.find(`input[name=${defaultProps.name}]`).exists()).toBe(false); }); }); }); diff --git a/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js b/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js index a50ceed5d09..e760cead760 100644 --- a/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js +++ b/spec/frontend/pages/projects/shared/permissions/components/settings_panel_spec.js @@ -40,7 +40,7 @@ const defaultProps = { pagesAvailable: true, pagesAccessControlEnabled: false, pagesAccessControlForced: false, - pagesHelpPath: '/help/user/project/pages/introduction#gitlab-pages-access-control-core', + pagesHelpPath: '/help/user/project/pages/introduction#gitlab-pages-access-control', packagesAvailable: false, packagesHelpPath: '/help/user/packages/index', }; |