From 5dced8b4b624aabf4215ba21b13957080345c326 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Fri, 17 Jul 2026 23:14:17 +0200 Subject: Route and control trash, restore, and permanent deletion --- test/controllers/nodes_controller_test.rb | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'test/controllers/nodes_controller_test.rb') diff --git a/test/controllers/nodes_controller_test.rb b/test/controllers/nodes_controller_test.rb index b0d7416..7e5a990 100644 --- a/test/controllers/nodes_controller_test.rb +++ b/test/controllers/nodes_controller_test.rb @@ -672,4 +672,56 @@ class NodesControllerTest < ActionController::TestCase assert_equal "Brand New", action.metadata["title"] assert_equal Node.last.unique_name, action.metadata["path"] end + + test "trash moves the node and redirects to the Trash" do + login_as :quentin + node = Node.root.children.create!(:slug => "trash_me") + + put :trash, params: { :id => node.id } + + assert_redirected_to node_path(Node.trash) + assert node.reload.in_trash? + end + + test "trashing the Trash node itself is refused" do + login_as :quentin + + put :trash, params: { :id => Node.trash.id } + + assert_redirected_to node_path(Node.trash) + assert flash[:error].present? + end + + test "restore_from_trash reparents to the given parent" do + login_as :quentin + node = Node.root.children.create!(:slug => "restore_me") + node.trash!(users(:quentin)) + target = Node.root.children.create!(:slug => "restore_home") + + put :restore_from_trash, params: { :id => node.id, :parent_id => target.id } + + assert_redirected_to node_path(node) + assert_equal target, node.reload.parent + end + + test "destroy refuses a node outside the Trash" do + login_as :quentin + node = Node.root.children.create!(:slug => "not_deletable_here") + + delete :destroy, params: { :id => node.id } + + assert Node.exists?(node.id) + assert flash[:error].present? + end + + test "destroy deletes a trashed node and redirects to the Trash" do + login_as :quentin + node = Node.root.children.create!(:slug => "deletable") + node.trash!(users(:quentin)) + + delete :destroy, params: { :id => node.id } + + assert_not Node.exists?(node.id) + assert_redirected_to node_path(Node.trash) + end end -- cgit v1.3