summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/versions_controller.rb2
-rw-r--r--app/models/version.rb9
-rw-r--r--test/object_helpers.rb1
-rw-r--r--test/unit/version_test.rb21
4 files changed, 32 insertions, 1 deletions
diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb
index 37de29df8..e6b1fec89 100644
--- a/app/controllers/versions_controller.rb
+++ b/app/controllers/versions_controller.rb
@@ -146,7 +146,7 @@ class VersionsController < ApplicationController
end
def destroy
- if @version.fixed_issues.empty?
+ if @version.deletable?
@version.destroy
respond_to do |format|
format.html { redirect_back_or_default settings_project_path(@project, :tab => 'versions') }
diff --git a/app/models/version.rb b/app/models/version.rb
index b8c7b6f60..9910700f2 100644
--- a/app/models/version.rb
+++ b/app/models/version.rb
@@ -227,6 +227,10 @@ class Version < ActiveRecord::Base
sharing != 'none'
end
+ def deletable?
+ fixed_issues.empty? && !referenced_by_a_custom_field?
+ end
+
private
def load_issue_counts
@@ -288,4 +292,9 @@ class Version < ActiveRecord::Base
progress
end
end
+
+ def referenced_by_a_custom_field?
+ CustomValue.joins(:custom_field).
+ where(:value => id.to_s, :custom_fields => {:field_format => 'version'}).any?
+ end
end
diff --git a/test/object_helpers.rb b/test/object_helpers.rb
index 7061e75c1..74f82b68b 100644
--- a/test/object_helpers.rb
+++ b/test/object_helpers.rb
@@ -125,6 +125,7 @@ module ObjectHelpers
@generated_version_name.succ!
version = Version.new(attributes)
version.name = @generated_version_name.dup if version.name.blank?
+ version.project ||= Project.find(1)
yield version if block_given?
version.save!
version
diff --git a/test/unit/version_test.rb b/test/unit/version_test.rb
index 6c1238eb0..b61061b85 100644
--- a/test/unit/version_test.rb
+++ b/test/unit/version_test.rb
@@ -235,6 +235,27 @@ class VersionTest < ActiveSupport::TestCase
assert_equal @version, project_2_issue.fixed_version
end
+ def test_deletable_should_return_true_when_not_referenced
+ version = Version.generate!
+
+ assert_equal true, version.deletable?
+ end
+
+ def test_deletable_should_return_false_when_referenced_by_an_issue
+ version = Version.generate!
+ Issue.generate!(:fixed_version => version)
+
+ assert_equal false, version.deletable?
+ end
+
+ def test_deletable_should_return_false_when_referenced_by_a_custom_field
+ version = Version.generate!
+ field = IssueCustomField.generate!(:field_format => 'version')
+ value = CustomValue.create!(:custom_field => field, :customized => Issue.first, :value => version.id)
+
+ assert_equal false, version.deletable?
+ end
+
private
def add_issue(version, attributes={})