Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/sidebar/components/assignees/assignee_title_spec.js')
-rw-r--r--spec/frontend/sidebar/components/assignees/assignee_title_spec.js133
1 files changed, 133 insertions, 0 deletions
diff --git a/spec/frontend/sidebar/components/assignees/assignee_title_spec.js b/spec/frontend/sidebar/components/assignees/assignee_title_spec.js
new file mode 100644
index 00000000000..14a6bdbf907
--- /dev/null
+++ b/spec/frontend/sidebar/components/assignees/assignee_title_spec.js
@@ -0,0 +1,133 @@
+import { GlLoadingIcon } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
+import { mockTracking, triggerEvent } from 'helpers/tracking_helper';
+import Component from '~/sidebar/components/assignees/assignee_title.vue';
+
+describe('AssigneeTitle component', () => {
+ let wrapper;
+
+ const createComponent = (props) => {
+ return shallowMount(Component, {
+ propsData: {
+ numberOfAssignees: 0,
+ editable: false,
+ changing: false,
+ ...props,
+ },
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ describe('assignee title', () => {
+ it('renders assignee', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 1,
+ editable: false,
+ });
+
+ expect(wrapper.vm.$el.innerText.trim()).toEqual('Assignee');
+ });
+
+ it('renders 2 assignees', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 2,
+ editable: false,
+ });
+
+ expect(wrapper.vm.$el.innerText.trim()).toEqual('2 Assignees');
+ });
+ });
+
+ describe('gutter toggle', () => {
+ it('does not show toggle by default', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 2,
+ editable: false,
+ });
+
+ expect(wrapper.vm.$el.querySelector('.gutter-toggle')).toBeNull();
+ });
+
+ it('shows toggle when showToggle is true', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 2,
+ editable: false,
+ showToggle: true,
+ });
+
+ expect(wrapper.vm.$el.querySelector('.gutter-toggle')).toEqual(expect.any(Object));
+ });
+ });
+
+ describe('when changing is false', () => {
+ it('renders "Edit"', () => {
+ wrapper = createComponent({ editable: true });
+
+ expect(wrapper.find('[data-test-id="edit-link"]').text()).toEqual('Edit');
+ });
+ });
+
+ describe('when changing is true', () => {
+ it('renders "Edit"', () => {
+ wrapper = createComponent({ editable: true, changing: true });
+
+ expect(wrapper.find('[data-test-id="edit-link"]').text()).toEqual('Apply');
+ });
+ });
+
+ it('does not render spinner by default', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 0,
+ editable: false,
+ });
+
+ expect(wrapper.findComponent(GlLoadingIcon).exists()).toBe(false);
+ });
+
+ it('renders spinner when loading', () => {
+ wrapper = createComponent({
+ loading: true,
+ numberOfAssignees: 0,
+ editable: false,
+ });
+
+ expect(wrapper.findComponent(GlLoadingIcon).exists()).toBe(true);
+ });
+
+ it('does not render edit link when not editable', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 0,
+ editable: false,
+ });
+
+ expect(wrapper.vm.$el.querySelector('.edit-link')).toBeNull();
+ });
+
+ it('renders edit link when editable', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 0,
+ editable: true,
+ });
+
+ expect(wrapper.vm.$el.querySelector('.edit-link')).not.toBeNull();
+ });
+
+ it('tracks the event when edit is clicked', () => {
+ wrapper = createComponent({
+ numberOfAssignees: 0,
+ editable: true,
+ });
+
+ const spy = mockTracking('_category_', wrapper.element, jest.spyOn);
+ triggerEvent('.js-sidebar-dropdown-toggle');
+
+ expect(spy).toHaveBeenCalledWith('_category_', 'click_edit_button', {
+ label: 'right_sidebar',
+ property: 'assignee',
+ });
+ });
+});