diff --git a/app/controllers/puzzles/clones_controller.rb b/app/controllers/puzzles/clones_controller.rb index 264636b..e02cb75 100644 --- a/app/controllers/puzzles/clones_controller.rb +++ b/app/controllers/puzzles/clones_controller.rb @@ -4,9 +4,9 @@ def create cloned_puzzle = original_puzzle.clone_puzzle if cloned_puzzle.persisted? - redirect_to puzzles_path, notice: "Puzzle cloned. You can now edit the new puzzle." + redirect_back fallback_location: puzzles_path, notice: "Puzzle cloned. You can now edit the new puzzle." else - redirect_to puzzles_path, alert: "Failed to clone puzzle." + redirect_back fallback_location: puzzles_path, alert: "Failed to clone puzzle." end end end diff --git a/test/controllers/puzzles/clones_controller_test.rb b/test/controllers/puzzles/clones_controller_test.rb index 87446d7..78b2f46 100644 --- a/test/controllers/puzzles/clones_controller_test.rb +++ b/test/controllers/puzzles/clones_controller_test.rb @@ -22,6 +22,16 @@ class Puzzles::ClonesControllerTest < ActionDispatch::IntegrationTest assert_equal "pending", cloned.state end + test "redirects back to referer to preserve filters" do + original = puzzles(:one) + referer = puzzles_path(hide_cloned_puzzles: true, low_success_rate: true) + + sign_in + post puzzle_clone_path(original), headers: { "HTTP_REFERER" => referer } + + assert_redirected_to referer + end + test "does not allow unauthenticated users to create a clone" do original = puzzles(:one)