##// END OF EJS Templates
Disallow users to delete a version referenced by a custom field (#20159)....
Jean-Philippe Lang -
r13994:bc9ca5fcfd74
parent child
Show More
@@ -146,7 +146,7 class VersionsController < ApplicationController
146 end
146 end
147
147
148 def destroy
148 def destroy
149 if @version.fixed_issues.empty?
149 if @version.deletable?
150 @version.destroy
150 @version.destroy
151 respond_to do |format|
151 respond_to do |format|
152 format.html { redirect_back_or_default settings_project_path(@project, :tab => 'versions') }
152 format.html { redirect_back_or_default settings_project_path(@project, :tab => 'versions') }
@@ -227,6 +227,10 class Version < ActiveRecord::Base
227 sharing != 'none'
227 sharing != 'none'
228 end
228 end
229
229
230 def deletable?
231 fixed_issues.empty? && !referenced_by_a_custom_field?
232 end
233
230 private
234 private
231
235
232 def load_issue_counts
236 def load_issue_counts
@@ -288,4 +292,9 class Version < ActiveRecord::Base
288 progress
292 progress
289 end
293 end
290 end
294 end
295
296 def referenced_by_a_custom_field?
297 CustomValue.joins(:custom_field).
298 where(:value => id.to_s, :custom_fields => {:field_format => 'version'}).any?
299 end
291 end
300 end
@@ -125,6 +125,7 module ObjectHelpers
125 @generated_version_name.succ!
125 @generated_version_name.succ!
126 version = Version.new(attributes)
126 version = Version.new(attributes)
127 version.name = @generated_version_name.dup if version.name.blank?
127 version.name = @generated_version_name.dup if version.name.blank?
128 version.project ||= Project.find(1)
128 yield version if block_given?
129 yield version if block_given?
129 version.save!
130 version.save!
130 version
131 version
@@ -235,6 +235,27 class VersionTest < ActiveSupport::TestCase
235 assert_equal @version, project_2_issue.fixed_version
235 assert_equal @version, project_2_issue.fixed_version
236 end
236 end
237
237
238 def test_deletable_should_return_true_when_not_referenced
239 version = Version.generate!
240
241 assert_equal true, version.deletable?
242 end
243
244 def test_deletable_should_return_false_when_referenced_by_an_issue
245 version = Version.generate!
246 Issue.generate!(:fixed_version => version)
247
248 assert_equal false, version.deletable?
249 end
250
251 def test_deletable_should_return_false_when_referenced_by_a_custom_field
252 version = Version.generate!
253 field = IssueCustomField.generate!(:field_format => 'version')
254 value = CustomValue.create!(:custom_field => field, :customized => Issue.first, :value => version.id)
255
256 assert_equal false, version.deletable?
257 end
258
238 private
259 private
239
260
240 def add_issue(version, attributes={})
261 def add_issue(version, attributes={})
General Comments 0
You need to be logged in to leave comments. Login now