From d79592a7f613f47e2dce67184ca3e2106658e2e5 Mon Sep 17 00:00:00 2001
From: AlexDenisov <1101.debian@gmail.com>
Date: Wed, 15 May 2013 13:59:15 +0000
Subject: [PATCH 1/3] Added spec on bulk issues update

---
 .../issues/bulk_update_context_spec.rb        | 77 +++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 spec/contexts/issues/bulk_update_context_spec.rb

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..0ea1799f5c9
--- /dev/null
+++ b/spec/contexts/issues/bulk_update_context_spec.rb
@@ -0,0 +1,77 @@
+require 'spec_helper'
+
+describe Issues::BulkUpdateContext do
+
+  describe :close_issue do
+
+    before do
+      @user = create :user
+      opts = {
+        name: "GitLab"
+      }
+      @project = create_project(@user, opts)
+      @issues = 5.times.collect do
+        create(:issue, project: @project)
+      end
+      @params = { 
+        update: {
+          status: 'closed',
+          issues_ids: @issues.map(&:id)
+        }
+      }
+
+    end
+
+    it "close issues" do
+      Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      @project.issues.opened.should be_empty
+      @project.issues.closed.should_not be_empty
+    end
+
+    it "return success" do
+      result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      result[:success].should be_true
+      result[:count].should == @issues.count
+    end
+
+  end
+
+  describe :reopen_issues do
+
+    before do
+      @user = create :user
+      opts = {
+        name: "GitLab"
+      }
+      @project = create_project(@user, opts)
+      @issues = 5.times.collect do
+        create(:closed_issue, project: @project)
+      end
+      @params = { 
+        update: {
+          status: 'reopen',
+          issues_ids: @issues.map(&:id)
+        }
+      }
+
+    end
+
+    it "reopen issues" do
+      Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      @project.issues.closed.should be_empty
+      @project.issues.opened.should_not be_empty
+    end
+
+    it "return success" do
+      result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
+      result[:success].should be_true
+      result[:count].should == @issues.count
+    end
+
+  end
+
+  def create_project(user, opts)
+    Projects::CreateContext.new(user, opts).execute
+  end
+end
+
-- 
GitLab


From d08e1db93091418694130870406995f21502d478 Mon Sep 17 00:00:00 2001
From: AlexDenisov <1101.debian@gmail.com>
Date: Wed, 15 May 2013 14:10:39 +0000
Subject: [PATCH 2/3] Cleanup bulk issues update a bit

---
 app/contexts/issues/bulk_update_context.rb | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/app/contexts/issues/bulk_update_context.rb b/app/contexts/issues/bulk_update_context.rb
index e92264a8bb1..8fe84d0e47c 100644
--- a/app/contexts/issues/bulk_update_context.rb
+++ b/app/contexts/issues/bulk_update_context.rb
@@ -8,6 +8,13 @@ module Issues
       assignee_id  = update_data[:assignee_id]
       status       = update_data[:status]
 
+      unless status.present?
+        return {
+          count: 0,
+          success: false
+        }
+      end
+
       opts = {}
       opts[:milestone_id] = milestone_id if milestone_id.present?
       opts[:assignee_id] = assignee_id if assignee_id.present?
@@ -15,16 +22,12 @@ module Issues
       issues = Issue.where(id: issues_ids).all
       issues = issues.select { |issue| can?(current_user, :modify_issue, issue) }
 
+      new_state = :reopen
+      new_state = :close if status == 'closed'
+
       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
       end
 
       {
-- 
GitLab


From 6e8cb844499dfcc77bd92f3daf0f7890400ec072 Mon Sep 17 00:00:00 2001
From: AlexDenisov <1101.debian@gmail.com>
Date: Thu, 16 May 2013 10:32:16 +0000
Subject: [PATCH 3/3] Added few tests on Issues::BulkUpdateContext

---
 app/contexts/issues/bulk_update_context.rb    | 18 ++--
 .../issues/bulk_update_context_spec.rb        | 89 +++++++++++++------
 2 files changed, 70 insertions(+), 37 deletions(-)

diff --git a/app/contexts/issues/bulk_update_context.rb b/app/contexts/issues/bulk_update_context.rb
index 8fe84d0e47c..73a3c353523 100644
--- a/app/contexts/issues/bulk_update_context.rb
+++ b/app/contexts/issues/bulk_update_context.rb
@@ -8,11 +8,14 @@ module Issues
       assignee_id  = update_data[:assignee_id]
       status       = update_data[:status]
 
-      unless status.present?
-        return {
-          count: 0,
-          success: false
-        }
+      new_state = nil
+
+      if status.present?
+        if status == 'closed'
+          new_state = :close
+        else
+          new_state = :reopen
+        end
       end
 
       opts = {}
@@ -22,12 +25,9 @@ module Issues
       issues = Issue.where(id: issues_ids).all
       issues = issues.select { |issue| can?(current_user, :modify_issue, issue) }
 
-      new_state = :reopen
-      new_state = :close if status == 'closed'
-
       issues.each do |issue|
         issue.update_attributes(opts)
-        issue.send new_state
+        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
index 0ea1799f5c9..0966ee35745 100644
--- a/spec/contexts/issues/bulk_update_context_spec.rb
+++ b/spec/contexts/issues/bulk_update_context_spec.rb
@@ -2,14 +2,21 @@ 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
-      @user = create :user
-      opts = {
-        name: "GitLab"
-      }
-      @project = create_project(@user, opts)
       @issues = 5.times.collect do
         create(:issue, project: @project)
       end
@@ -19,31 +26,22 @@ describe Issues::BulkUpdateContext do
           issues_ids: @issues.map(&:id)
         }
       }
-
     end
 
-    it "close issues" do
-      Issues::BulkUpdateContext.new(@project, @user, @params).execute
-      @project.issues.opened.should be_empty
-      @project.issues.closed.should_not be_empty
-    end
-
-    it "return success" do
+    it {
       result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
       result[:success].should be_true
       result[:count].should == @issues.count
-    end
+
+      @project.issues.opened.should be_empty
+      @project.issues.closed.should_not be_empty
+    }
 
   end
 
   describe :reopen_issues do
 
     before do
-      @user = create :user
-      opts = {
-        name: "GitLab"
-      }
-      @project = create_project(@user, opts)
       @issues = 5.times.collect do
         create(:closed_issue, project: @project)
       end
@@ -53,25 +51,60 @@ describe Issues::BulkUpdateContext do
           issues_ids: @issues.map(&:id)
         }
       }
-
     end
 
-    it "reopen issues" do
-      Issues::BulkUpdateContext.new(@project, @user, @params).execute
+    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 "return success" do
+    it {
       result = Issues::BulkUpdateContext.new(@project, @user, @params).execute
       result[:success].should be_true
-      result[:count].should == @issues.count
-    end
+      result[:count].should == 1
+
+      @project.issues.first.assignee.should == @new_assignee
+    }
 
   end
 
-  def create_project(user, opts)
-    Projects::CreateContext.new(user, opts).execute
+  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
 
+end
-- 
GitLab