From f70ade5011e413405df60d1172c48aeb66f2861f Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 10 Aug 2011 12:09:09 -0700 Subject: [PATCH] [#6441] Block assigning issues to deliverable on a locked or closed contract --- config/locales/en.yml | 2 + lib/redmine_contracts/patches/issue_patch.rb | 8 +++ .../controller_issues_edit_before_save.rb | 56 +++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/config/locales/en.yml b/config/locales/en.yml index 5c5f407..f7e8c3a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -5,6 +5,8 @@ en: cant_create_time_on_object: "Can't create a time entry on a %{reason} %{thing}" cant_assign_to_closed_deliverable: "Can't assign issue to a closed deliverable" cant_assign_to_locked_deliverable: "Can't assign issue to a locked deliverable" + cant_assign_to_closed_contract: "Can't assign issue to a closed contract" + cant_assign_to_locked_contract: "Can't assign issue to a locked contract" cant_update_locked_deliverable: "Can't update a locked deliverable" cant_update_closed_deliverable: "Can't update a closed deliverable" cant_update_locked_contract: "Can't update a locked contract" diff --git a/lib/redmine_contracts/patches/issue_patch.rb b/lib/redmine_contracts/patches/issue_patch.rb index ba9100d..38f4a45 100644 --- a/lib/redmine_contracts/patches/issue_patch.rb +++ b/lib/redmine_contracts/patches/issue_patch.rb @@ -17,6 +17,7 @@ module RedmineContracts end validate :validate_deliverable_status + validate :validate_contract_status def validate_deliverable_status if deliverable.present? && changes["deliverable_id"].present? @@ -25,6 +26,13 @@ module RedmineContracts end end + def validate_contract_status + if deliverable.present? && changes["deliverable_id"].present? + errors.add_to_base(:cant_assign_to_closed_contract) if contract.closed? + errors.add_to_base(:cant_assign_to_locked_contract) if contract.locked? + end + end + end end diff --git a/test/integration/redmine_contracts/hooks/controller_issues_edit_before_save.rb b/test/integration/redmine_contracts/hooks/controller_issues_edit_before_save.rb index 6810379..e865245 100644 --- a/test/integration/redmine_contracts/hooks/controller_issues_edit_before_save.rb +++ b/test/integration/redmine_contracts/hooks/controller_issues_edit_before_save.rb @@ -70,6 +70,38 @@ class RedmineContracts::Hooks::ControllerIssuesEditBeforeSaveTest < ActionContro end + should "not allow setting a Deliverable on a locked Contract" do + assert @contract2.lock! + click_link "New issue" + + fill_in "Subject", :with => 'Hook test' + select @deliverable2.title, :from => "Deliverable" + assert_no_difference("Issue.count") do + click_button "Create" + + assert_response :success + end + + assert_equal nil, Issue.last.deliverable + + end + + should "not allow setting a Deliverable on a closed Contract" do + assert @contract2.close! + click_link "New issue" + + fill_in "Subject", :with => 'Hook test' + select @deliverable2.title, :from => "Deliverable" + assert_no_difference("Issue.count") do + click_button "Create" + + assert_response :success + end + + assert_equal nil, Issue.last.deliverable + + end + context "with no permission to Assign Deliverable" do should "not allow setting the Deliverable (force HTTP request)" do @role.permissions.delete(:assign_deliverable_to_issue) @@ -125,6 +157,30 @@ class RedmineContracts::Hooks::ControllerIssuesEditBeforeSaveTest < ActionContro end + should "not allow updating to a deliverable on a locked contract" do + assert @contract2.lock! + select @deliverable2.title, :from => "Deliverable" + click_button "Submit" + + assert_response :success + + @issue.reload + assert_equal nil, @issue.deliverable + + end + + should "not allow updating to a deliverable on a closed contract" do + assert @contract2.close! + select @deliverable2.title, :from => "Deliverable" + click_button "Submit" + + assert_response :success + + @issue.reload + assert_equal nil, @issue.deliverable + + end + should "allow updating an issue, even if the deliverable is locked as long as the deliverable isn't changed" do select @deliverable2.title, :from => "Deliverable" click_button "Submit"