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 | 8 | assignee_id = update_data[:assignee_id] |
9 | 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 | 21 | opts = {} |
12 | 22 | opts[:milestone_id] = milestone_id if milestone_id.present? |
13 | 23 | opts[:assignee_id] = assignee_id if assignee_id.present? |
... | ... | @@ -17,14 +27,7 @@ module Issues |
17 | 27 | |
18 | 28 | issues.each do |issue| |
19 | 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 | 31 | end |
29 | 32 | |
30 | 33 | { | ... | ... |
... | ... | @@ -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 | ... | ... |