Feature #10989 » cant_close_before_sub_issues_closed_v2.patch
app/models/issue.rb | ||
---|---|---|
73 | 73 |
validates :estimated_hours, :numericality => {:greater_than_or_equal_to => 0, :allow_nil => true, :message => :invalid} |
74 | 74 |
validates :start_date, :date => true |
75 | 75 |
validates :due_date, :date => true |
76 |
validate :validate_issue, :validate_required_fields |
|
76 |
validate :validate_issue, :validate_required_fields, :validate_subtasks
|
|
77 | 77 |
attr_protected :id |
78 | 78 | |
79 | 79 |
scope :visible, lambda {|*args| |
... | ... | |
762 | 762 |
end |
763 | 763 |
end |
764 | 764 | |
765 |
# Validates the issue against open subtasks |
|
766 |
def validate_subtasks |
|
767 |
if closing? && descendants.open.any? |
|
768 |
errors.add :base, I18n.t(:error_can_not_close_issue_with_open_subtasks) |
|
769 |
end |
|
770 |
end |
|
771 | ||
765 | 772 |
# Set the done_ratio using the status if that setting is set. This will keep the done_ratios |
766 | 773 |
# even if the user turns off the setting later |
767 | 774 |
def update_done_ratio_from_issue_status |
config/locales/en.yml | ||
---|---|---|
215 | 215 |
error_ldap_bind_credentials: "Invalid LDAP Account/Password" |
216 | 216 |
error_no_tracker_allowed_for_new_issue_in_project: "The project doesn't have any trackers for which you can create an issue" |
217 | 217 |
error_no_projects_with_tracker_allowed_for_new_issue: "There are no projects with trackers for which you can create an issue" |
218 |
error_can_not_close_issue_with_open_subtasks: "You cannot close an issue with open subtasks" |
|
218 | 219 | |
219 | 220 |
mail_subject_lost_password: "Your %{value} password" |
220 | 221 |
mail_body_lost_password: 'To change your password, click on the following link:' |
test/unit/issue_subtasking_test.rb | ||
---|---|---|
330 | 330 |
parent.generate_child!(:estimated_hours => 7) |
331 | 331 |
assert_equal 12, parent.reload.total_estimated_hours |
332 | 332 |
end |
333 | ||
334 |
def test_parent_with_open_subtasks_cannot_be_closed |
|
335 |
parent = Issue.generate! |
|
336 |
parent.generate_child!() |
|
337 |
parent.reload |
|
338 |
parent.status = IssueStatus.where(:is_closed => true).first |
|
339 |
parent.save |
|
340 | ||
341 |
assert_include 'An issue with open subtasks cannot be closed', parent.errors.full_messages |
|
342 |
end |
|
343 | ||
344 |
def test_parent_with_closed_subtasks_can_be_closed |
|
345 |
parent = Issue.generate! |
|
346 |
parent.generate_child!(:status => IssueStatus.where(:is_closed => true).first) |
|
347 |
parent.reload |
|
348 |
closed_status = IssueStatus.where(:is_closed => true).first |
|
349 |
parent.status = closed_status |
|
350 | ||
351 |
assert_save parent |
|
352 |
assert parent.status, closed_status |
|
353 |
end |
|
333 | 354 |
end |