diff options
Diffstat (limited to 'spec/frontend/boards/issue_spec.js')
-rw-r--r-- | spec/frontend/boards/issue_spec.js | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/spec/frontend/boards/issue_spec.js b/spec/frontend/boards/issue_spec.js new file mode 100644 index 00000000000..ff72edaa695 --- /dev/null +++ b/spec/frontend/boards/issue_spec.js @@ -0,0 +1,197 @@ +/* global ListIssue */ + +import axios from '~/lib/utils/axios_utils'; +import '~/boards/models/label'; +import '~/boards/models/assignee'; +import '~/boards/models/issue'; +import '~/boards/models/list'; +import boardsStore from '~/boards/stores/boards_store'; +import { setMockEndpoints } from './mock_data'; + +describe('Issue model', () => { + let issue; + + beforeEach(() => { + setMockEndpoints(); + boardsStore.create(); + + issue = new ListIssue({ + title: 'Testing', + id: 1, + iid: 1, + confidential: false, + labels: [ + { + id: 1, + title: 'test', + color: 'red', + description: 'testing', + }, + ], + assignees: [ + { + id: 1, + name: 'name', + username: 'username', + avatar_url: 'http://avatar_url', + }, + ], + }); + }); + + 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 label if label id exists', () => { + issue.addLabel({ + id: 1, + title: 'test 2', + color: 'blue', + description: 'testing', + }); + + expect(issue.labels.length).toBe(1); + expect(issue.labels[0].color).toBe('red'); + }); + + it('adds other label with same title', () => { + issue.addLabel({ + id: 2, + title: 'test', + color: 'blue', + description: 'other test', + }); + + expect(issue.labels.length).toBe(2); + }); + + 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); + }); + + it('adds assignee', () => { + issue.addAssignee({ + id: 2, + name: 'Bruce Wayne', + username: 'batman', + avatar_url: 'http://batman', + }); + + expect(issue.assignees.length).toBe(2); + }); + + it('finds assignee', () => { + const assignee = issue.findAssignee(issue.assignees[0]); + + expect(assignee).toBeDefined(); + }); + + it('removes assignee', () => { + const assignee = issue.findAssignee(issue.assignees[0]); + issue.removeAssignee(assignee); + + expect(issue.assignees.length).toBe(0); + }); + + it('removes all assignees', () => { + issue.removeAllAssignees(); + + expect(issue.assignees.length).toBe(0); + }); + + it('sets position to infinity if no position is stored', () => { + expect(issue.position).toBe(Infinity); + }); + + it('sets position', () => { + const relativePositionIssue = new ListIssue({ + title: 'Testing', + iid: 1, + confidential: false, + relative_position: 1, + labels: [], + assignees: [], + }); + + expect(relativePositionIssue.position).toBe(1); + }); + + it('updates data', () => { + issue.updateData({ subscribed: true }); + + expect(issue.subscribed).toBe(true); + }); + + it('sets fetching state', () => { + expect(issue.isFetching.subscriptions).toBe(true); + + issue.setFetchingState('subscriptions', false); + + expect(issue.isFetching.subscriptions).toBe(false); + }); + + it('sets loading state', () => { + issue.setLoadingState('foo', true); + + expect(issue.isLoading.foo).toBe(true); + }); + + describe('update', () => { + it('passes assignee ids when there are assignees', done => { + jest.spyOn(axios, 'patch').mockImplementation((url, data) => { + expect(data.issue.assignee_ids).toEqual([1]); + done(); + return Promise.resolve(); + }); + + issue.update('url'); + }); + + it('passes assignee ids of [0] when there are no assignees', done => { + jest.spyOn(axios, 'patch').mockImplementation((url, data) => { + expect(data.issue.assignee_ids).toEqual([0]); + done(); + return Promise.resolve(); + }); + + issue.removeAllAssignees(); + issue.update('url'); + }); + }); +}); |