To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / .svn / pristine / ac / ac3a2ee58099c23648eac79beac2eb4ee2a7c013.svn-base @ 1297:0a574315af3e

History | View | Annotate | Download (5.65 KB)

1 1296:038ba2d95de8 Chris
# Redmine - project management software
2
# Copyright (C) 2006-2012  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17
18
require File.expand_path('../../test_helper', __FILE__)
19
20
class WikiPageTest < ActiveSupport::TestCase
21
  fixtures :projects, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
22
23
  def setup
24
    @wiki = Wiki.find(1)
25
    @page = @wiki.pages.first
26
  end
27
28
  def test_create
29
    page = WikiPage.new(:wiki => @wiki)
30
    assert !page.save
31
    assert_equal 1, page.errors.count
32
33
    page.title = "Page"
34
    assert page.save
35
    page.reload
36
    assert !page.protected?
37
38
    @wiki.reload
39
    assert @wiki.pages.include?(page)
40
  end
41
42
  def test_sidebar_should_be_protected_by_default
43
    page = @wiki.find_or_new_page('sidebar')
44
    assert page.new_record?
45
    assert page.protected?
46
  end
47
48
  def test_find_or_new_page
49
    page = @wiki.find_or_new_page("CookBook documentation")
50
    assert_kind_of WikiPage, page
51
    assert !page.new_record?
52
53
    page = @wiki.find_or_new_page("Non existing page")
54
    assert_kind_of WikiPage, page
55
    assert page.new_record?
56
  end
57
58
  def test_parent_title
59
    page = WikiPage.find_by_title('Another_page')
60
    assert_nil page.parent_title
61
62
    page = WikiPage.find_by_title('Page_with_an_inline_image')
63
    assert_equal 'CookBook documentation', page.parent_title
64
  end
65
66
  def test_assign_parent
67
    page = WikiPage.find_by_title('Another_page')
68
    page.parent_title = 'CookBook documentation'
69
    assert page.save
70
    page.reload
71
    assert_equal WikiPage.find_by_title('CookBook_documentation'), page.parent
72
  end
73
74
  def test_unassign_parent
75
    page = WikiPage.find_by_title('Page_with_an_inline_image')
76
    page.parent_title = ''
77
    assert page.save
78
    page.reload
79
    assert_nil page.parent
80
  end
81
82
  def test_parent_validation
83
    page = WikiPage.find_by_title('CookBook_documentation')
84
85
    # A page that doesn't exist
86
    page.parent_title = 'Unknown title'
87
    assert !page.save
88
    assert_include I18n.translate('activerecord.errors.messages.invalid'),
89
                   page.errors[:parent_title]
90
    # A child page
91
    page.parent_title = 'Page_with_an_inline_image'
92
    assert !page.save
93
    assert_include I18n.translate('activerecord.errors.messages.circular_dependency'),
94
                   page.errors[:parent_title]
95
    # The page itself
96
    page.parent_title = 'CookBook_documentation'
97
    assert !page.save
98
    assert_include I18n.translate('activerecord.errors.messages.circular_dependency'),
99
                   page.errors[:parent_title]
100
    page.parent_title = 'Another_page'
101
    assert page.save
102
  end
103
104
  def test_destroy
105
    page = WikiPage.find(1)
106
    page.destroy
107
    assert_nil WikiPage.find_by_id(1)
108
    # make sure that page content and its history are deleted
109
    assert WikiContent.find_all_by_page_id(1).empty?
110
    assert WikiContent.versioned_class.find_all_by_page_id(1).empty?
111
  end
112
113
  def test_destroy_should_not_nullify_children
114
    page = WikiPage.find(2)
115
    child_ids = page.child_ids
116
    assert child_ids.any?
117
    page.destroy
118
    assert_nil WikiPage.find_by_id(2)
119
120
    children = WikiPage.find_all_by_id(child_ids)
121
    assert_equal child_ids.size, children.size
122
    children.each do |child|
123
      assert_nil child.parent_id
124
    end
125
  end
126
127
  def test_updated_on_eager_load
128
    page = WikiPage.with_updated_on.first(:order => 'id')
129
    assert page.is_a?(WikiPage)
130
    assert_not_nil page.read_attribute(:updated_on)
131
    assert_equal Time.gm(2007, 3, 6, 23, 10, 51), page.content.updated_on
132
    assert_equal page.content.updated_on, page.updated_on
133
    assert_not_nil page.read_attribute(:version)
134
  end
135
136
  def test_descendants
137
    page = WikiPage.create!(:wiki => @wiki, :title => 'Parent')
138
    child1 = WikiPage.create!(:wiki => @wiki, :title => 'Child1', :parent => page)
139
    child11 = WikiPage.create!(:wiki => @wiki, :title => 'Child11', :parent => child1)
140
    child111 = WikiPage.create!(:wiki => @wiki, :title => 'Child111', :parent => child11)
141
    child2 = WikiPage.create!(:wiki => @wiki, :title => 'Child2', :parent => page)
142
143
    assert_equal %w(Child1 Child11 Child111 Child2), page.descendants.map(&:title).sort
144
    assert_equal %w(Child1 Child11 Child111 Child2), page.descendants(nil).map(&:title).sort
145
    assert_equal %w(Child1 Child11 Child2), page.descendants(2).map(&:title).sort
146
    assert_equal %w(Child1 Child2), page.descendants(1).map(&:title).sort
147
148
    assert_equal %w(Child1 Child11 Child111 Child2 Parent), page.self_and_descendants.map(&:title).sort
149
    assert_equal %w(Child1 Child11 Child111 Child2 Parent), page.self_and_descendants(nil).map(&:title).sort
150
    assert_equal %w(Child1 Child11 Child2 Parent), page.self_and_descendants(2).map(&:title).sort
151
    assert_equal %w(Child1 Child2 Parent), page.self_and_descendants(1).map(&:title).sort
152
  end
153
154
  def test_diff_for_page_with_deleted_version_should_pick_the_previous_available_version
155
    WikiContent::Version.find_by_page_id_and_version(1, 2).destroy
156
157
    page = WikiPage.find(1)
158
    diff = page.diff(3)
159
    assert_not_nil diff
160
    assert_equal 3, diff.content_to.version
161
    assert_equal 1, diff.content_from.version
162
  end
163
end