diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-14 14:31:18 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-14 14:31:18 +0200 |
| commit | cca0e57b21d506cd341b927984bcb68f0e461783 (patch) | |
| tree | 2d49cf1b678a3f5cf0fd20cd214b20524027ec50 /test/models/node_test.rb | |
| parent | 6b302d263ac66b521a743f1e8e1cc82997b54b5d (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.rb | 63 |
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! |
