diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-02-11 19:30:53 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-02-11 19:30:53 +0000 |
commit | 541d830d2a968f36d73add2b1e3693eab09136ed (patch) | |
tree | 3b91113bc027ad4303250ac7d19e3ca759dec1fb | |
parent | d2baf5f2a7b00d58b6642a3e3f4024b97a8b9127 (diff) | |
download | redmine-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.rb | 12 | ||||
-rw-r--r-- | test/fixtures/wiki_contents.yml | 24 | ||||
-rw-r--r-- | test/fixtures/wiki_pages.yml | 21 | ||||
-rw-r--r-- | 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 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 |