boards_store_spec.js 7.0 KB
Newer Older
1
/* eslint-disable comma-dangle, one-var, no-unused-vars */
2
/* global BoardService */
P
Phil Hughes 已提交
3
/* global ListIssue */
4

M
Mike Greiling 已提交
5
import Vue from 'vue';
E
Eric Eastwood 已提交
6 7
import MockAdapter from 'axios-mock-adapter';
import axios from '~/lib/utils/axios_utils';
8
import Cookies from 'js-cookie';
M
Mike Greiling 已提交
9

10 11 12 13 14 15
import '~/boards/models/issue';
import '~/boards/models/label';
import '~/boards/models/list';
import '~/boards/models/assignee';
import '~/boards/services/board_service';
import '~/boards/stores/boards_store';
E
Eric Eastwood 已提交
16
import { listObj, listObjDuplicate, boardsMockInterceptor, mockBoardService } from './mock_data';
17

18
describe('Store', () => {
E
Eric Eastwood 已提交
19 20
  let mock;

21
  beforeEach(() => {
E
Eric Eastwood 已提交
22 23
    mock = new MockAdapter(axios);
    mock.onAny().reply(boardsMockInterceptor);
S
Simon Knox 已提交
24
    gl.boardService = mockBoardService();
25
    gl.issueBoards.BoardsStore.create();
26

P
Phil Hughes 已提交
27 28 29
    spyOn(gl.boardService, 'moveIssue').and.callFake(() => new Promise((resolve) => {
      resolve();
    }));
P
Phil Hughes 已提交
30

P
Phil Hughes 已提交
31 32 33 34
    Cookies.set('issue_board_welcome_hidden', 'false', {
      expires: 365 * 10,
      path: ''
    });
35 36
  });

37
  afterEach(() => {
38
    mock.restore();
39
  });
40

41 42 43
  it('starts with a blank state', () => {
    expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(0);
  });
44

45 46 47
  describe('lists', () => {
    it('creates new list without persisting to DB', () => {
      gl.issueBoards.BoardsStore.addList(listObj);
48

49 50
      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(1);
    });
51

52 53
    it('finds list by ID', () => {
      gl.issueBoards.BoardsStore.addList(listObj);
P
Phil Hughes 已提交
54
      const list = gl.issueBoards.BoardsStore.findList('id', listObj.id);
55

P
Phil Hughes 已提交
56
      expect(list.id).toBe(listObj.id);
57
    });
58

59 60 61
    it('finds list by type', () => {
      gl.issueBoards.BoardsStore.addList(listObj);
      const list = gl.issueBoards.BoardsStore.findList('type', 'label');
62

63 64
      expect(list).toBeDefined();
    });
65

66 67
    it('gets issue when new list added', (done) => {
      gl.issueBoards.BoardsStore.addList(listObj);
P
Phil Hughes 已提交
68
      const list = gl.issueBoards.BoardsStore.findList('id', listObj.id);
69

70
      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(1);
71

72 73 74 75 76 77
      setTimeout(() => {
        expect(list.issues.length).toBe(1);
        expect(list.issues[0].id).toBe(1);
        done();
      }, 0);
    });
78

79 80 81
    it('persists new list', (done) => {
      gl.issueBoards.BoardsStore.new({
        title: 'Test',
S
Simon Knox 已提交
82
        list_type: 'label',
83 84 85 86 87 88
        label: {
          id: 1,
          title: 'Testing',
          color: 'red',
          description: 'testing;'
        }
89
      });
90
      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(1);
91

92
      setTimeout(() => {
P
Phil Hughes 已提交
93
        const list = gl.issueBoards.BoardsStore.findList('id', listObj.id);
94
        expect(list).toBeDefined();
P
Phil Hughes 已提交
95
        expect(list.id).toBe(listObj.id);
96 97 98 99
        expect(list.position).toBe(0);
        done();
      }, 0);
    });
100

101 102 103 104 105 106 107 108
    it('check for blank state adding', () => {
      expect(gl.issueBoards.BoardsStore.shouldAddBlankState()).toBe(true);
    });

    it('check for blank state not adding', () => {
      gl.issueBoards.BoardsStore.addList(listObj);
      expect(gl.issueBoards.BoardsStore.shouldAddBlankState()).toBe(false);
    });
109

110
    it('check for blank state adding when closed list exist', () => {
111
      gl.issueBoards.BoardsStore.addList({
112
        list_type: 'closed'
113 114 115 116
      });

      expect(gl.issueBoards.BoardsStore.shouldAddBlankState()).toBe(true);
    });
117

118 119
    it('adds the blank state', () => {
      gl.issueBoards.BoardsStore.addBlankState();
120

121 122 123
      const list = gl.issueBoards.BoardsStore.findList('type', 'blank', 'blank');
      expect(list).toBeDefined();
    });
124

125 126
    it('removes list from state', () => {
      gl.issueBoards.BoardsStore.addList(listObj);
127

128
      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(1);
129

P
Phil Hughes 已提交
130
      gl.issueBoards.BoardsStore.removeList(listObj.id, 'label');
131

132 133
      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(0);
    });
134

135
    it('moves the position of lists', () => {
136 137
      const listOne = gl.issueBoards.BoardsStore.addList(listObj);
      const listTwo = gl.issueBoards.BoardsStore.addList(listObjDuplicate);
138

139
      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(2);
140

P
Phil Hughes 已提交
141
      gl.issueBoards.BoardsStore.moveList(listOne, [listObjDuplicate.id, listObj.id]);
142

143 144
      expect(listOne.position).toBe(1);
    });
145

146
    it('moves an issue from one list to another', (done) => {
147 148
      const listOne = gl.issueBoards.BoardsStore.addList(listObj);
      const listTwo = gl.issueBoards.BoardsStore.addList(listObjDuplicate);
149

150
      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(2);
151

152 153 154
      setTimeout(() => {
        expect(listOne.issues.length).toBe(1);
        expect(listTwo.issues.length).toBe(1);
155

156
        gl.issueBoards.BoardsStore.moveIssueToList(listOne, listTwo, listOne.findIssue(1));
157

158 159
        expect(listOne.issues.length).toBe(0);
        expect(listTwo.issues.length).toBe(1);
160

161 162
        done();
      }, 0);
163
    });
P
Phil Hughes 已提交
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

    it('moves issue to top of another list', (done) => {
      const listOne = gl.issueBoards.BoardsStore.addList(listObj);
      const listTwo = gl.issueBoards.BoardsStore.addList(listObjDuplicate);

      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(2);

      setTimeout(() => {
        listOne.issues[0].id = 2;

        expect(listOne.issues.length).toBe(1);
        expect(listTwo.issues.length).toBe(1);

        gl.issueBoards.BoardsStore.moveIssueToList(listOne, listTwo, listOne.findIssue(2), 0);

        expect(listOne.issues.length).toBe(0);
        expect(listTwo.issues.length).toBe(2);
        expect(listTwo.issues[0].id).toBe(2);
        expect(gl.boardService.moveIssue).toHaveBeenCalledWith(2, listOne.id, listTwo.id, null, 1);

        done();
      }, 0);
    });

    it('moves issue to bottom of another list', (done) => {
      const listOne = gl.issueBoards.BoardsStore.addList(listObj);
      const listTwo = gl.issueBoards.BoardsStore.addList(listObjDuplicate);

      expect(gl.issueBoards.BoardsStore.state.lists.length).toBe(2);

      setTimeout(() => {
        listOne.issues[0].id = 2;

        expect(listOne.issues.length).toBe(1);
        expect(listTwo.issues.length).toBe(1);

        gl.issueBoards.BoardsStore.moveIssueToList(listOne, listTwo, listOne.findIssue(2), 1);

        expect(listOne.issues.length).toBe(0);
        expect(listTwo.issues.length).toBe(2);
        expect(listTwo.issues[1].id).toBe(2);
        expect(gl.boardService.moveIssue).toHaveBeenCalledWith(2, listOne.id, listTwo.id, 1, null);

        done();
      }, 0);
    });

    it('moves issue in list', (done) => {
      const issue = new ListIssue({
        title: 'Testing',
S
Simon Knox 已提交
214
        id: 2,
P
Phil Hughes 已提交
215 216
        iid: 2,
        confidential: false,
217 218
        labels: [],
        assignees: [],
P
Phil Hughes 已提交
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
      });
      const list = gl.issueBoards.BoardsStore.addList(listObj);

      setTimeout(() => {
        list.addIssue(issue);

        expect(list.issues.length).toBe(2);

        gl.issueBoards.BoardsStore.moveIssueInList(list, issue, 0, 1, [1, 2]);

        expect(list.issues[0].id).toBe(2);
        expect(gl.boardService.moveIssue).toHaveBeenCalledWith(2, null, null, 1, null);

        done();
      });
    });
235
  });
236
});