Commit 8cfc6a4de8e01a9dd7603fd8b3dce0d19da2f81a
Exists in
master
and in
4 other branches
Merge pull request #3956 from AlexDenisov/issues_bulk_update
Issues bulk update
Showing
2 changed files
with
121 additions
and
8 deletions
Show diff stats
app/contexts/issues/bulk_update_context.rb
@@ -8,6 +8,16 @@ module Issues | @@ -8,6 +8,16 @@ module Issues | ||
8 | assignee_id = update_data[:assignee_id] | 8 | assignee_id = update_data[:assignee_id] |
9 | status = update_data[:status] | 9 | status = update_data[:status] |
10 | 10 | ||
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 | + | ||
11 | opts = {} | 21 | opts = {} |
12 | opts[:milestone_id] = milestone_id if milestone_id.present? | 22 | opts[:milestone_id] = milestone_id if milestone_id.present? |
13 | opts[:assignee_id] = assignee_id if assignee_id.present? | 23 | opts[:assignee_id] = assignee_id if assignee_id.present? |
@@ -17,14 +27,7 @@ module Issues | @@ -17,14 +27,7 @@ module Issues | ||
17 | 27 | ||
18 | issues.each do |issue| | 28 | issues.each do |issue| |
19 | issue.update_attributes(opts) | 29 | 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 |
28 | end | 31 | end |
29 | 32 | ||
30 | { | 33 | { |
@@ -0,0 +1,110 @@ | @@ -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 |