summaryrefslogtreecommitdiff
path: root/spec/frontend/issues/stores/modules/issues_list/actions_spec.js
blob: 9c5cee9d955c744da6c135f61591c21822a4063d (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
import MockAdapter from 'axios-mock-adapter';
import statusCodes from '~/lib/utils/http_status';
import axios from '~/lib/utils/axios_utils';
import * as issuesActions from '~/issues/stores/modules/issues_list/actions';
import * as types from '~/issues/stores/modules/issues_list/mutation_types';
import testAction from '../../../../helpers/vuex_action_helper';
import { issuesResponseData } from '../../../mock_data';
import { setWindowLocation } from '../../../../helpers/url_util_helper';

describe('Issues List Actions', () => {
  it('Should set filter value', done => {
    const issueFilter = 'hello=world';

    testAction(
      issuesActions.setFilters,
      issueFilter,
      {},
      [{ type: types.SET_FILTERS, payload: issueFilter }],
      [],
      done,
    );
  });

  it('Should set loading state', done => {
    const loadingState = 'loading';

    testAction(
      issuesActions.setLoadingState,
      loadingState,
      {},
      [{ type: types.SET_LOADING_STATE, payload: loadingState }],
      [],
      done,
    );
  });

  it('Should set bulk update state', done => {
    const bulkUpdateState = 'updating';

    testAction(
      issuesActions.setBulkUpdateState,
      bulkUpdateState,
      {},
      [{ type: types.SET_BULK_UPDATE_STATE, payload: bulkUpdateState }],
      [],
      done,
    );
  });

  it('Should set current page', done => {
    const currentPage = 1;

    testAction(
      issuesActions.setCurrentPage,
      currentPage,
      {},
      [{ type: types.SET_CURRENT_PAGE, payload: currentPage }],
      [],
      done,
    );
  });

  it('Should set total Items', done => {
    const totalItems = 200;

    testAction(
      issuesActions.setTotalItems,
      totalItems,
      {},
      [{ type: types.SET_TOTAL_ITEMS, payload: totalItems }],
      [],
      done,
    );
  });

  it('should fetch issues', done => {
    const totalIssues = 1000;
    const currentPage = 1;
    const issuesEndpoint = '/issues';
    const appliedFilters = 'scope=all&utf8=%E2%9C%93&state=opened&page=2';
    const mock = new MockAdapter(axios);
    const { search } = window.location;

    mock.onGet(issuesEndpoint).reply(statusCodes.OK, JSON.stringify({ ...issuesResponseData }), {
      'x-total': totalIssues,
      'x-page': currentPage,
    });

    setWindowLocation({
      search: `?${appliedFilters}`,
    });

    testAction(
      issuesActions.fetchIssues,
      issuesEndpoint,
      { appliedFilters },
      [{ type: types.SET_ISSUES_DATA, payload: { ...issuesResponseData } }],
      [
        { type: 'setLoadingState', payload: true },
        { type: 'setTotalItems', payload: totalIssues },
        { type: 'setCurrentPage', payload: currentPage },
        { type: 'setLoadingState', payload: false },
      ],
      () => {
        mock.restore();
        window.location.search = search;
        done();
      },
    );
  });
});