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();
},
);
});
});
|