summaryrefslogtreecommitdiff
path: root/test/models/node_test.rb
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-14 14:31:18 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-14 14:31:18 +0200
commitcca0e57b21d506cd341b927984bcb68f0e461783 (patch)
tree2d49cf1b678a3f5cf0fd20cd214b20524027ec50 /test/models/node_test.rb
parent6b302d263ac66b521a743f1e8e1cc82997b54b5d (diff)
Retire wipe_draft! and find_or_create_draft from production code
Both had already lost their reason to exist as production API: wipe_draft!'s one remaining callsite (nodes#show) was removed two sessions ago, and find_or_create_draft had zero production callers left at all -- confirmed by a fresh grep, not assumed -- every one of its ~65 call sites was test setup, unrelated to what those tests actually cover. wipe_draft! is deleted outright, along with its two tests -- the lock/draft/autosave cleanup it silently performed already has explicit, always-visible manual equivalents (Unlock, Discard Autosave, Destroy Draft), so nothing real is lost. find_or_create_draft moves to test_helper.rb as a plain method on ActiveSupport::TestCase, alongside the create_node_with_draft/ create_node_with_published_page helpers already living there -- extending the framework's own designated test-extension point rather than reopening the Node model from test code. Its three tests of real dispatch behavior (idempotency on repeat calls, and raising when a second user contends for the lock) are kept, since ~65 other tests depend on this helper actually working correctly; only the call syntax changed, from node.find_or_create_draft(user) to find_or_create_draft(node, user).
Diffstat (limited to 'test/models/node_test.rb')
-rw-r--r--test/models/node_test.rb63
1 files changed, 19 insertions, 44 deletions
diff --git a/test/models/node_test.rb b/test/models/node_test.rb
index 91a4a6d..959387d 100644
--- a/test/models/node_test.rb
+++ b/test/models/node_test.rb
@@ -31,7 +31,7 @@ class NodeTest < ActiveSupport::TestCase
31 assert_nil test_node.draft.user 31 assert_nil test_node.draft.user
32 32
33 3.times do 33 3.times do
34 test_node.find_or_create_draft @user1 34 find_or_create_draft(test_node, @user1)
35 end 35 end
36 36
37 assert_equal 1, test_node.pages.length 37 assert_equal 1, test_node.pages.length
@@ -40,7 +40,7 @@ class NodeTest < ActiveSupport::TestCase
40 def test_user_gets_assigned_to_unlocked_draft 40 def test_user_gets_assigned_to_unlocked_draft
41 assert_not_nil @first_child.draft 41 assert_not_nil @first_child.draft
42 assert_nil @first_child.draft.user 42 assert_nil @first_child.draft.user
43 @first_child.find_or_create_draft @user1 43 find_or_create_draft(@first_child, @user1)
44 assert_equal @user1, @first_child.lock_owner 44 assert_equal @user1, @first_child.lock_owner
45 end 45 end
46 46
@@ -77,7 +77,7 @@ class NodeTest < ActiveSupport::TestCase
77 77
78 @first_child.publish_draft! 78 @first_child.publish_draft!
79 79
80 draft1 = @first_child.find_or_create_draft(@user1) 80 draft1 = find_or_create_draft(@first_child, @user1)
81 81
82 I18n.locale = :de 82 I18n.locale = :de
83 assert_equal "Hallo", draft1.title 83 assert_equal "Hallo", draft1.title
@@ -109,15 +109,15 @@ class NodeTest < ActiveSupport::TestCase
109 def test_find_or_create_draft_if_no_draft_exists 109 def test_find_or_create_draft_if_no_draft_exists
110 node = Node.root.children.create :slug => "xyz" 110 node = Node.root.children.create :slug => "xyz"
111 node.publish_draft! 111 node.publish_draft!
112 assert_not_nil node.find_or_create_draft( @user1 ) 112 assert_not_nil find_or_create_draft(node, @user1)
113 end 113 end
114 114
115 def test_find_or_create_draft_if_draft_exists_and_is_owned_by_user 115 def test_find_or_create_draft_if_draft_exists_and_is_owned_by_user
116 node = Node.root.children.create :slug => "xyz" 116 node = Node.root.children.create :slug => "xyz"
117 node.publish_draft! 117 node.publish_draft!
118 118
119 first_call = node.find_or_create_draft @user1 119 first_call = find_or_create_draft(node, @user1)
120 second_call = node.find_or_create_draft @user1 120 second_call = find_or_create_draft(node, @user1)
121 121
122 assert_equal first_call, second_call 122 assert_equal first_call, second_call
123 assert_equal 2, node.pages.count 123 assert_equal 2, node.pages.count
@@ -127,10 +127,10 @@ class NodeTest < ActiveSupport::TestCase
127 def test_exception_if_draft_exists_but_locked_by_another_user 127 def test_exception_if_draft_exists_but_locked_by_another_user
128 node = Node.root.children.create :slug => "xyz" 128 node = Node.root.children.create :slug => "xyz"
129 node.publish_draft! 129 node.publish_draft!
130 node.find_or_create_draft @user1 130 find_or_create_draft(node, @user1)
131 assert_equal @user1, node.lock_owner 131 assert_equal @user1, node.lock_owner
132 assert_raise(LockedByAnotherUser) do 132 assert_raise(LockedByAnotherUser) do
133 node.find_or_create_draft @user2 133 find_or_create_draft(node, @user2)
134 end 134 end
135 end 135 end
136 136
@@ -222,7 +222,7 @@ class NodeTest < ActiveSupport::TestCase
222 assert_equal 1, test_node.pages.length 222 assert_equal 1, test_node.pages.length
223 assert_not_nil test_node.head 223 assert_not_nil test_node.head
224 assert_nil test_node.draft 224 assert_nil test_node.draft
225 test_node.find_or_create_draft @user1 225 find_or_create_draft(test_node, @user1)
226 test_node.reload 226 test_node.reload
227 assert_equal 2, test_node.pages.length 227 assert_equal 2, test_node.pages.length
228 assert_not_nil test_node.draft 228 assert_not_nil test_node.draft
@@ -232,7 +232,7 @@ class NodeTest < ActiveSupport::TestCase
232 test "restoring a revision" do 232 test "restoring a revision" do
233 test_node = Node.root.children.create! :slug => "test_node" 233 test_node = Node.root.children.create! :slug => "test_node"
234 create_revisions( test_node, 3 ) 234 create_revisions( test_node, 3 )
235 test_node.find_or_create_draft @user1 235 find_or_create_draft(test_node, @user1)
236 test_node.reload 236 test_node.reload
237 237
238 assert_equal 4, test_node.pages.count 238 assert_equal 4, test_node.pages.count
@@ -250,7 +250,7 @@ class NodeTest < ActiveSupport::TestCase
250 draft.user = users(:aaron) 250 draft.user = users(:aaron)
251 draft.save 251 draft.save
252 node.publish_draft! 252 node.publish_draft!
253 new_draft = node.find_or_create_draft( users(:quentin) ) 253 new_draft = find_or_create_draft(node, users(:quentin))
254 assert_equal "aaron", new_draft.user.login 254 assert_equal "aaron", new_draft.user.login
255 end 255 end
256 256
@@ -261,7 +261,7 @@ class NodeTest < ActiveSupport::TestCase
261 draft.user = users(:aaron) 261 draft.user = users(:aaron)
262 draft.save! 262 draft.save!
263 node.publish_draft! 263 node.publish_draft!
264 new_draft = node.find_or_create_draft( users(:quentin) ) 264 new_draft = find_or_create_draft(node, users(:quentin))
265 new_draft.user_id = users(:quentin).id 265 new_draft.user_id = users(:quentin).id
266 new_draft.save 266 new_draft.save
267 node.publish_draft! 267 node.publish_draft!
@@ -359,31 +359,6 @@ class NodeTest < ActiveSupport::TestCase
359 assert_equal @user1, node.reload.lock_owner 359 assert_equal @user1, node.reload.lock_owner
360 end 360 end
361 361
362 test "wipe_draft! leaves a fresh autosave and its lock untouched" do
363 node = create_node_with_published_page
364 node.lock_for_editing!(@user1)
365 node.autosave!({ :title => "still typing" }, @user1)
366
367 node.wipe_draft!
368 node.reload
369
370 assert_not_nil node.autosave
371 assert_equal @user1, node.lock_owner
372 end
373
374 test "wipe_draft! destroys a stale, orphaned autosave and releases its lock" do
375 node = create_node_with_published_page
376 node.lock_for_editing!(@user1)
377 node.autosave!({ :title => "abandoned mid-session" }, @user1)
378 node.autosave.update_column(:updated_at, 2.days.ago)
379
380 node.wipe_draft!
381 node.reload
382
383 assert_nil node.autosave
384 assert_nil node.lock_owner
385 end
386
387 test "revert! is a safe no-op on a fresh node with only a draft" do 362 test "revert! is a safe no-op on a fresh node with only a draft" do
388 node = create_node_with_draft 363 node = create_node_with_draft
389 node.lock_for_editing!(@user1) 364 node.lock_for_editing!(@user1)
@@ -473,7 +448,7 @@ class NodeTest < ActiveSupport::TestCase
473 448
474 def create_revisions node, count 449 def create_revisions node, count
475 count.times do 450 count.times do
476 node.find_or_create_draft @user1 451 find_or_create_draft(node, @user1)
477 node.publish_draft! 452 node.publish_draft!
478 end 453 end
479 end 454 end
@@ -514,7 +489,7 @@ class NodeTest < ActiveSupport::TestCase
514 489
515 test "editor_search matches a partial substring, not just a whole word" do 490 test "editor_search matches a partial substring, not just a whole word" do
516 node = Node.root.children.create!(:slug => "editor_search_substring_test") 491 node = Node.root.children.create!(:slug => "editor_search_substring_test")
517 node.find_or_create_draft(@user1) 492 find_or_create_draft(node, @user1)
518 node.draft.update(:title => "Biometrics Conference") 493 node.draft.update(:title => "Biometrics Conference")
519 node.publish_draft! 494 node.publish_draft!
520 495
@@ -530,7 +505,7 @@ class NodeTest < ActiveSupport::TestCase
530 505
531 test "editor_search requires every word to match, but each word can match a different field" do 506 test "editor_search requires every word to match, but each word can match a different field" do
532 node = Node.root.children.create!(:slug => "editor_search_multiword_test") 507 node = Node.root.children.create!(:slug => "editor_search_multiword_test")
533 node.find_or_create_draft(@user1) 508 find_or_create_draft(node, @user1)
534 node.draft.update(:title => "Backspace e.V. Bamberg", :abstract => "Spiegelgraben 41, 96052 Bamberg") 509 node.draft.update(:title => "Backspace e.V. Bamberg", :abstract => "Spiegelgraben 41, 96052 Bamberg")
535 node.publish_draft! 510 node.publish_draft!
536 511
@@ -540,9 +515,9 @@ class NodeTest < ActiveSupport::TestCase
540 515
541 test "drafts_and_autosaves without a user sorts by recency only" do 516 test "drafts_and_autosaves without a user sorts by recency only" do
542 older = Node.root.children.create!(:slug => "drafts_order_older") 517 older = Node.root.children.create!(:slug => "drafts_order_older")
543 older.find_or_create_draft(@user1) 518 find_or_create_draft(older, @user1)
544 newer = Node.root.children.create!(:slug => "drafts_order_newer") 519 newer = Node.root.children.create!(:slug => "drafts_order_newer")
545 newer.find_or_create_draft(@user1) 520 find_or_create_draft(newer, @user1)
546 521
547 result = Node.drafts_and_autosaves.to_a 522 result = Node.drafts_and_autosaves.to_a
548 assert result.index(newer) < result.index(older) 523 assert result.index(newer) < result.index(older)
@@ -564,7 +539,7 @@ class NodeTest < ActiveSupport::TestCase
564 539
565 test "recently_changed includes a node whose head was recently published" do 540 test "recently_changed includes a node whose head was recently published" do
566 node = Node.root.children.create!(:slug => "recent_changed_published") 541 node = Node.root.children.create!(:slug => "recent_changed_published")
567 node.find_or_create_draft(@user1) 542 find_or_create_draft(node, @user1)
568 node.autosave!({:title => "v1"}, @user1) 543 node.autosave!({:title => "v1"}, @user1)
569 node.save_draft!(@user1) 544 node.save_draft!(@user1)
570 node.publish_draft! 545 node.publish_draft!
@@ -574,7 +549,7 @@ class NodeTest < ActiveSupport::TestCase
574 549
575 test "recently_changed excludes a node only touched by locking or unlocking after an old publish" do 550 test "recently_changed excludes a node only touched by locking or unlocking after an old publish" do
576 node = Node.root.children.create!(:slug => "recent_changed_lock_only") 551 node = Node.root.children.create!(:slug => "recent_changed_lock_only")
577 node.find_or_create_draft(@user1) 552 find_or_create_draft(node, @user1)
578 node.autosave!({:title => "v1"}, @user1) 553 node.autosave!({:title => "v1"}, @user1)
579 node.save_draft!(@user1) 554 node.save_draft!(@user1)
580 node.publish_draft! 555 node.publish_draft!