diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-05-16 05:12:40 -0700 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-05-16 05:12:40 -0700 |
commit | 8cfc6a4de8e01a9dd7603fd8b3dce0d19da2f81a (patch) | |
tree | ac79b9732e0c2f73db0ceea4e967e104e03e6b66 | |
parent | d7c655347249183363d85ad5872d3cf86e2e1003 (diff) | |
parent | 6e8cb844499dfcc77bd92f3daf0f7890400ec072 (diff) | |
download | gitlab-ce-8cfc6a4de8e01a9dd7603fd8b3dce0d19da2f81a.tar.gz |
Merge pull request #3956 from AlexDenisov/issues_bulk_update
Issues bulk update
-rw-r--r-- | app/contexts/issues/bulk_update_context.rb | 19 | ||||
-rw-r--r-- | spec/contexts/issues/bulk_update_context_spec.rb | 110 |
2 files changed, 121 insertions, 8 deletions
diff --git a/app/contexts/issues/bulk_update_context.rb b/app/contexts/issues/bulk_update_context.rb index e92264a8bb1..73a3c353523 100644 --- a/app/contexts/issues/bulk_update_context.rb +++ b/app/contexts/issues/bulk_update_context.rb @@ -8,6 +8,16 @@ module Issues assignee_id = update_data[:assignee_id] status = update_data[:status] + new_state = nil + + if status.present? + if status == 'closed' + new_state = :close + else + new_state = :reopen + end + end + opts = {} opts[:milestone_id] = milestone_id if milestone_id.present? opts[:assignee_id] = assignee_id if assignee_id.present? @@ -17,14 +27,7 @@ module Issues issues.each do |issue| issue.update_attributes(opts) - - if status.present? - if status == 'closed' - issue.close - else - issue.reopen - end - end + issue.send new_state if new_state end { diff --git a/spec/contexts/issues/bulk_update_context_spec.rb b/spec/contexts/issues/bulk_update_context_spec.rb new file mode 100644 index 00000000000..0966ee35745 --- /dev/null +++ b/spec/contexts/issues/bulk_update_context_spec.rb @@ -0,0 +1,110 @@ +require 'spec_helper' + +describe Issues::BulkUpdateContext do + + let(:issue) { + create(:issue, project: @project) + } + + before do + @user = create :user + opts = { + name: "GitLab" + } + @project = Projects::CreateContext.new(@user, opts).execute + end + + describe :close_issue do + + before do + @issues = 5.times.collect do + create(:issue, project: @project) + end + @params = { + update: { + status: 'closed', + issues_ids: @issues.map(&:id) + } + } + end + + it { + result = Issues::BulkUpdateContext.new(@project, @user, @params).execute + result[:success].should be_true + result[:count].should == @issues.count + + @project.issues.opened.should be_empty + @project.issues.closed.should_not be_empty + } + + end + + describe :reopen_issues do + + before do + @issues = 5.times.collect do + create(:closed_issue, project: @project) + end + @params = { + update: { + status: 'reopen', + issues_ids: @issues.map(&:id) + } + } + end + + it { + result = Issues::BulkUpdateContext.new(@project, @user, @params).execute + result[:success].should be_true + result[:count].should == @issues.count + + @project.issues.closed.should be_empty + @project.issues.opened.should_not be_empty + } + + end + + describe :update_assignee do + + before do + @new_assignee = create :user + @params = { + update: { + issues_ids: [issue.id], + assignee_id: @new_assignee.id + } + } + end + + it { + result = Issues::BulkUpdateContext.new(@project, @user, @params).execute + result[:success].should be_true + result[:count].should == 1 + + @project.issues.first.assignee.should == @new_assignee + } + + end + + describe :update_milestone do + + before do + @milestone = create :milestone + @params = { + update: { + issues_ids: [issue.id], + milestone_id: @milestone.id + } + } + end + + it { + result = Issues::BulkUpdateContext.new(@project, @user, @params).execute + result[:success].should be_true + result[:count].should == 1 + + @project.issues.first.milestone.should == @milestone + } + end + +end |