]> source.dussan.org Git - redmine.git/commitdiff
Fixed that time entries custom values are not deleted when deleting a project or...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 18 Dec 2013 18:39:09 +0000 (18:39 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 18 Dec 2013 18:39:09 +0000 (18:39 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@12421 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
app/models/project.rb
db/migrate/20131218183023_delete_orphan_time_entries_custom_values.rb [new file with mode: 0644]
test/unit/issue_test.rb
test/unit/project_test.rb

index 0101abf00287c99853f7115c43a3e303ee9069f8..c09b591a1042c2a4a7ad6cb79fa20dd27ca7642c 100644 (file)
@@ -38,7 +38,7 @@ class Issue < ActiveRecord::Base
     },
     :readonly => true
 
-  has_many :time_entries, :dependent => :delete_all
+  has_many :time_entries, :dependent => :destroy
   has_and_belongs_to_many :changesets, :order => "#{Changeset.table_name}.committed_on ASC, #{Changeset.table_name}.id ASC"
 
   has_many :relations_from, :class_name => 'IssueRelation', :foreign_key => 'issue_from_id', :dependent => :delete_all
index d4f29453aaba176aebadffb94fdcee140077b84a..4167d9a3aaffb21d9f3735d60cf0a7f03db8fd2f 100644 (file)
@@ -39,7 +39,7 @@ class Project < ActiveRecord::Base
   has_many :issues, :dependent => :destroy, :include => [:status, :tracker]
   has_many :issue_changes, :through => :issues, :source => :journals
   has_many :versions, :dependent => :destroy, :order => "#{Version.table_name}.effective_date DESC, #{Version.table_name}.name DESC"
-  has_many :time_entries, :dependent => :delete_all
+  has_many :time_entries, :dependent => :destroy
   has_many :queries, :class_name => 'IssueQuery', :dependent => :delete_all
   has_many :documents, :dependent => :destroy
   has_many :news, :dependent => :destroy, :include => :author
diff --git a/db/migrate/20131218183023_delete_orphan_time_entries_custom_values.rb b/db/migrate/20131218183023_delete_orphan_time_entries_custom_values.rb
new file mode 100644 (file)
index 0000000..f4e5935
--- /dev/null
@@ -0,0 +1,9 @@
+class DeleteOrphanTimeEntriesCustomValues < ActiveRecord::Migration
+  def up
+    CustomValue.where("customized_type = ? AND NOT EXISTS (SELECT 1 FROM #{TimeEntry.table_name} t WHERE t.id = customized_id)", "TimeEntry").delete_all
+  end
+
+  def down
+    # nop
+  end
+end
index 4e82aa00724a4b5c4151a8627b6291449e8d3bbc..0e252cc2e3b019ab8a12dc18fb0806549d911a46 100644 (file)
@@ -1375,6 +1375,15 @@ class IssueTest < ActiveSupport::TestCase
     assert_nil TimeEntry.find_by_issue_id(1)
   end
 
+  def test_destroy_should_delete_time_entries_custom_values
+    issue = Issue.generate!
+    time_entry = TimeEntry.generate!(:issue => issue, :custom_field_values => {10 => '1'})
+
+    assert_difference 'CustomValue.where(:customized_type => "TimeEntry").count', -1 do
+      assert issue.destroy
+    end
+  end
+
   def test_destroying_a_deleted_issue_should_not_raise_an_error
     issue = Issue.find(1)
     Issue.find(1).destroy
index 88e99c4399a6222faae3d528b332226ef47a64e8..945f775e8aa0bc1c3f34c46ead61ce3dfec3a9e5 100644 (file)
@@ -263,6 +263,15 @@ class ProjectTest < ActiveSupport::TestCase
     assert_equal 0, CustomValue.where(:customized_type => ['Project', 'Issue', 'TimeEntry', 'Version']).count
   end
 
+  def test_destroy_should_delete_time_entries_custom_values
+    project = Project.generate!
+    time_entry = TimeEntry.generate!(:project => project, :custom_field_values => {10 => '1'})
+
+    assert_difference 'CustomValue.where(:customized_type => "TimeEntry").count', -1 do
+      assert project.destroy
+    end
+  end
+
   def test_move_an_orphan_project_to_a_root_project
     sub = Project.find(2)
     sub.set_parent! @ecookbook