From 84c679dc675c097fbd8180f41440e8a928994786 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 3 Aug 2010 12:02:37 -0700 Subject: [PATCH] [#4327] Show the deliverable's title in the Journal notes. --- init.rb | 1 + ...controller_issues_edit_before_save_hook.rb | 14 +++-- ...r_issues_show_detail_after_setting_hook.rb | 23 ++++++++ ...ues_show_detail_after_setting_hook_test.rb | 58 +++++++++++++++++++ 4 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 lib/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook.rb create mode 100644 test/integration/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook_test.rb diff --git a/init.rb b/init.rb index 885f819..9c0e75d 100644 --- a/init.rb +++ b/init.rb @@ -71,3 +71,4 @@ 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' +require 'redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook' diff --git a/lib/redmine_contracts/hooks/controller_issues_edit_before_save_hook.rb b/lib/redmine_contracts/hooks/controller_issues_edit_before_save_hook.rb index 0eeb762..b5cef1c 100644 --- a/lib/redmine_contracts/hooks/controller_issues_edit_before_save_hook.rb +++ b/lib/redmine_contracts/hooks/controller_issues_edit_before_save_hook.rb @@ -2,12 +2,18 @@ module RedmineContracts module Hooks class ControllerIssuesEditBeforeSaveHook < Redmine::Hook::ViewListener def controller_issues_edit_before_save(context={}) - if context[:params] && context[:params][:issue] && context[:params][:issue][:deliverable_id].present? - deliverable = Deliverable.find_by_id(context[:params][:issue][:deliverable_id]) - if deliverable.contract.project == context[:issue].project - context[:issue].deliverable = deliverable + if context[:params] && context[:params][:issue] + if context[:params][:issue][:deliverable_id].present? + deliverable = Deliverable.find_by_id(context[:params][:issue][:deliverable_id]) + if deliverable.contract.project == context[:issue].project + context[:issue].deliverable = deliverable + end + + else + context[:issue].deliverable = nil end + end return '' diff --git a/lib/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook.rb b/lib/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook.rb new file mode 100644 index 0000000..8e6d74e --- /dev/null +++ b/lib/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook.rb @@ -0,0 +1,23 @@ +module RedmineContracts + module Hooks + class HelperIssuesShowDetailAfterSettingHook < Redmine::Hook::ViewListener + # Deliverable changes for the journal use the Deliverable subject + # instead of the id + # + # Context: + # * :detail => Detail about the journal change + # + def helper_issues_show_detail_after_setting(context = { }) + # TODO Later: Overwritting the caller is bad juju + if context[:detail].prop_key == 'deliverable_id' + d = Deliverable.find_by_id(context[:detail].value) + context[:detail].value = d.title if d.present? && d.title.present? + + d = Deliverable.find_by_id(context[:detail].old_value) + context[:detail].old_value = d.title if d.present? && d.title.present? + end + '' + end + end + end +end diff --git a/test/integration/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook_test.rb b/test/integration/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook_test.rb new file mode 100644 index 0000000..9debdf2 --- /dev/null +++ b/test/integration/redmine_contracts/hooks/helper_issues_show_detail_after_setting_hook_test.rb @@ -0,0 +1,58 @@ +require File.dirname(__FILE__) + '/../../../test_helper' + +class RedmineContracts::Hooks::HelperIssuesShowDetailAfterSettingHookTest < ActionController::IntegrationTest + include Redmine::Hook::Helper + + context "#helper_issues_show_detail_after_setting" do + setup do + @project = Project.generate! + @issue = Issue.generate_for_project!(@project) + + @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') + # Set first + @issue.init_journal(@manager) + @issue.deliverable = @deliverable1 + @issue.save! + # Change + @issue.init_journal(@manager) + @issue.deliverable = @deliverable2 + @issue.save! + # Unset + @issue.init_journal(@manager) + @issue.deliverable = nil + @issue.save! + + login_as('manager', 'existing') + + visit_issue_page(@issue) + assert_response :success + end + + should "show when a deliverable is set" do + assert_select ".details" do + assert_select "li", :text => /Deliverable set to #{@deliverable1.title}/ + end + end + + should "show when a deliverable is changed" do + assert_select ".details" do + assert_select "li", :text => /Deliverable changed from #{@deliverable1.title} to #{@deliverable2.title}/ + end + + end + + should "show when a deliverable is removed" do + assert_select ".details" do + assert_select "li", :text => /Deliverable deleted .*#{@deliverable2.title}/ + end + + end + end +end