Commit 8cfc6a4de8e01a9dd7603fd8b3dce0d19da2f81a

Authored by Dmitriy Zaporozhets
2 parents d7c65534 6e8cb844

Merge pull request #3956 from AlexDenisov/issues_bulk_update

Issues bulk update
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 {
... ...
spec/contexts/issues/bulk_update_context_spec.rb 0 → 100644
... ... @@ -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
... ...