summaryrefslogtreecommitdiff
path: root/test/controllers/nodes_controller_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/controllers/nodes_controller_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/controllers/nodes_controller_test.rb')
-rw-r--r--test/controllers/nodes_controller_test.rb382
1 files changed, 382 insertions, 0 deletions
diff --git a/test/controllers/nodes_controller_test.rb b/test/controllers/nodes_controller_test.rb
new file mode 100644
index 0000000..53799f1
--- /dev/null
+++ b/test/controllers/nodes_controller_test.rb
@@ -0,0 +1,382 @@
1require 'test_helper'
2
3class NodesControllerTest < ActionController::TestCase
4
5 def test_get_index
6 Node.root.descendants.delete_all
7 test_node = Node.root.children.create :slug => "foo"
8 login_as :quentin
9 get :index
10 assert_response :success
11 end
12
13 def test_new
14 login_as :quentin
15 get :new
16 assert_response :success
17 end
18
19 test "create generic node with parent_id provided" do
20 login_as :quentin
21 before_count = Node.count
22 post(
23 :create,
24 params: {
25 :kind => "generic",
26 :parent_id => Node.root.id,
27 :title => "Hello Spaceboy"
28 }
29 )
30 assert_response :redirect
31 assert_equal before_count + 1, Node.count
32 assert_equal "hello-spaceboy", Node.last.slug
33 assert_equal Node.last.parent_id, Node.root.id
34 assert_equal 1, Node.last.level
35 end
36
37 test "create update node" do
38 login_as :quentin
39 post(
40 :create,
41 params: {
42 :kind => "update",
43 :title => "Hello Spaceboy"
44 }
45 )
46 assert_response :redirect
47 end
48
49 test "create top level node" do
50 login_as :quentin
51 before_count = Node.count
52 post(
53 :create,
54 params: {
55 :kind => "top_level",
56 :title => "Hello My Spaceboy"
57 }
58 )
59 assert_response :redirect
60 assert_equal before_count + 1, Node.count
61 expected = "hello-my-spaceboy"
62 assert_equal expected, Node.last.unique_name
63 assert_equal 1, Node.last.level
64 end
65
66 test "creating a top_level node without a title should not work" do
67 login_as :quentin
68
69 assert_no_difference "Node.count" do
70 post(:create, params: { :kind => "top_level" } )
71 end
72 end
73
74 test "creating a generic node without a parent_id should not work" do
75 login_as :quentin
76
77 assert_no_difference "Node.count" do
78 post(:create, params: { :kind => "generic" } )
79 end
80 end
81
82 test "editing a node" do
83 login_as :quentin
84
85 node = Node.find_by_unique_name("fourth_child")
86 node.pages.create
87 node.draft = node.pages.last
88 node.save
89
90 assert_equal 1, node.pages.length
91
92 draft = node.find_or_create_draft( User.first )
93 draft.title = "Hello"
94 draft.body = "World"
95 draft.save
96 node.publish_draft!
97
98 get :edit, params: { :id => node.id }
99 assert_response :success
100 assert_select("#page_title[value='Hello']")
101 assert_select("#page_body", "World")
102
103 node.reload
104 assert_equal 2, node.pages.length
105 assert_equal "Hello", node.find_or_create_draft( User.first ).title
106 assert_equal "World", node.find_or_create_draft( User.first ).body
107 end
108
109 test "editing a locked node raises LockedByAnotherUser Exception" do
110 login_as :quentin
111
112 node = create_node_with_draft
113 node.lock_owner = User.last
114 node.save
115
116 assert node.locked?
117
118 get :edit, params: { :id => node.id }
119 assert_response :redirect
120 assert flash[:error] =~ /Page is locked by another user/
121 end
122
123 def test_update_a_draft
124 test_node = Node.root.children.create! :slug => "test_node"
125 login_as :quentin
126 put :update, params: { :id => test_node.id, :page => {:title => "Hello", :body => "There"} }
127 test_node.reload
128 assert_equal "Hello", test_node.draft.title
129 assert_equal "There", test_node.draft.body
130 end
131
132 def test_update_a_draft_with_changing_the_template
133 test_node = Node.root.children.create! :slug => "test_node"
134
135 login_as :quentin
136 put :update, params: {
137 :id => test_node.id,
138 :page => {
139 :title => "Hello",
140 :body => "There",
141 :template_name => "Foobar"
142 }
143 }
144
145 put :publish, params: { :id => test_node.id }
146 test_node.reload
147 assert_equal "Hello", test_node.head.title
148 assert_equal "There", test_node.head.body
149 assert_equal "Foobar", test_node.head.template_name
150 end
151
152 test "publish draft with staged_slug unqueal slug" do
153 login_as :quentin
154
155 test_node = Node.root.children.create! :slug => "test_node", :staged_slug => "peter_pan"
156
157 put :publish, params: { :id => test_node.id }
158
159 test_node.reload
160 assert_equal "peter_pan", test_node.slug
161 assert_equal "peter_pan", test_node.unique_name
162 end
163
164 test "publish draft with staged_slug with more levels of nodes" do
165 login_as :quentin
166
167 test_node = Node.root.children.create! :slug => "test_node", :staged_slug => "peter_pan"
168 test_node2 = test_node.children.create! :slug => "test_node2"
169
170 put :publish, params: { :id => test_node.id }
171
172 test_node.reload; test_node2.reload
173 assert_equal "peter_pan/test_node2", test_node2.unique_name
174 assert_equal "peter_pan", test_node.unique_name
175 end
176
177 test "publish draft with staged_parent_id" do
178 login_as :quentin
179
180 parent = Node.root.children.create! :slug => "parent"
181 test_node = Node.root.children.create! :slug => "test_node", :staged_parent_id => parent.id
182 test_node2 = test_node.children.create! :slug => "test_node2"
183
184 put :publish, params: { :id => test_node.id }
185
186 test_node.reload; test_node2.reload
187 assert_equal "parent/test_node", test_node.unique_name
188 assert_equal "parent/test_node/test_node2", test_node2.unique_name
189 end
190
191 test "publish draft with staged_parent_id and staged_slug" do
192 login_as :quentin
193
194 parent = Node.root.children.create! :slug => "parent"
195
196 test_node = Node.root.children.create!(
197 :slug => "test_node",
198 :staged_parent_id => parent.id,
199 :staged_slug => "peter_pan"
200 )
201
202 test_node2 = test_node.children.create! :slug => "test_node2"
203
204 put :publish, params: { :id => test_node.id }
205
206 test_node.reload; test_node2.reload
207 assert_equal "parent/peter_pan", test_node.unique_name
208 assert_equal "parent/peter_pan/test_node2", test_node2.unique_name
209 end
210
211 test "show node with empty draft" do
212 login_as :quentin
213 assert_not_nil node = create_node_with_draft
214 get :show, params: { :id => node.id }
215 assert_response :success
216 end
217
218 test "show node with published draft" do
219 login_as :quentin
220 node = create_node_with_published_page
221 get :show, params: { :id => node.id }
222 assert_response :success
223 assert_select "td", :text => "Test", :count => 3
224 end
225
226 test "unlocking a locked node" do
227 login_as :quentin
228 node = create_node_with_published_page
229 node.find_or_create_draft User.first
230
231 assert node.locked?
232
233 put :unlock, params: { :id => node.id }
234 assert_response :redirect
235 assert !node.reload.locked?
236 end
237
238 test "unlocking an already unlocked node" do
239 login_as :quentin
240 node = create_node_with_published_page
241
242 put :unlock, params: { :id => node.id }
243 assert_response :redirect
244 assert_equal "Already unlocked", flash[:notice]
245 end
246
247 test "updating a node by changing its parent" do
248 Node.root.descendants.destroy_all
249 login_as :quentin
250 node = create_node_with_published_page
251 node.find_or_create_draft User.first
252
253 other_node = Node.root.children.create( :slug => "other" )
254
255 node.staged_parent_id = other_node.id
256 node.publish_draft!
257
258 assert Node.valid?
259 end
260
261 test "editing the initial draft sets the author to current_user" do
262 login_as :quentin
263 Node.root.descendants.destroy_all
264 node = create_node_with_draft
265 get :edit, params: { :id => node.id }
266 node.reload
267 assert_equal "quentin", node.draft.user.login
268 end
269
270 test "updating the author of a node with existing head" do
271 login_as :quentin
272 Node.root.descendants.destroy_all
273 node = create_node_with_published_page
274 assert_equal "quentin", node.head.user.login
275 node.find_or_create_draft users(:quentin)
276 assert node.draft.valid?
277 assert node.valid?
278
279 put :update, params: { :id => node.id, :page => {:user_id => users(:aaron).id} }
280 assert_response :redirect
281 assert_equal "aaron", node.reload.draft.user.login
282 end
283
284 test "updating an existing page should not modify published_at" do
285 login_as :quentin
286 Node.root.descendants.destroy_all
287 node = create_node_with_published_page
288
289 get :edit, params: { :id => node.id }
290 assert_response :success
291
292 put :publish, params: { :id => node.id }
293
294 node.reload
295 assert_equal node.pages[0].published_at, node.pages[1].published_at
296 end
297
298 test "updating an exisiting page should not alter the author" do
299 login_as :aaron
300 Node.root.descendants.destroy_all
301 node = create_node_with_published_page
302 get :edit, params: { :id => node.id }
303
304 put :publish, params: { :id => node.id }
305
306 node.reload
307 assert_equal node.pages[0].user, node.pages[1].user
308 end
309
310 test "editor and author are the same on a new node" do
311 login_as :quentin
312 node = create_node_with_draft
313 get :edit, params: { :id => node.id }
314
315 node.reload
316 assert_equal "quentin", node.draft.user.login
317 assert_equal "quentin", node.draft.editor.login
318 end
319
320 test "creating new draft alters the editor but keeps the author" do
321 node = create_node_with_published_page
322 assert_equal "quentin", node.head.user.login
323
324 login_as :aaron
325 get :edit, params: {:id => node.id }
326
327 node.reload
328 assert_equal "quentin", node.head.user.login
329 assert_equal "aaron", node.draft.editor.login
330 end
331
332 test "unlocking and relocking changes editor if done by another user" do
333 node = create_node_with_published_page
334 draft = node.find_or_create_draft users(:quentin)
335 assert_equal draft.user.login, draft.editor.login
336 assert node.locked?
337 node.unlock!
338
339 login_as :aaron
340 get :edit, params: { :id => node.id }
341
342 node.reload
343 assert_equal "quentin", node.draft.user.login
344 assert_equal "aaron", node.draft.editor.login
345 end
346
347 test "destroy a published node" do
348 node = create_node_with_published_page
349 node.destroy
350
351 login_as :quentin
352 get :index
353 end
354
355 test "no dangling pages remain after node removal" do
356 node = create_node_with_published_page
357 page_id = node.pages.first.id
358 node.destroy
359
360 assert_raises(ActiveRecord::RecordNotFound) do
361 assert Page.find page_id
362 end
363 end
364
365 test "can remove a node with an event" do
366 node = create_node_with_published_page
367 Event.create!(
368 :start_time => "2009-01-01T15:23:42".to_time,
369 :end_time => "2009-01-01T20:05:23".to_time,
370 :url => "http://events.ccc.de/congress/2082",
371 :latitude => 52.525308,
372 :longitude => 13.378944,
373 :allday => true,
374 :node_id => node.id
375 )
376 node.destroy
377
378 login_as :quentin
379 get :index
380 end
381
382end