Fixed: children projects are deleted instead of being destroyed when destroying parent project (#7904).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5171 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
82ebb82706
commit
94d3595e31
|
@ -56,7 +56,7 @@ class Project < ActiveRecord::Base
|
||||||
:join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
|
:join_table => "#{table_name_prefix}custom_fields_projects#{table_name_suffix}",
|
||||||
:association_foreign_key => 'custom_field_id'
|
:association_foreign_key => 'custom_field_id'
|
||||||
|
|
||||||
acts_as_nested_set :order => 'name'
|
acts_as_nested_set :order => 'name', :dependent => :destroy
|
||||||
acts_as_attachable :view_permission => :view_files,
|
acts_as_attachable :view_permission => :view_files,
|
||||||
:delete_permission => :manage_files
|
:delete_permission => :manage_files
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ class Project < ActiveRecord::Base
|
||||||
# reserved words
|
# reserved words
|
||||||
validates_exclusion_of :identifier, :in => %w( new )
|
validates_exclusion_of :identifier, :in => %w( new )
|
||||||
|
|
||||||
before_destroy :delete_all_members, :destroy_children
|
before_destroy :delete_all_members
|
||||||
|
|
||||||
named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
|
named_scope :has_module, lambda { |mod| { :conditions => ["#{Project.table_name}.id IN (SELECT em.project_id FROM #{EnabledModule.table_name} em WHERE em.name=?)", mod.to_s] } }
|
||||||
named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
|
named_scope :active, { :conditions => "#{Project.table_name}.status = #{STATUS_ACTIVE}"}
|
||||||
|
@ -627,13 +627,6 @@ class Project < ActiveRecord::Base
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Destroys children before destroying self
|
|
||||||
def destroy_children
|
|
||||||
children.each do |child|
|
|
||||||
child.destroy
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Copies wiki from +project+
|
# Copies wiki from +project+
|
||||||
def copy_wiki(project)
|
def copy_wiki(project)
|
||||||
# Check that the source project has a wiki first
|
# Check that the source project has a wiki first
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# redMine - project management software
|
# Redmine - project management software
|
||||||
# Copyright (C) 2006-2007 Jean-Philippe Lang
|
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
@ -183,6 +183,41 @@ class ProjectTest < ActiveSupport::TestCase
|
||||||
assert_nil Issue.first(:conditions => {:project_id => @ecookbook.id})
|
assert_nil Issue.first(:conditions => {:project_id => @ecookbook.id})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_destroying_root_projects_should_clear_data
|
||||||
|
Project.roots.each do |root|
|
||||||
|
root.destroy
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal 0, Project.count, "Projects were not deleted: #{Project.all.inspect}"
|
||||||
|
assert_equal 0, Member.count, "Members were not deleted: #{Member.all.inspect}"
|
||||||
|
assert_equal 0, MemberRole.count
|
||||||
|
assert_equal 0, Issue.count
|
||||||
|
assert_equal 0, Journal.count
|
||||||
|
assert_equal 0, JournalDetail.count
|
||||||
|
assert_equal 0, Attachment.count
|
||||||
|
assert_equal 0, EnabledModule.count
|
||||||
|
assert_equal 0, IssueCategory.count
|
||||||
|
assert_equal 0, IssueRelation.count
|
||||||
|
assert_equal 0, Board.count
|
||||||
|
assert_equal 0, Message.count
|
||||||
|
assert_equal 0, News.count
|
||||||
|
assert_equal 0, Query.count(:conditions => "project_id IS NOT NULL")
|
||||||
|
assert_equal 0, Repository.count
|
||||||
|
assert_equal 0, Changeset.count
|
||||||
|
assert_equal 0, Change.count
|
||||||
|
#assert_equal 0, Comment.count
|
||||||
|
assert_equal 0, TimeEntry.count
|
||||||
|
assert_equal 0, Version.count
|
||||||
|
assert_equal 0, Watcher.count
|
||||||
|
assert_equal 0, Wiki.count
|
||||||
|
assert_equal 0, WikiPage.count
|
||||||
|
assert_equal 0, WikiContent.count
|
||||||
|
assert_equal 0, WikiContent::Version.count
|
||||||
|
assert_equal 0, Project.connection.select_all("SELECT * FROM projects_trackers").size
|
||||||
|
assert_equal 0, Project.connection.select_all("SELECT * FROM custom_fields_projects").size
|
||||||
|
assert_equal 0, CustomValue.count(:conditions => {:customized_type => ['Project', 'Issue', 'TimeEntry', 'Version']})
|
||||||
|
end
|
||||||
|
|
||||||
def test_move_an_orphan_project_to_a_root_project
|
def test_move_an_orphan_project_to_a_root_project
|
||||||
sub = Project.find(2)
|
sub = Project.find(2)
|
||||||
sub.set_parent! @ecookbook
|
sub.set_parent! @ecookbook
|
||||||
|
|
Loading…
Reference in New Issue