Added JS spec tests for store & models
This commit is contained in:
parent
9a579e8291
commit
954b0daeda
5 changed files with 382 additions and 1 deletions
|
@ -31,9 +31,10 @@
|
||||||
this.removeBlankState();
|
this.removeBlankState();
|
||||||
},
|
},
|
||||||
updateNewListDropdown: function () {
|
updateNewListDropdown: function () {
|
||||||
const data = $('.js-new-board-list').data('glDropdown').renderedData;
|
let data = $('.js-new-board-list').data('glDropdown');
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
|
data = data.renderedData;
|
||||||
$('.js-new-board-list').data('glDropdown').renderData(data);
|
$('.js-new-board-list').data('glDropdown').renderData(data);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
155
spec/javascripts/boards/boards_store_spec.js.es6
Normal file
155
spec/javascripts/boards/boards_store_spec.js.es6
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
//= require jquery
|
||||||
|
//= require jquery_ujs
|
||||||
|
//= require jquery.cookie
|
||||||
|
//= require vue
|
||||||
|
//= require vue-resource
|
||||||
|
//= require lib/utils/url_utility
|
||||||
|
//= require boards/models/issue
|
||||||
|
//= require boards/models/label
|
||||||
|
//= require boards/models/list
|
||||||
|
//= require boards/models/user
|
||||||
|
//= require boards/services/board_service
|
||||||
|
//= require boards/stores/boards_store
|
||||||
|
//= require ./mock_data
|
||||||
|
|
||||||
|
(() => {
|
||||||
|
beforeEach(() => {
|
||||||
|
gl.boardService = new BoardService('/test/issue-boards/board');
|
||||||
|
BoardsStore.create();
|
||||||
|
|
||||||
|
$.cookie('issue_board_welcome_hidden', 'false');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Store', () => {
|
||||||
|
it('starts with a blank state', () => {
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('lists', () => {
|
||||||
|
it('creates new list without persisting to DB', () => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('finds list by ID', () => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
const list = BoardsStore.findList('id', 1);
|
||||||
|
|
||||||
|
expect(list.id).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('finds list by type', () => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
const list = BoardsStore.findList('type', 'label');
|
||||||
|
|
||||||
|
expect(list).toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets issue when new list added', (done) => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
const list = BoardsStore.findList('id', 1);
|
||||||
|
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(1);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
expect(list.issues.length).toBe(1);
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('persists new list', (done) => {
|
||||||
|
BoardsStore.new({
|
||||||
|
title: 'Test',
|
||||||
|
type: 'label',
|
||||||
|
label: {
|
||||||
|
id: 1,
|
||||||
|
title: 'Testing',
|
||||||
|
color: 'red',
|
||||||
|
description: 'testing;'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(1);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
const list = BoardsStore.findList('id', 1);
|
||||||
|
expect(list).toBeDefined();
|
||||||
|
expect(list.id).toBe(1);
|
||||||
|
expect(list.position).toBe(0);
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('check for blank state adding', () => {
|
||||||
|
expect(BoardsStore.shouldAddBlankState()).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('check for blank state not adding', () => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
expect(BoardsStore.shouldAddBlankState()).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('check for blank state adding when backlog & done list exist', () => {
|
||||||
|
BoardsStore.addList({
|
||||||
|
list_type: 'backlog'
|
||||||
|
});
|
||||||
|
BoardsStore.addList({
|
||||||
|
list_type: 'done'
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(BoardsStore.shouldAddBlankState()).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('adds the blank state', () => {
|
||||||
|
BoardsStore.addBlankState();
|
||||||
|
|
||||||
|
const list = BoardsStore.findList('type', 'blank');
|
||||||
|
expect(list).toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('removes list from state', () => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(1);
|
||||||
|
|
||||||
|
BoardsStore.removeList(1);
|
||||||
|
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('moves the position of lists', () => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
BoardsStore.addList(listObjDuplicate);
|
||||||
|
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(2);
|
||||||
|
|
||||||
|
BoardsStore.moveList(0, 1);
|
||||||
|
|
||||||
|
const list = BoardsStore.findList('id', 1);
|
||||||
|
expect(list.position).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('moves an issue from one list to another', (done) => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
BoardsStore.addList(listObjDuplicate);
|
||||||
|
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(2);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
const list = BoardsStore.findList('id', 1);
|
||||||
|
const listTwo = BoardsStore.findList('id', 2);
|
||||||
|
|
||||||
|
expect(list.issues.length).toBe(1);
|
||||||
|
expect(listTwo.issues.length).toBe(1);
|
||||||
|
|
||||||
|
BoardsStore.moveCardToList(1, 2, 1);
|
||||||
|
|
||||||
|
expect(list.issues.length).toBe(0);
|
||||||
|
expect(listTwo.issues.length).toBe(1);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
83
spec/javascripts/boards/issue_spec.js.es6
Normal file
83
spec/javascripts/boards/issue_spec.js.es6
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
//= require jquery
|
||||||
|
//= require jquery_ujs
|
||||||
|
//= require jquery.cookie
|
||||||
|
//= require vue
|
||||||
|
//= require vue-resource
|
||||||
|
//= require lib/utils/url_utility
|
||||||
|
//= require boards/models/issue
|
||||||
|
//= require boards/models/label
|
||||||
|
//= require boards/models/list
|
||||||
|
//= require boards/models/user
|
||||||
|
//= require boards/services/board_service
|
||||||
|
//= require boards/stores/boards_store
|
||||||
|
//= require ./mock_data
|
||||||
|
|
||||||
|
describe('Issue model', () => {
|
||||||
|
let issue;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
gl.boardService = new BoardService('/test/issue-boards/board');
|
||||||
|
BoardsStore.create();
|
||||||
|
|
||||||
|
issue = new Issue({
|
||||||
|
title: 'Testing',
|
||||||
|
iid: 1,
|
||||||
|
confidential: false,
|
||||||
|
labels: [{
|
||||||
|
id: 1,
|
||||||
|
title: 'test',
|
||||||
|
color: 'red',
|
||||||
|
description: 'testing'
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('has label', () => {
|
||||||
|
expect(issue.labels.length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('add new label', () => {
|
||||||
|
issue.addLabel({
|
||||||
|
id: 2,
|
||||||
|
title: 'bug',
|
||||||
|
color: 'blue',
|
||||||
|
description: 'bugs!'
|
||||||
|
});
|
||||||
|
expect(issue.labels.length).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not add existing label', () => {
|
||||||
|
issue.addLabel({
|
||||||
|
id: 2,
|
||||||
|
title: 'test',
|
||||||
|
color: 'blue',
|
||||||
|
description: 'bugs!'
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(issue.labels.length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('finds label', () => {
|
||||||
|
const label = issue.findLabel(issue.labels[0]);
|
||||||
|
expect(label).toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('removes label', () => {
|
||||||
|
const label = issue.findLabel(issue.labels[0]);
|
||||||
|
issue.removeLabel(label);
|
||||||
|
expect(issue.labels.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('removes multiple labels', () => {
|
||||||
|
issue.addLabel({
|
||||||
|
id: 2,
|
||||||
|
title: 'bug',
|
||||||
|
color: 'blue',
|
||||||
|
description: 'bugs!'
|
||||||
|
});
|
||||||
|
expect(issue.labels.length).toBe(2);
|
||||||
|
|
||||||
|
issue.removeLabels([issue.labels[0], issue.labels[1]]);
|
||||||
|
expect(issue.labels.length).toBe(0);
|
||||||
|
});
|
||||||
|
});
|
89
spec/javascripts/boards/list_spec.js.es6
Normal file
89
spec/javascripts/boards/list_spec.js.es6
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
//= require jquery
|
||||||
|
//= require jquery_ujs
|
||||||
|
//= require jquery.cookie
|
||||||
|
//= require vue
|
||||||
|
//= require vue-resource
|
||||||
|
//= require lib/utils/url_utility
|
||||||
|
//= require boards/models/issue
|
||||||
|
//= require boards/models/label
|
||||||
|
//= require boards/models/list
|
||||||
|
//= require boards/models/user
|
||||||
|
//= require boards/services/board_service
|
||||||
|
//= require boards/stores/boards_store
|
||||||
|
//= require ./mock_data
|
||||||
|
|
||||||
|
describe('List model', () => {
|
||||||
|
let list;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
gl.boardService = new BoardService('/test/issue-boards/board');
|
||||||
|
BoardsStore.create();
|
||||||
|
|
||||||
|
list = new List(listObj);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets issues when created', (done) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
expect(list.issues.length).toBe(1);
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('saves list and returns ID', (done) => {
|
||||||
|
list = new List({
|
||||||
|
title: 'test',
|
||||||
|
label: {
|
||||||
|
id: 1,
|
||||||
|
title: 'test',
|
||||||
|
color: 'red'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
list.save();
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
expect(list.id).toBe(1);
|
||||||
|
expect(list.type).toBe('label');
|
||||||
|
expect(list.position).toBe(0);
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('destroys the list', (done) => {
|
||||||
|
BoardsStore.addList(listObj);
|
||||||
|
list = BoardsStore.findList('id', 1);
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(1);
|
||||||
|
list.destroy();
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
expect(BoardsStore.state.lists.length).toBe(0);
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can\'t search when not backlog', () => {
|
||||||
|
expect(list.canSearch()).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can search when backlog', () => {
|
||||||
|
list.type = 'backlog';
|
||||||
|
expect(list.canSearch()).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets issue from list', (done) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
const issue = list.findIssue(1);
|
||||||
|
expect(issue).toBeDefined();
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('removes issue', (done) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
const issue = list.findIssue(1);
|
||||||
|
expect(list.issues.length).toBe(1);
|
||||||
|
list.removeIssue(issue);
|
||||||
|
expect(list.issues.length).toBe(0);
|
||||||
|
done();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
});
|
53
spec/javascripts/boards/mock_data.js.es6
Normal file
53
spec/javascripts/boards/mock_data.js.es6
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
const listObj = {
|
||||||
|
id: 1,
|
||||||
|
position: 0,
|
||||||
|
title: 'Test',
|
||||||
|
list_type: 'label',
|
||||||
|
label: {
|
||||||
|
id: 1,
|
||||||
|
title: 'Testing',
|
||||||
|
color: 'red',
|
||||||
|
description: 'testing;'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const listObjDuplicate = {
|
||||||
|
id: 2,
|
||||||
|
position: 1,
|
||||||
|
title: 'Test',
|
||||||
|
list_type: 'label',
|
||||||
|
label: {
|
||||||
|
id: 2,
|
||||||
|
title: 'Testing',
|
||||||
|
color: 'red',
|
||||||
|
description: 'testing;'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const BoardsMockData = {
|
||||||
|
'GET': {
|
||||||
|
'/test/issue-boards/board/lists{/id}/issues.json': [{
|
||||||
|
title: 'Testing',
|
||||||
|
iid: 1,
|
||||||
|
confidential: false,
|
||||||
|
labels: []
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
'POST': {
|
||||||
|
'/test/issue-boards/board/lists{/id}.json': listObj
|
||||||
|
},
|
||||||
|
'PUT': {
|
||||||
|
'/test/issue-boards/board/lists{/id}.json': {}
|
||||||
|
},
|
||||||
|
'DELETE': {
|
||||||
|
'/test/issue-boards/board/lists{/id}.json': {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Vue.http.interceptors.push((request, next) => {
|
||||||
|
const body = BoardsMockData[request.method][request.url];
|
||||||
|
|
||||||
|
next(request.respondWith(JSON.stringify(body), {
|
||||||
|
status: 200
|
||||||
|
}));
|
||||||
|
});
|
Loading…
Reference in a new issue