From 848616853de1e87de479c145b048173b7b6c455d Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 3 Aug 2010 11:38:17 -0700 Subject: [PATCH] [#4327] Save deliverable bulk edits. --- init.rb | 1 + ...oller_issues_bulk_edit_before_save_hook.rb | 23 ++++++++ ..._issues_bulk_edit_before_save_hook_test.rb | 54 +++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 lib/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook.rb create mode 100644 test/integration/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook_test.rb diff --git a/init.rb b/init.rb index 08a064d..885f819 100644 --- a/init.rb +++ b/init.rb @@ -70,3 +70,4 @@ require 'redmine_contracts/hooks/view_issues_show_details_bottom_hook' require 'redmine_contracts/hooks/view_issues_form_details_bottom_hook' require 'redmine_contracts/hooks/controller_issues_edit_before_save_hook' require 'redmine_contracts/hooks/view_issues_bulk_edit_details_bottom_hook' +require 'redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook' diff --git a/lib/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook.rb b/lib/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook.rb new file mode 100644 index 0000000..a4915f5 --- /dev/null +++ b/lib/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook.rb @@ -0,0 +1,23 @@ +module RedmineContracts + module Hooks + class ControllerIssuesBulkEditBeforeSaveHook < Redmine::Hook::ViewListener + # Context: + # * :issue => Issue being saved + # * :params => HTML parameters + # + def controller_issues_bulk_edit_before_save(context={}) + case + when context[:params][:deliverable_id].blank? + # Do nothing + when context[:params][:deliverable_id] == 'none' + # Unassign deliverable + context[:issue].deliverable = nil + else + context[:issue].deliverable = Deliverable.find(context[:params][:deliverable_id]) + end + + return '' + end + end + end +end diff --git a/test/integration/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook_test.rb b/test/integration/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook_test.rb new file mode 100644 index 0000000..2d195bc --- /dev/null +++ b/test/integration/redmine_contracts/hooks/controller_issues_bulk_edit_before_save_hook_test.rb @@ -0,0 +1,54 @@ +require File.dirname(__FILE__) + '/../../../test_helper' + +class RedmineContracts::Hooks::ControllerIssuesBulkEditBeforeSaveHookTest < ActionController::IntegrationTest + include Redmine::Hook::Helper + + context "#view_issues_bulk_edit_details_bottom" do + setup do + @project = Project.generate! + @issue = Issue.generate_for_project!(@project) + @issue2 = Issue.generate_for_project!(@project) + @issue3 = Issue.generate_for_project!(@project) + @issues = [@issue, @issue2, @issue3] + @contract1 = Contract.generate!(:project => @project) + @contract2 = Contract.generate!(:project => @project) + + @manager = User.generate!(:login => 'manager', :password => 'existing', :password_confirmation => 'existing') + @role = Role.generate!(:permissions => [:view_issues, :edit_issues]) + User.add_to_project(@manager, @project, @role) + @deliverable1 = FixedDeliverable.generate!(:contract => @contract1, :manager => @manager, :title => 'The Title 1') + @deliverable2 = FixedDeliverable.generate!(:contract => @contract2, :manager => @manager, :title => 'The Title 2') + @issue.deliverable = @deliverable1 + + login_as('manager', 'existing') + end + + context "when saving multiple issues" do + setup do + visit_issue_bulk_edit_page(@issues) + end + + should "allow clearing all of the deliverables" do + select "none", :from => "Deliverable" + click_button "Submit" + + assert_response :success + + @issues.each do |issue| + assert_equal nil, issue.reload.deliverable + end + end + + should "allow assigning a deliverable" do + select @deliverable2.title, :from => "Deliverable" + click_button "Submit" + + assert_response :success + + @issues.each do |issue| + assert_equal @deliverable2, issue.reload.deliverable + end + end + end + end +end