From 541d830d2a968f36d73add2b1e3693eab09136ed Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Thu, 11 Feb 2010 19:30:53 +0000 Subject: [PATCH] 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 --- app/models/project.rb | 12 ++++++++++++ test/fixtures/wiki_contents.yml | 24 ++++++++++++++++++++++++ test/fixtures/wiki_pages.yml | 21 +++++++++++++++++++++ test/unit/project_test.rb | 16 ++++++++++++---- 4 files changed, 69 insertions(+), 4 deletions(-) diff --git a/app/models/project.rb b/app/models/project.rb index 58ef8114..39417351 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 96aa2ccd..e0bf1991 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 a0b8b790..f1fb1991 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 447ae1b0..621c11ee 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