Commit 89ab47cd authored by Alfredo Sumaran's avatar Alfredo Sumaran

Merge branch 'fix-karma-multiple-assignees' into 'multiple_assignees_review'

Fix karma tests for multiple assignees

See merge request !1750
parents 862e0eb5 26abb796
...@@ -37,8 +37,8 @@ class TargetBranchDropDown { ...@@ -37,8 +37,8 @@ class TargetBranchDropDown {
} }
return SELECT_ITEM_MSG; return SELECT_ITEM_MSG;
}, },
clicked(item, el, e) { clicked(options) {
e.preventDefault(); options.e.preventDefault();
self.onClick.call(self); self.onClick.call(self);
}, },
fieldName: self.fieldName, fieldName: self.fieldName,
......
...@@ -24,6 +24,7 @@ export default { ...@@ -24,6 +24,7 @@ export default {
title: this.title, title: this.title,
labels, labels,
subscribed: true, subscribed: true,
assignees: [],
}); });
if (Store.state.currentBoard) { if (Store.state.currentBoard) {
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
/* global MilestoneSelect */ /* global MilestoneSelect */
/* global LabelsSelect */ /* global LabelsSelect */
/* global Sidebar */ /* global Sidebar */
/* global Flash */
import Vue from 'vue'; import Vue from 'vue';
import eventHub from '../../sidebar/event_hub'; import eventHub from '../../sidebar/event_hub';
...@@ -85,10 +86,14 @@ require('./sidebar/remove_issue'); ...@@ -85,10 +86,14 @@ require('./sidebar/remove_issue');
saveAssignees () { saveAssignees () {
this.loadingAssignees = true; this.loadingAssignees = true;
function setLoadingFalse() {
this.loadingAssignees = false;
}
gl.issueBoards.BoardsStore.detail.issue.update(this.endpoint) gl.issueBoards.BoardsStore.detail.issue.update(this.endpoint)
.then(() => this.loadingAssignees = false) .then(setLoadingFalse)
.catch(() => { .catch(() => {
this.loadingAssignees = false; setLoadingFalse();
return new Flash('An error occurred while saving assignees'); return new Flash('An error occurred while saving assignees');
}); });
}, },
......
...@@ -19,7 +19,7 @@ export default class SidebarMediator { ...@@ -19,7 +19,7 @@ export default class SidebarMediator {
} }
saveAssignees(field) { saveAssignees(field) {
const selected = this.store.assignees.map((u) => u.id); const selected = this.store.assignees.map(u => u.id);
// If there are no ids, that means we have to unassign (which is id = 0) // If there are no ids, that means we have to unassign (which is id = 0)
// And it only accepts an array, hence [0] // And it only accepts an array, hence [0]
......
.block.assignee{ ref: "assigneeBlock" } .block.assignee{ ref: "assigneeBlock" }
%template{ "v-if" => "issue.assignees"} %template{ "v-if" => "issue.assignees" }
%assignee-title{ ":number-of-assignees" => "issue.assignees.length", %assignee-title{ ":number-of-assignees" => "issue.assignees.length",
":loading" => "loadingAssignees", ":loading" => "loadingAssignees",
":editable" => can?(current_user, :admin_issue, @project) } ":editable" => can?(current_user, :admin_issue, @project) }
%assignees{ class: "value", "root-path" => "#{root_url}", %assignees.value{ "root-path" => "#{root_url}",
":users" => "issue.assignees", ":users" => "issue.assignees",
"@assign-self" => "assignSelf" } "@assign-self" => "assignSelf" }
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
import Vue from 'vue'; import Vue from 'vue';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
require('~/lib/utils/url_utility'); import '~/lib/utils/url_utility';
require('~/boards/models/issue'); import '~/boards/models/issue';
require('~/boards/models/label'); import '~/boards/models/label';
require('~/boards/models/list'); import '~/boards/models/list';
require('~/boards/models/user'); import '~/boards/models/assignee';
require('~/boards/services/board_service'); import '~/boards/services/board_service';
require('~/boards/stores/boards_store'); import '~/boards/stores/boards_store';
require('./mock_data'); import './mock_data';
describe('Store', () => { describe('Store', () => {
beforeEach(() => { beforeEach(() => {
...@@ -212,7 +212,8 @@ describe('Store', () => { ...@@ -212,7 +212,8 @@ describe('Store', () => {
title: 'Testing', title: 'Testing',
iid: 2, iid: 2,
confidential: false, confidential: false,
labels: [] labels: [],
assignees: [],
}); });
const list = gl.issueBoards.BoardsStore.addList(listObj); const list = gl.issueBoards.BoardsStore.addList(listObj);
......
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
import Vue from 'vue'; import Vue from 'vue';
require('~/boards/models/issue'); import '~/boards/models/issue';
require('~/boards/models/label'); import '~/boards/models/label';
require('~/boards/models/list'); import '~/boards/models/list';
require('~/boards/models/user'); import '~/boards/models/assignee';
require('~/boards/stores/boards_store'); import '~/boards/stores/boards_store';
require('~/boards/components/issue_card_inner'); import '~/boards/components/issue_card_inner';
require('./mock_data'); import './mock_data';
describe('Issue card component', () => { describe('Issue card component', () => {
const user = new ListAssignee({ const user = new ListAssignee({
...@@ -151,19 +151,19 @@ describe('Issue card component', () => { ...@@ -151,19 +151,19 @@ describe('Issue card component', () => {
beforeEach((done) => { beforeEach((done) => {
component.issue.assignees = [ component.issue.assignees = [
user, user,
new ListUser({ new ListAssignee({
id: 2, id: 2,
name: 'user2', name: 'user2',
username: 'user2', username: 'user2',
avatar: 'test_image', avatar: 'test_image',
}), }),
new ListUser({ new ListAssignee({
id: 3, id: 3,
name: 'user3', name: 'user3',
username: 'user3', username: 'user3',
avatar: 'test_image', avatar: 'test_image',
}), }),
new ListUser({ new ListAssignee({
id: 4, id: 4,
name: 'user4', name: 'user4',
username: 'user4', username: 'user4',
...@@ -177,10 +177,9 @@ describe('Issue card component', () => { ...@@ -177,10 +177,9 @@ describe('Issue card component', () => {
expect(component.$el.querySelectorAll('.card-assignee .avatar').length).toEqual(4); expect(component.$el.querySelectorAll('.card-assignee .avatar').length).toEqual(4);
}); });
describe('more than four assignees', () => { describe('more than four assignees', () => {
beforeEach((done) => { beforeEach((done) => {
component.issue.assignees.push(new ListUser({ component.issue.assignees.push(new ListAssignee({
id: 5, id: 5,
name: 'user5', name: 'user5',
username: 'user5', username: 'user5',
...@@ -199,8 +198,8 @@ describe('Issue card component', () => { ...@@ -199,8 +198,8 @@ describe('Issue card component', () => {
}); });
it('renders 99+ avatar counter', (done) => { it('renders 99+ avatar counter', (done) => {
for(let i = 5; i < 104; i++) { for (let i = 5; i < 104; i += 1) {
const u = new ListUser({ const u = new ListAssignee({
id: i, id: i,
name: 'name', name: 'name',
username: 'username', username: 'username',
...@@ -215,7 +214,7 @@ describe('Issue card component', () => { ...@@ -215,7 +214,7 @@ describe('Issue card component', () => {
}); });
}); });
}); });
}) });
describe('labels', () => { describe('labels', () => {
it('does not render any', () => { it('does not render any', () => {
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
/* global BoardService */ /* global BoardService */
/* global ListIssue */ /* global ListIssue */
require('~/lib/utils/url_utility'); import '~/lib/utils/url_utility';
require('~/boards/models/issue'); import '~/boards/models/issue';
require('~/boards/models/label'); import '~/boards/models/label';
require('~/boards/models/list'); import '~/boards/models/list';
require('~/boards/models/user'); import '~/boards/models/assignee';
require('~/boards/services/board_service'); import '~/boards/services/board_service';
require('~/boards/stores/boards_store'); import '~/boards/stores/boards_store';
require('./mock_data'); import './mock_data';
describe('Issue model', () => { describe('Issue model', () => {
let issue; let issue;
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
import Vue from 'vue'; import Vue from 'vue';
require('~/lib/utils/url_utility'); import '~/lib/utils/url_utility';
require('~/boards/models/issue'); import '~/boards/models/issue';
require('~/boards/models/label'); import '~/boards/models/label';
require('~/boards/models/list'); import '~/boards/models/list';
require('~/boards/models/user'); import '~/boards/models/assignee';
require('~/boards/services/board_service'); import '~/boards/services/board_service';
require('~/boards/stores/boards_store'); import '~/boards/stores/boards_store';
require('./mock_data'); import './mock_data';
describe('List model', () => { describe('List model', () => {
let list; let list;
......
...@@ -38,7 +38,8 @@ const BoardsMockData = { ...@@ -38,7 +38,8 @@ const BoardsMockData = {
title: 'Testing', title: 'Testing',
iid: 1, iid: 1,
confidential: false, confidential: false,
labels: [] labels: [],
assignees: [],
}], }],
size: 1 size: 1
}, },
......
/* global ListIssue */ /* global ListIssue */
require('~/boards/models/issue'); import '~/boards/models/issue';
require('~/boards/models/label'); import '~/boards/models/label';
require('~/boards/models/list'); import '~/boards/models/list';
require('~/boards/models/user'); import '~/boards/models/assignee';
require('~/boards/stores/modal_store'); import '~/boards/stores/modal_store';
describe('Modal store', () => { describe('Modal store', () => {
let issue; let issue;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
import Vue from 'vue'; import Vue from 'vue';
import '~/sidebar/components/time_tracking/time_tracker'; import timeTracker from '~/sidebar/components/time_tracking/time_tracker';
function initTimeTrackingComponent(opts) { function initTimeTrackingComponent(opts) {
setFixtures(` setFixtures(`
...@@ -16,18 +16,17 @@ function initTimeTrackingComponent(opts) { ...@@ -16,18 +16,17 @@ function initTimeTrackingComponent(opts) {
time_spent: opts.timeSpent, time_spent: opts.timeSpent,
human_time_estimate: opts.timeEstimateHumanReadable, human_time_estimate: opts.timeEstimateHumanReadable,
human_time_spent: opts.timeSpentHumanReadable, human_time_spent: opts.timeSpentHumanReadable,
docsUrl: '/help/workflow/time_tracking.md', rootPath: '/',
}; };
const TimeTrackingComponent = Vue.component('issuable-time-tracker'); const TimeTrackingComponent = Vue.extend(timeTracker);
this.timeTracker = new TimeTrackingComponent({ this.timeTracker = new TimeTrackingComponent({
el: '#mock-container', el: '#mock-container',
propsData: this.initialData, propsData: this.initialData,
}); });
} }
((gl) => { describe('Issuable Time Tracker', function() {
describe('Issuable Time Tracker', function() {
describe('Initialization', function() { describe('Initialization', function() {
beforeEach(function() { beforeEach(function() {
initTimeTrackingComponent.call(this, { timeEstimate: 100000, timeSpent: 5000, timeEstimateHumanReadable: '2h 46m', timeSpentHumanReadable: '1h 23m' }); initTimeTrackingComponent.call(this, { timeEstimate: 100000, timeSpent: 5000, timeEstimateHumanReadable: '2h 46m', timeSpentHumanReadable: '1h 23m' });
...@@ -131,7 +130,7 @@ function initTimeTrackingComponent(opts) { ...@@ -131,7 +130,7 @@ function initTimeTrackingComponent(opts) {
describe('No time tracking pane', function() { describe('No time tracking pane', function() {
beforeEach(function() { beforeEach(function() {
initTimeTrackingComponent.call(this, { timeEstimate: 0, timeSpent: 0, timeEstimateHumanReadable: 0, timeSpentHumanReadable: 0 }); initTimeTrackingComponent.call(this, { timeEstimate: 0, timeSpent: 0, timeEstimateHumanReadable: '', timeSpentHumanReadable: '' });
}); });
it('should only show the "No time tracking" pane when both timeEstimate and time_spent are falsey', function(done) { it('should only show the "No time tracking" pane when both timeEstimate and time_spent are falsey', function(done) {
...@@ -198,5 +197,4 @@ function initTimeTrackingComponent(opts) { ...@@ -198,5 +197,4 @@ function initTimeTrackingComponent(opts) {
}); });
}); });
}); });
}); });
})(window.gl || (window.gl = {}));
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment