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