summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/issue.rb10
-rw-r--r--test/unit/issue_test.rb16
2 files changed, 24 insertions, 2 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 1ad09e0aa..84907a475 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -751,14 +751,20 @@ class Issue < ActiveRecord::Base
errors.add :start_date, :earlier_than_minimum_start_date, :date => format_date(soonest_start)
end
- if project && fixed_version
- if !assignable_versions.include?(fixed_version)
+ if project && fixed_version_id
+ if fixed_version.nil? || assignable_versions.exclude?(fixed_version)
errors.add :fixed_version_id, :inclusion
elsif reopening? && fixed_version.closed?
errors.add :base, I18n.t(:error_can_not_reopen_issue_on_closed_version)
end
end
+ if project && category_id
+ unless project.issue_category_ids.include?(category_id)
+ errors.add :category_id, :inclusion
+ end
+ end
+
# Checks that the issue can not be added/moved to a disabled tracker
if project && (tracker_id_changed? || project_id_changed?)
if tracker && !project.trackers.include?(tracker)
diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb
index a0d9485c2..f054cee96 100644
--- a/test/unit/issue_test.rb
+++ b/test/unit/issue_test.rb
@@ -1650,6 +1650,14 @@ class IssueTest < ActiveSupport::TestCase
assert_equal ['open'], issue.assignable_versions.collect(&:status).uniq
end
+ def test_should_not_be_able_to_set_an_invalid_version_id
+ issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1,
+ :status_id => 1, :fixed_version_id => 424242,
+ :subject => 'New issue')
+ assert !issue.save
+ assert_not_equal [], issue.errors[:fixed_version_id]
+ end
+
def test_should_not_be_able_to_assign_a_new_issue_to_a_closed_version
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1,
:status_id => 1, :fixed_version_id => 1,
@@ -1721,6 +1729,14 @@ class IssueTest < ActiveSupport::TestCase
assert issue.save
end
+ def test_should_not_be_able_to_set_an_invalid_category_id
+ issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1,
+ :status_id => 1, :category_id => 3,
+ :subject => 'New issue')
+ assert !issue.save
+ assert_not_equal [], issue.errors[:category_id]
+ end
+
def test_allowed_target_projects_should_include_projects_with_issue_tracking_enabled
assert_include Project.find(2), Issue.allowed_target_projects(User.find(2))
end