summaryrefslogtreecommitdiff
path: root/test/models/node_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/models/node_test.rb')
-rw-r--r--test/models/node_test.rb87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/models/node_test.rb b/test/models/node_test.rb
index bdf556d..2138c19 100644
--- a/test/models/node_test.rb
+++ b/test/models/node_test.rb
@@ -379,6 +379,93 @@ class NodeTest < ActiveSupport::TestCase
379 assert_nil node.autosave 379 assert_nil node.autosave
380 assert_nil node.lock_owner 380 assert_nil node.lock_owner
381 end 381 end
382
383 test "revert! is a safe no-op on a fresh node with only a draft" do
384 node = create_node_with_draft
385 node.lock_for_editing!(@user1)
386
387 node.revert!(@user1)
388 node.reload
389
390 assert_not_nil node.draft
391 assert_equal @user1, node.lock_owner
392 end
393
394 test "revert! discards an autosave on a fresh node without touching its only draft" do
395 node = create_node_with_draft
396 node.lock_for_editing!(@user1)
397 node.autosave!({ :title => "typing" }, @user1)
398
399 node.revert!(@user1)
400 node.reload
401
402 assert_nil node.autosave
403 assert_not_nil node.draft
404 assert_equal @user1, node.lock_owner
405 end
406
407 test "revert! does nothing when a published node has no draft or autosave" do
408 node = create_node_with_published_page
409 node.lock_for_editing!(@user1)
410
411 node.revert!(@user1)
412 node.reload
413
414 assert_not_nil node.head
415 assert_nil node.draft
416 end
417
418 test "revert! discards a fresh autosave and releases the lock when no draft exists" do
419 node = create_node_with_published_page
420 node.lock_for_editing!(@user1)
421 node.autosave!({ :title => "in progress" }, @user1)
422
423 node.revert!(@user1)
424 node.reload
425
426 assert_nil node.autosave
427 assert_nil node.draft
428 assert_nil node.lock_owner
429 end
430
431 test "revert! destroys an existing draft and releases the lock" do
432 node = create_node_with_published_page
433 head_title = node.head.title
434 node.lock_for_editing!(@user1)
435 node.autosave!({ :title => "second version" }, @user1)
436 node.save_draft!(@user1)
437
438 node.revert!(@user1)
439 node.reload
440
441 assert_nil node.draft
442 assert_equal head_title, node.head.title
443 assert_nil node.lock_owner
444 end
445
446 test "revert! discards only the autosave when a draft survives beneath it" do
447 node = create_node_with_published_page
448 node.lock_for_editing!(@user1)
449 node.autosave!({ :title => "second version" }, @user1)
450 node.save_draft!(@user1)
451 node.autosave!({ :title => "third version, still typing" }, @user1)
452
453 node.revert!(@user1)
454 node.reload
455
456 assert_nil node.autosave
457 assert_not_nil node.draft
458 assert_equal "second version", node.draft.title
459 assert_equal @user1, node.lock_owner
460 end
461
462 test "revert! raises LockedByAnotherUser for a non-owner" do
463 node = create_node_with_published_page
464 node.lock_for_editing!(@user1)
465
466 assert_raise(LockedByAnotherUser) { node.revert!(@user2) }
467 assert_equal @user1, node.reload.lock_owner
468 end
382 469
383 def create_revisions node, count 470 def create_revisions node, count
384 count.times do 471 count.times do