annotate test/unit/wiki_page_test.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents cbce1fd3b1b7
children 433d4f72a19b
rev   line source
Chris@441 1 # Redmine - project management software
Chris@441 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@441 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@441 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class WikiPageTest < ActiveSupport::TestCase
Chris@0 21 fixtures :projects, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
Chris@0 22
Chris@0 23 def setup
Chris@0 24 @wiki = Wiki.find(1)
Chris@0 25 @page = @wiki.pages.first
Chris@0 26 end
Chris@441 27
Chris@0 28 def test_create
Chris@0 29 page = WikiPage.new(:wiki => @wiki)
Chris@0 30 assert !page.save
Chris@0 31 assert_equal 1, page.errors.count
Chris@441 32
Chris@0 33 page.title = "Page"
Chris@0 34 assert page.save
Chris@0 35 page.reload
Chris@0 36 assert !page.protected?
Chris@441 37
Chris@0 38 @wiki.reload
Chris@0 39 assert @wiki.pages.include?(page)
Chris@0 40 end
Chris@441 41
Chris@0 42 def test_sidebar_should_be_protected_by_default
Chris@0 43 page = @wiki.find_or_new_page('sidebar')
Chris@0 44 assert page.new_record?
Chris@0 45 assert page.protected?
Chris@0 46 end
Chris@441 47
Chris@0 48 def test_find_or_new_page
Chris@0 49 page = @wiki.find_or_new_page("CookBook documentation")
Chris@0 50 assert_kind_of WikiPage, page
Chris@0 51 assert !page.new_record?
Chris@441 52
Chris@0 53 page = @wiki.find_or_new_page("Non existing page")
Chris@0 54 assert_kind_of WikiPage, page
Chris@0 55 assert page.new_record?
Chris@0 56 end
Chris@441 57
Chris@0 58 def test_parent_title
Chris@0 59 page = WikiPage.find_by_title('Another_page')
Chris@0 60 assert_nil page.parent_title
Chris@441 61
Chris@0 62 page = WikiPage.find_by_title('Page_with_an_inline_image')
Chris@0 63 assert_equal 'CookBook documentation', page.parent_title
Chris@0 64 end
Chris@441 65
Chris@0 66 def test_assign_parent
Chris@0 67 page = WikiPage.find_by_title('Another_page')
Chris@0 68 page.parent_title = 'CookBook documentation'
Chris@0 69 assert page.save
Chris@0 70 page.reload
Chris@0 71 assert_equal WikiPage.find_by_title('CookBook_documentation'), page.parent
Chris@0 72 end
Chris@441 73
Chris@0 74 def test_unassign_parent
Chris@0 75 page = WikiPage.find_by_title('Page_with_an_inline_image')
Chris@0 76 page.parent_title = ''
Chris@0 77 assert page.save
Chris@0 78 page.reload
Chris@0 79 assert_nil page.parent
Chris@0 80 end
Chris@441 81
Chris@0 82 def test_parent_validation
Chris@0 83 page = WikiPage.find_by_title('CookBook_documentation')
Chris@441 84
Chris@0 85 # A page that doesn't exist
Chris@0 86 page.parent_title = 'Unknown title'
Chris@0 87 assert !page.save
Chris@0 88 assert_equal I18n.translate('activerecord.errors.messages.invalid'), page.errors.on(:parent_title)
Chris@0 89 # A child page
Chris@0 90 page.parent_title = 'Page_with_an_inline_image'
Chris@0 91 assert !page.save
Chris@0 92 assert_equal I18n.translate('activerecord.errors.messages.circular_dependency'), page.errors.on(:parent_title)
Chris@0 93 # The page itself
Chris@0 94 page.parent_title = 'CookBook_documentation'
Chris@0 95 assert !page.save
Chris@0 96 assert_equal I18n.translate('activerecord.errors.messages.circular_dependency'), page.errors.on(:parent_title)
Chris@0 97
Chris@0 98 page.parent_title = 'Another_page'
Chris@0 99 assert page.save
Chris@0 100 end
Chris@441 101
Chris@0 102 def test_destroy
Chris@0 103 page = WikiPage.find(1)
Chris@0 104 page.destroy
Chris@0 105 assert_nil WikiPage.find_by_id(1)
Chris@0 106 # make sure that page content and its history are deleted
Chris@0 107 assert WikiContent.find_all_by_page_id(1).empty?
Chris@0 108 assert WikiContent.versioned_class.find_all_by_page_id(1).empty?
Chris@0 109 end
Chris@441 110
Chris@0 111 def test_destroy_should_not_nullify_children
Chris@0 112 page = WikiPage.find(2)
Chris@0 113 child_ids = page.child_ids
Chris@0 114 assert child_ids.any?
Chris@0 115 page.destroy
Chris@0 116 assert_nil WikiPage.find_by_id(2)
Chris@441 117
Chris@0 118 children = WikiPage.find_all_by_id(child_ids)
Chris@0 119 assert_equal child_ids.size, children.size
Chris@0 120 children.each do |child|
Chris@0 121 assert_nil child.parent_id
Chris@0 122 end
Chris@0 123 end
Chris@441 124
Chris@441 125 def test_updated_on_eager_load
Chris@441 126 page = WikiPage.with_updated_on.first
Chris@441 127 assert page.is_a?(WikiPage)
Chris@441 128 assert_not_nil page.read_attribute(:updated_on)
Chris@441 129 assert_equal page.content.updated_on, page.updated_on
Chris@441 130 end
Chris@0 131 end