diff --git a/app/controllers/issue_relations_controller.rb b/app/controllers/issue_relations_controller.rb index 8a41c38..9ce3585 100644 --- a/app/controllers/issue_relations_controller.rb +++ b/app/controllers/issue_relations_controller.rb @@ -21,8 +21,8 @@ class IssueRelationsController < ApplicationController def new @relation = IssueRelation.new(params[:relation]) @relation.issue_from = @issue - if params[:relation] && !params[:relation][:issue_to_id].blank? - @relation.issue_to = Issue.visible.find_by_id(params[:relation][:issue_to_id]) + if params[:relation] && m = params[:relation][:issue_to_id].to_s.match(/^#?(\d+)$/) + @relation.issue_to = Issue.visible.find_by_id(m[1].to_i) end @relation.save if request.post? respond_to do |format| diff --git a/app/models/project.rb b/app/models/project.rb index 58ef811..3941735 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/public/stylesheets/application.css b/public/stylesheets/application.css index 9d51f6d..d5dd42c 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -728,6 +728,7 @@ background-image:url('../images/close_hl.png'); padding:0; margin:0; line-height:0.8em; + white-space:nowrap; } .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; } diff --git a/test/fixtures/wiki_contents.yml b/test/fixtures/wiki_contents.yml index 96aa2cc..e0bf199 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 a0b8b79..f1fb199 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/functional/issue_relations_controller_test.rb b/test/functional/issue_relations_controller_test.rb index cd7af4e..e8834f1 100644 --- a/test/functional/issue_relations_controller_test.rb +++ b/test/functional/issue_relations_controller_test.rb @@ -40,6 +40,24 @@ class IssueRelationsControllerTest < ActionController::TestCase end end + def test_new_should_accept_id_with_hash + assert_difference 'IssueRelation.count' do + @request.session[:user_id] = 3 + post :new, :issue_id => 1, + :relation => {:issue_to_id => '#2', :relation_type => 'relates', :delay => ''} + end + end + + def test_new_should_not_break_with_non_numerical_id + assert_no_difference 'IssueRelation.count' do + assert_nothing_raised do + @request.session[:user_id] = 3 + post :new, :issue_id => 1, + :relation => {:issue_to_id => 'foo', :relation_type => 'relates', :delay => ''} + end + end + end + def test_should_create_relations_with_visible_issues_only Setting.cross_project_issue_relations = '1' assert_nil Issue.visible(User.find(3)).find_by_id(4) diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index 3bf32d9..81fe44a 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