summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2010-02-11 19:30:53 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2010-02-11 19:30:53 +0000
commit541d830d2a968f36d73add2b1e3693eab09136ed (patch)
tree3b91113bc027ad4303250ac7d19e3ca759dec1fb
parentd2baf5f2a7b00d58b6642a3e3f4024b97a8b9127 (diff)
downloadredmine-541d830d2a968f36d73add2b1e3693eab09136ed.tar.gz
redmine-541d830d2a968f36d73add2b1e3693eab09136ed.zip
Fixed: Project copy loses wiki pages hierarchy (#4797).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3412 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/project.rb12
-rw-r--r--test/fixtures/wiki_contents.yml24
-rw-r--r--test/fixtures/wiki_pages.yml21
-rw-r--r--test/unit/project_test.rb16
4 files changed, 69 insertions, 4 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 58ef81140..394173515 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -512,11 +512,23 @@ class Project < ActiveRecord::Base
unless project.wiki.nil?
self.wiki ||= Wiki.new
wiki.attributes = project.wiki.attributes.dup.except("id", "project_id")
+ wiki_pages_map = {}
project.wiki.pages.each do |page|
+ # Skip pages without content
+ next if page.content.nil?
new_wiki_content = WikiContent.new(page.content.attributes.dup.except("id", "page_id", "updated_on"))
new_wiki_page = WikiPage.new(page.attributes.dup.except("id", "wiki_id", "created_on", "parent_id"))
new_wiki_page.content = new_wiki_content
wiki.pages << new_wiki_page
+ wiki_pages_map[page.id] = new_wiki_page
+ end
+ wiki.save
+ # Reproduce page hierarchy
+ project.wiki.pages.each do |page|
+ if page.parent_id && wiki_pages_map[page.id]
+ wiki_pages_map[page.id].parent = wiki_pages_map[page.parent_id]
+ wiki_pages_map[page.id].save
+ end
end
end
end
diff --git a/test/fixtures/wiki_contents.yml b/test/fixtures/wiki_contents.yml
index 96aa2ccde..e0bf1991c 100644
--- a/test/fixtures/wiki_contents.yml
+++ b/test/fixtures/wiki_contents.yml
@@ -71,4 +71,28 @@ wiki_contents_006:
version: 1
author_id: 1
comments:
+wiki_contents_007:
+ text: This is a child page
+ updated_on: 2007-03-08 00:18:07 +01:00
+ page_id: 7
+ id: 7
+ version: 1
+ author_id: 1
+ comments:
+wiki_contents_008:
+ text: This is a parent page
+ updated_on: 2007-03-08 00:18:07 +01:00
+ page_id: 8
+ id: 8
+ version: 1
+ author_id: 1
+ comments:
+wiki_contents_009:
+ text: This is a child page
+ updated_on: 2007-03-08 00:18:07 +01:00
+ page_id: 9
+ id: 9
+ version: 1
+ author_id: 1
+ comments:
\ No newline at end of file
diff --git a/test/fixtures/wiki_pages.yml b/test/fixtures/wiki_pages.yml
index a0b8b790a..f1fb19917 100644
--- a/test/fixtures/wiki_pages.yml
+++ b/test/fixtures/wiki_pages.yml
@@ -41,4 +41,25 @@ wiki_pages_006:
wiki_id: 1
protected: false
parent_id: 2
+wiki_pages_007:
+ created_on: 2007-03-08 00:18:07 +01:00
+ title: Child_page_1
+ id: 7
+ wiki_id: 2
+ protected: false
+ parent_id: 8
+wiki_pages_008:
+ created_on: 2007-03-08 00:18:07 +01:00
+ title: Parent_page
+ id: 8
+ wiki_id: 2
+ protected: false
+ parent_id:
+wiki_pages_009:
+ created_on: 2007-03-08 00:18:07 +01:00
+ title: Child_page_2
+ id: 9
+ wiki_id: 2
+ protected: false
+ parent_id: 8
\ No newline at end of file
diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb
index 447ae1b04..621c11ee7 100644
--- a/test/unit/project_test.rb
+++ b/test/unit/project_test.rb
@@ -723,16 +723,24 @@ class ProjectTest < ActiveSupport::TestCase
assert_equal "Start page", @project.wiki.start_page
end
- should "copy wiki pages and content" do
- assert @project.copy(@source_project)
-
+ should "copy wiki pages and content with hierarchy" do
+ assert_difference 'WikiPage.count', @source_project.wiki.pages.size do
+ assert @project.copy(@source_project)
+ end
+
assert @project.wiki
- assert_equal 1, @project.wiki.pages.length
+ assert_equal @source_project.wiki.pages.size, @project.wiki.pages.size
@project.wiki.pages.each do |wiki_page|
assert wiki_page.content
assert !@source_project.wiki.pages.include?(wiki_page)
end
+
+ parent = @project.wiki.find_page('Parent_page')
+ child1 = @project.wiki.find_page('Child_page_1')
+ child2 = @project.wiki.find_page('Child_page_2')
+ assert_equal parent, child1.parent
+ assert_equal parent, child2.parent
end
should "copy issue categories" do