summaryrefslogtreecommitdiff
path: root/spec/frontend/boards/components/board_settings_sidebar_spec.js
blob: f39adc0fc491573bddba7b86724b149d646feafb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
import '~/boards/models/list';
import MockAdapter from 'axios-mock-adapter';
import axios from 'axios';
import Vuex from 'vuex';
import { shallowMount, createLocalVue } from '@vue/test-utils';
import { GlDrawer, GlLabel } from '@gitlab/ui';
import BoardSettingsSidebar from '~/boards/components/board_settings_sidebar.vue';
import boardsStore from '~/boards/stores/boards_store';
import sidebarEventHub from '~/sidebar/event_hub';
import { inactiveId } from '~/boards/constants';

const localVue = createLocalVue();

localVue.use(Vuex);

describe('BoardSettingsSidebar', () => {
  let wrapper;
  let mock;
  let storeActions;
  const labelTitle = 'test';
  const labelColor = '#FFFF';
  const listId = 1;

  const createComponent = (state = { activeId: inactiveId }, actions = {}) => {
    storeActions = actions;

    const store = new Vuex.Store({
      state,
      actions: storeActions,
    });

    wrapper = shallowMount(BoardSettingsSidebar, {
      store,
      localVue,
    });
  };
  const findLabel = () => wrapper.find(GlLabel);
  const findDrawer = () => wrapper.find(GlDrawer);

  beforeEach(() => {
    boardsStore.create();
  });

  afterEach(() => {
    jest.restoreAllMocks();
    wrapper.destroy();
  });

  it('finds a GlDrawer component', () => {
    createComponent();

    expect(findDrawer().exists()).toBe(true);
  });

  describe('on close', () => {
    it('calls closeSidebar', async () => {
      const spy = jest.fn();
      createComponent({ activeId: inactiveId }, { setActiveId: spy });

      findDrawer().vm.$emit('close');

      await wrapper.vm.$nextTick();

      expect(storeActions.setActiveId).toHaveBeenCalledWith(
        expect.anything(),
        inactiveId,
        undefined,
      );
    });

    it('calls closeSidebar on sidebar.closeAll event', async () => {
      createComponent({ activeId: inactiveId }, { setActiveId: jest.fn() });

      sidebarEventHub.$emit('sidebar.closeAll');

      await wrapper.vm.$nextTick();

      expect(storeActions.setActiveId).toHaveBeenCalledWith(
        expect.anything(),
        inactiveId,
        undefined,
      );
    });
  });

  describe('when activeId is zero', () => {
    it('renders GlDrawer with open false', () => {
      createComponent();

      expect(findDrawer().props('open')).toBe(false);
    });
  });

  describe('when activeId is greater than zero', () => {
    beforeEach(() => {
      mock = new MockAdapter(axios);

      boardsStore.addList({
        id: listId,
        label: { title: labelTitle, color: labelColor },
        list_type: 'label',
      });
    });

    afterEach(() => {
      boardsStore.removeList(listId);
    });

    it('renders GlDrawer with open false', () => {
      createComponent({ activeId: 1 });

      expect(findDrawer().props('open')).toBe(true);
    });
  });

  describe('when activeId is in boardsStore', () => {
    beforeEach(() => {
      mock = new MockAdapter(axios);

      boardsStore.addList({
        id: listId,
        label: { title: labelTitle, color: labelColor },
        list_type: 'label',
      });

      createComponent({ activeId: listId });
    });

    afterEach(() => {
      mock.restore();
    });

    it('renders label title', () => {
      expect(findLabel().props('title')).toBe(labelTitle);
    });

    it('renders label background color', () => {
      expect(findLabel().props('backgroundColor')).toBe(labelColor);
    });
  });

  describe('when activeId is not in boardsStore', () => {
    beforeEach(() => {
      mock = new MockAdapter(axios);

      boardsStore.addList({ id: listId, label: { title: labelTitle, color: labelColor } });

      createComponent({ activeId: inactiveId });
    });

    afterEach(() => {
      mock.restore();
    });

    it('does not render GlLabel', () => {
      expect(findLabel().exists()).toBe(false);
    });
  });
});