Skip to content

Commit 8cfc6a4

Browse files
committed
Merge pull request gitlabhq#3956 from AlexDenisov/issues_bulk_update
Issues bulk update
2 parents d7c6553 + 6e8cb84 commit 8cfc6a4

File tree

2 files changed

+121
-8
lines changed

2 files changed

+121
-8
lines changed

app/contexts/issues/bulk_update_context.rb

+11-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ def execute
88
assignee_id = update_data[:assignee_id]
99
status = update_data[:status]
1010

11+
new_state = nil
12+
13+
if status.present?
14+
if status == 'closed'
15+
new_state = :close
16+
else
17+
new_state = :reopen
18+
end
19+
end
20+
1121
opts = {}
1222
opts[:milestone_id] = milestone_id if milestone_id.present?
1323
opts[:assignee_id] = assignee_id if assignee_id.present?
@@ -17,14 +27,7 @@ def execute
1727

1828
issues.each do |issue|
1929
issue.update_attributes(opts)
20-
21-
if status.present?
22-
if status == 'closed'
23-
issue.close
24-
else
25-
issue.reopen
26-
end
27-
end
30+
issue.send new_state if new_state
2831
end
2932

3033
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
require 'spec_helper'
2+
3+
describe Issues::BulkUpdateContext do
4+
5+
let(:issue) {
6+
create(:issue, project: @project)
7+
}
8+
9+
before do
10+
@user = create :user
11+
opts = {
12+
name: "GitLab"
13+
}
14+
@project = Projects::CreateContext.new(@user, opts).execute
15+
end
16+
17+
describe :close_issue do
18+
19+
before do
20+
@issues = 5.times.collect do
21+
create(:issue, project: @project)
22+
end
23+
@params = {
24+
update: {
25+
status: 'closed',
26+
issues_ids: @issues.map(&:id)
27+
}
28+
}
29+
end
30+
31+
it {
32+
result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
33+
result[:success].should be_true
34+
result[:count].should == @issues.count
35+
36+
@project.issues.opened.should be_empty
37+
@project.issues.closed.should_not be_empty
38+
}
39+
40+
end
41+
42+
describe :reopen_issues do
43+
44+
before do
45+
@issues = 5.times.collect do
46+
create(:closed_issue, project: @project)
47+
end
48+
@params = {
49+
update: {
50+
status: 'reopen',
51+
issues_ids: @issues.map(&:id)
52+
}
53+
}
54+
end
55+
56+
it {
57+
result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
58+
result[:success].should be_true
59+
result[:count].should == @issues.count
60+
61+
@project.issues.closed.should be_empty
62+
@project.issues.opened.should_not be_empty
63+
}
64+
65+
end
66+
67+
describe :update_assignee do
68+
69+
before do
70+
@new_assignee = create :user
71+
@params = {
72+
update: {
73+
issues_ids: [issue.id],
74+
assignee_id: @new_assignee.id
75+
}
76+
}
77+
end
78+
79+
it {
80+
result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
81+
result[:success].should be_true
82+
result[:count].should == 1
83+
84+
@project.issues.first.assignee.should == @new_assignee
85+
}
86+
87+
end
88+
89+
describe :update_milestone do
90+
91+
before do
92+
@milestone = create :milestone
93+
@params = {
94+
update: {
95+
issues_ids: [issue.id],
96+
milestone_id: @milestone.id
97+
}
98+
}
99+
end
100+
101+
it {
102+
result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
103+
result[:success].should be_true
104+
result[:count].should == 1
105+
106+
@project.issues.first.milestone.should == @milestone
107+
}
108+
end
109+
110+
end

0 commit comments

Comments
 (0)