wiki_page_test.rb
131 lines
| 4.0 KiB
| text/x-ruby
|
RubyLexer
|
r4978 | # Redmine - project management software | ||
# Copyright (C) 2006-2011 Jean-Philippe Lang | ||||
|
r320 | # | ||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
|
r5691 | # | ||
|
r320 | # This program is distributed in the hope that it will be useful, | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
|
r5691 | # | ||
|
r320 | # You should have received a copy of the GNU General Public License | ||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
|
r4395 | require File.expand_path('../../test_helper', __FILE__) | ||
|
r320 | |||
|
r2773 | class WikiPageTest < ActiveSupport::TestCase | ||
|
r537 | fixtures :projects, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions | ||
|
r320 | |||
def setup | ||||
@wiki = Wiki.find(1) | ||||
@page = @wiki.pages.first | ||||
end | ||||
|
r5691 | |||
|
r2781 | def test_create | ||
|
r320 | page = WikiPage.new(:wiki => @wiki) | ||
assert !page.save | ||||
assert_equal 1, page.errors.count | ||||
|
r5691 | |||
|
r2781 | page.title = "Page" | ||
|
r320 | assert page.save | ||
page.reload | ||||
|
r3518 | assert !page.protected? | ||
|
r5691 | |||
|
r320 | @wiki.reload | ||
|
r2781 | assert @wiki.pages.include?(page) | ||
|
r320 | end | ||
|
r5691 | |||
|
r3518 | def test_sidebar_should_be_protected_by_default | ||
page = @wiki.find_or_new_page('sidebar') | ||||
assert page.new_record? | ||||
assert page.protected? | ||||
end | ||||
|
r5691 | |||
|
r320 | def test_find_or_new_page | ||
page = @wiki.find_or_new_page("CookBook documentation") | ||||
assert_kind_of WikiPage, page | ||||
assert !page.new_record? | ||||
|
r5691 | |||
|
r320 | page = @wiki.find_or_new_page("Non existing page") | ||
assert_kind_of WikiPage, page | ||||
assert page.new_record? | ||||
end | ||||
|
r5691 | |||
|
r1689 | def test_parent_title | ||
page = WikiPage.find_by_title('Another_page') | ||||
assert_nil page.parent_title | ||||
|
r5691 | |||
|
r1689 | page = WikiPage.find_by_title('Page_with_an_inline_image') | ||
assert_equal 'CookBook documentation', page.parent_title | ||||
end | ||||
|
r5691 | |||
|
r1689 | def test_assign_parent | ||
page = WikiPage.find_by_title('Another_page') | ||||
page.parent_title = 'CookBook documentation' | ||||
assert page.save | ||||
page.reload | ||||
assert_equal WikiPage.find_by_title('CookBook_documentation'), page.parent | ||||
end | ||||
|
r5691 | |||
|
r1689 | def test_unassign_parent | ||
page = WikiPage.find_by_title('Page_with_an_inline_image') | ||||
page.parent_title = '' | ||||
assert page.save | ||||
page.reload | ||||
assert_nil page.parent | ||||
end | ||||
|
r5691 | |||
|
r1689 | def test_parent_validation | ||
page = WikiPage.find_by_title('CookBook_documentation') | ||||
|
r5691 | |||
|
r1689 | # A page that doesn't exist | ||
page.parent_title = 'Unknown title' | ||||
assert !page.save | ||||
|
r2430 | assert_equal I18n.translate('activerecord.errors.messages.invalid'), page.errors.on(:parent_title) | ||
|
r1689 | # A child page | ||
page.parent_title = 'Page_with_an_inline_image' | ||||
assert !page.save | ||||
|
r2430 | assert_equal I18n.translate('activerecord.errors.messages.circular_dependency'), page.errors.on(:parent_title) | ||
|
r1689 | # The page itself | ||
page.parent_title = 'CookBook_documentation' | ||||
assert !page.save | ||||
|
r2430 | assert_equal I18n.translate('activerecord.errors.messages.circular_dependency'), page.errors.on(:parent_title) | ||
|
r1689 | |||
page.parent_title = 'Another_page' | ||||
assert page.save | ||||
end | ||||
|
r5691 | |||
|
r537 | def test_destroy | ||
page = WikiPage.find(1) | ||||
page.destroy | ||||
assert_nil WikiPage.find_by_id(1) | ||||
# make sure that page content and its history are deleted | ||||
assert WikiContent.find_all_by_page_id(1).empty? | ||||
assert WikiContent.versioned_class.find_all_by_page_id(1).empty? | ||||
end | ||||
|
r5691 | |||
|
r2584 | def test_destroy_should_not_nullify_children | ||
page = WikiPage.find(2) | ||||
child_ids = page.child_ids | ||||
assert child_ids.any? | ||||
page.destroy | ||||
assert_nil WikiPage.find_by_id(2) | ||||
|
r5691 | |||
|
r2584 | children = WikiPage.find_all_by_id(child_ids) | ||
assert_equal child_ids.size, children.size | ||||
children.each do |child| | ||||
assert_nil child.parent_id | ||||
end | ||||
end | ||||
|
r5691 | |||
|
r4978 | def test_updated_on_eager_load | ||
page = WikiPage.with_updated_on.first | ||||
assert page.is_a?(WikiPage) | ||||
assert_not_nil page.read_attribute(:updated_on) | ||||
assert_equal page.content.updated_on, page.updated_on | ||||
end | ||||
|
r320 | end | ||