summaryrefslogtreecommitdiff
path: root/test/models/node_test.rb
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-06-25 17:51:45 +0200
committererdgeist <erdgeist@erdgeist.org>2026-06-25 17:51:45 +0200
commit0818a3057b0a91e422158d828026c941b4e10622 (patch)
tree9ed98d52bd577d3f36dd7a1ce8048d280a36062e /test/models/node_test.rb
parent26030c71c7b300c30367222f263d74b8d2142ecf (diff)
Rails 5.2 test updates
- Rename test/functional → test/controllers, test/unit → test/models - Remove test/performance/browsing_test.rb (performance_test_help removed) - Fix use_transactional_fixtures → use_transactional_tests - Remove use_instantiated_fixtures (removed in Rails 5) - Fix ActiveRecord::Fixtures → FixtureSet - Fix controller test params syntax: add params: {} wrapper throughout - Fix assert_select targets for aggregator test - Fix test_update_a_draft_with_changing_the_template: draft → head - Add test_node.reload after children.create! (awesome_nested_set bug) - Add before/after count pattern for create tests (transactional isolation) - Known failures: 5 tests affected by Rails 5 transactional test isolation
Diffstat (limited to 'test/models/node_test.rb')
-rw-r--r--test/models/node_test.rb290
1 files changed, 290 insertions, 0 deletions
diff --git a/test/models/node_test.rb b/test/models/node_test.rb
new file mode 100644
index 0000000..514ba3f
--- /dev/null
+++ b/test/models/node_test.rb
@@ -0,0 +1,290 @@
1require 'test_helper'
2
3class NodeTest < ActiveSupport::TestCase
4
5 def setup
6 @root = Node.find(1)
7 @first_child = Node.find(2)
8 @first_child.pages.create! :title => "one"
9 @first_child.draft = @first_child.pages.last
10 @first_child.save
11 @second_child = Node.find(3)
12 @second_child.pages.create! :title => "one"
13
14 @user1 = User.create :login => 'demo', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar'
15 @user2 = User.create :login => 'show', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar'
16 end
17
18 test "can only create one root node" do
19 Node.delete_all
20 Node.create! :slug => :root
21 assert_raise(ActiveRecord::RecordInvalid) do
22 Node.create! :slug => :root
23 end
24 end
25
26 def test_returning_existing_drafts
27 test_node = Node.root.children.create! :slug => "test_node"
28
29 assert_not_nil test_node.draft
30 assert_equal 1, test_node.pages.length
31 assert_nil test_node.draft.user
32
33 3.times do
34 test_node.find_or_create_draft @user1
35 end
36
37 assert_equal 1, test_node.pages.length
38 end
39
40 def test_user_gets_assigned_to_unlocked_draft
41 assert_not_nil @first_child.draft
42 assert_nil @first_child.draft.user
43 @first_child.find_or_create_draft @user1
44 assert_equal @user1, @first_child.lock_owner
45 end
46
47 def test_unique_path_returns_an_array
48 assert_equal ["first_child"], @first_child.unique_path
49 new_node = @first_child.children.create! :slug => "third_child"
50 assert_equal ["first_child", "third_child"], new_node.unique_path
51 end
52
53 def test_specifying_a_revision_other_than_with_a_fixnum_raises_exception
54 assert_raise(ArgumentError) { Node.find_page "first_child", 1.9 }
55 assert_raise(ArgumentError) { Node.find_page "first_child", "1" }
56 assert_raise(ArgumentError) { Node.find_page "first_child", :head }
57 end
58
59 def test_publish_draft_on_a_node_without_a_draft_returns_nil
60
61 assert @first_child.publish_draft!
62 assert_nil @first_child.publish_draft!
63 end
64
65 def test_cloning_a_head_page_to_a_new_draft_with_translations
66 assert_not_nil draft = @first_child.draft
67 I18n.locale = :de
68 draft.title = "Hallo"
69 draft.abstract = "Bitte"
70 draft.body = "Danke"
71 draft.save
72 I18n.locale = :en
73 draft.title = "Hello"
74 draft.abstract = "Please"
75 draft.body = "Thanks"
76 draft.save
77
78 @first_child.publish_draft!
79
80 draft1 = @first_child.find_or_create_draft(@user1)
81
82 I18n.locale = :de
83 assert_equal "Hallo", draft1.title
84 assert_equal "Bitte", draft1.abstract
85 assert_equal "Danke", draft1.body
86
87 I18n.locale = :en
88 assert_equal "Hello", draft1.title
89 assert_equal "Please", draft1.abstract
90 assert_equal "Thanks", draft1.body
91 end
92
93 def test_created_nodes_have_an_empty_draft_and_no_head
94 node = Node.root.children.create! :slug => "third_child_beta"
95
96 assert !node.pages.empty?
97 assert_equal 1, node.pages.length
98 assert_not_nil node.draft
99 assert_nil node.draft.user
100 assert_nil node.head
101 end
102
103 def test_create_new_draft_of_published_page
104 node = Node.root.children.create :slug => "xyz"
105 assert node.publish_draft!
106 end
107
108 def test_find_or_create_draft_if_no_draft_exists
109 node = Node.root.children.create :slug => "xyz"
110 node.publish_draft!
111 assert_not_nil node.find_or_create_draft( @user1 )
112 end
113
114 def test_find_or_create_draft_if_draft_exists_and_is_owned_by_user
115 node = Node.root.children.create :slug => "xyz"
116 node.publish_draft!
117
118 node.find_or_create_draft @user1
119 node.find_or_create_draft @user1
120 end
121
122 def test_exception_if_draft_exists_but_locked_by_another_user
123 node = Node.root.children.create :slug => "xyz"
124 node.publish_draft!
125 node.find_or_create_draft @user1
126 assert_equal @user1, node.lock_owner
127 assert_raise(LockedByAnotherUser) do
128 node.find_or_create_draft @user2
129 end
130 end
131
132 def test_creation_of_unique_name
133 node = Node.root.children.create :slug => 'child'
134 node.reload
135 assert_equal 'child', node.unique_name
136
137 node = @first_child.children.create :slug => 'deep_child'
138 node.reload
139 assert_equal 'first_child/deep_child', node.unique_name
140 end
141
142 def test_order_of_pages_by_revision
143 # This test should make sure the order is the same on different db's
144 # Remember, there is already an empty draft
145 two = @second_child.pages.create :title => "two"
146 three = @second_child.pages.create :title => "three"
147 four = @second_child.pages.create :title => "four"
148
149 @second_child.pages.reload
150
151 assert_equal [1,2,3,4], @second_child.pages.map { |x| x.revision }
152 end
153
154 def test_behavior_of_acts_as_list
155 two = @second_child.pages.create :title => "two"
156 three = @second_child.pages.create :title => "three"
157 four = @second_child.pages.create :title => "four"
158
159 assert_equal 2, two.revision
160 assert_equal 3, three.revision
161 assert_equal 4, four.revision
162
163 assert_equal four, @second_child.pages.last
164
165 assert two.move_to_bottom
166
167 two.reload; three.reload; four.reload;
168
169 assert_equal 4, two.revision
170 assert_equal 2, three.revision
171 assert_equal 3, four.revision
172 end
173
174 def test_retrieving_page_current
175 updates = Node.root.children.create(:slug => 'updates')
176 year = updates.children.create(:slug => '2008')
177 foo = year.children.create(:slug => 'foo')
178
179 assert_not_nil Node.find_by_unique_name('updates/2008/foo')
180
181 # Note that there is already an initial, blank revision
182 foo.pages.create :title => "Version 2"
183 foo.pages.create :title => "Version 3"
184 foo.pages.create :title => "Version 4"
185
186 foo.head = foo.pages.last
187 foo.save!
188
189 page = Node.find_page("updates/2008/foo")
190 assert_equal page, foo.pages.find_by_revision(4)
191 end
192
193 def test_retrieving_page_by_revision
194 updates = Node.root.children.create(:slug => 'updates')
195 year = updates.children.create(:slug => '2008')
196 foo = year.children.create(:slug => 'foo')
197
198 assert_not_nil Node.find_by_unique_name('updates/2008/foo')
199
200 # Note that there is already an initial, blank revision
201 foo.pages.create :title => "Version 2"
202 foo.pages.create :title => "Version 3"
203 foo.pages.create :title => "Version 4"
204
205 page = Node.find_page("updates/2008/foo", 2)
206 assert_equal "Version 2", page.title
207 end
208
209 # Thats a lengthy test to make sure everything works as it should, it was
210 # created during a bug hunt
211 def test_creating_new_draft
212 test_node = Node.root.children.create! :slug => "test_node"
213 test_node.draft.user = @user1
214 test_node.save
215 assert test_node.publish_draft!
216 test_node.reload
217 assert_equal 1, test_node.pages.length
218 assert_not_nil test_node.head
219 assert_nil test_node.draft
220 test_node.find_or_create_draft @user1
221 test_node.reload
222 assert_equal 2, test_node.pages.length
223 assert_not_nil test_node.draft
224 assert test_node.head != test_node.draft
225 end
226
227 test "restoring a revision" do
228 test_node = Node.root.children.create! :slug => "test_node"
229 create_revisions( test_node, 3 )
230 test_node.find_or_create_draft @user1
231 test_node.reload
232
233 assert_equal 4, test_node.pages.count
234 assert_equal 3, test_node.head.revision
235
236 test_node.restore_revision!(1)
237 assert_equal 1, test_node.head.revision
238 assert_equal 4, test_node.draft.revision
239 end
240
241 test "a new revision keeps the initial user" do
242 Node.root.descendants.destroy_all
243 node = create_node_with_draft
244 draft = node.draft
245 draft.user = users(:aaron)
246 draft.save
247 node.publish_draft!
248 new_draft = node.find_or_create_draft( users(:quentin) )
249 assert_equal "aaron", new_draft.user.login
250 end
251
252 test "a new revision can overwrite the initial author" do
253 Node.root.descendants.destroy_all
254 node = create_node_with_draft
255 draft = node.draft
256 draft.user = users(:aaron)
257 draft.save!
258 node.publish_draft!
259 new_draft = node.find_or_create_draft( users(:quentin) )
260 new_draft.user_id = users(:quentin).id
261 new_draft.save
262 node.publish_draft!
263 assert_equal "quentin", node.head.user.login
264 end
265
266
267 test "update?" do
268 Node.root.descendants.delete_all
269 updates = Node.root.children.create!( :slug => "updates" )
270 assert !updates.update?
271
272 updates2009 = updates.children.create!( :slug => "2009" )
273 assert !updates2009.update?
274
275 update = updates2009.children.create!( :slug => "my-first-update" )
276 assert update.update?
277 end
278
279 test "new nodes should have drafts with no publidhed_at set" do
280 node = Node.root.children.create( :slug => "wow" )
281 assert_nil node.draft.published_at
282 end
283
284 def create_revisions node, count
285 count.times do
286 node.find_or_create_draft @user1
287 node.publish_draft!
288 end
289 end
290end