[#6441] Block assigning issues to a locked or closed Deliverable
This commit is contained in:
@@ -2,8 +2,10 @@ en:
|
||||
activerecord:
|
||||
errors:
|
||||
messages:
|
||||
cant_to_closed_deliverable: "Can't create a time entry on a closed deliverable"
|
||||
cant_to_closed_contract: "Can't create a time entry on a closed contract"
|
||||
cant_create_time_on_closed_deliverable: "Can't create a time entry on a closed deliverable"
|
||||
cant_create_time_on_closed_contract: "Can't create a time entry on a closed contract"
|
||||
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"
|
||||
|
||||
field_end_date: End Date
|
||||
field_executed: Executed
|
||||
|
||||
@@ -15,6 +15,16 @@ module RedmineContracts
|
||||
def contract_name
|
||||
contract.try(:name)
|
||||
end
|
||||
|
||||
validate :validate_deliverable_status
|
||||
|
||||
def validate_deliverable_status
|
||||
if deliverable.present? && changes["deliverable_id"].present?
|
||||
errors.add_to_base(:cant_assign_to_closed_deliverable) if deliverable.closed?
|
||||
errors.add_to_base(:cant_assign_to_locked_deliverable) if deliverable.locked?
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -13,13 +13,13 @@ module RedmineContracts
|
||||
|
||||
def validate_deliverable_status
|
||||
if issue.present? && issue.deliverable.present?
|
||||
errors.add_to_base(:cant_to_closed_deliverable) if issue.deliverable.closed?
|
||||
errors.add_to_base(:cant_create_time_on_closed_deliverable) if issue.deliverable.closed?
|
||||
end
|
||||
end
|
||||
|
||||
def validate_contract_status
|
||||
if issue.present? && issue.deliverable.present? && issue.deliverable.contract.present?
|
||||
errors.add_to_base(:cant_to_closed_contract) if issue.deliverable.contract.closed?
|
||||
errors.add_to_base(:cant_create_time_on_closed_contract) if issue.deliverable.contract.closed?
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -24,10 +24,10 @@ class RedmineContracts::Hooks::ControllerIssuesEditBeforeSaveTest < ActionContro
|
||||
context "for a new issue" do
|
||||
setup do
|
||||
visit_project(@project)
|
||||
click_link "New issue"
|
||||
end
|
||||
|
||||
should "set the issue's deliverable" do
|
||||
click_link "New issue"
|
||||
fill_in "Subject", :with => 'Hook test'
|
||||
select @deliverable2.title, :from => "Deliverable"
|
||||
click_button "Create"
|
||||
@@ -38,6 +38,38 @@ class RedmineContracts::Hooks::ControllerIssuesEditBeforeSaveTest < ActionContro
|
||||
|
||||
end
|
||||
|
||||
should "not allow setting a locked Deliverable" do
|
||||
assert @deliverable2.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 closed Deliverable" do
|
||||
assert @deliverable2.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)
|
||||
@@ -69,6 +101,51 @@ class RedmineContracts::Hooks::ControllerIssuesEditBeforeSaveTest < ActionContro
|
||||
|
||||
end
|
||||
|
||||
should "not allow updating to a locked deliverable" do
|
||||
assert @deliverable2.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 closed deliverable" do
|
||||
assert @deliverable2.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"
|
||||
|
||||
assert_response :success
|
||||
|
||||
@issue.reload
|
||||
assert_equal @deliverable2, @issue.deliverable
|
||||
|
||||
# Now normal update after locking
|
||||
assert @deliverable2.lock!
|
||||
fill_in "Subject", :with => 'Change subject'
|
||||
click_button "Submit"
|
||||
|
||||
assert_response :success
|
||||
@issue.reload
|
||||
assert_equal "Change subject", @issue.subject
|
||||
assert_equal @deliverable2, @issue.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)
|
||||
|
||||
Reference in New Issue
Block a user