diff --git a/dashboard/config/routes.rb b/dashboard/config/routes.rb index 58d4093201df9..6d77944c767dd 100644 --- a/dashboard/config/routes.rb +++ b/dashboard/config/routes.rb @@ -392,9 +392,11 @@ get '/s/:script_name/stage/:position/extras', to: redirect(path: '/s/%{script_name}/lessons/%{position}/extras') # Redirects from old /stage/x/puzzle url to new /lessons/x/levels url + get '/s/:script_name/stage/:position/puzzle', to: redirect(path: '/s/%{script_name}/lessons/%{position}/levels') get '/s/:script_name/stage/:position/puzzle/(*all)', to: redirect(path: '/s/%{script_name}/lessons/%{position}/levels/%{all}') # Redirects from old /lockable/x/puzzle url to new /lockable/x/levels url + get '/s/:script_name/lockable/:position/puzzle', to: redirect(path: '/s/%{script_name}/lockable/%{position}/levels') get '/s/:script_name/lockable/:position/puzzle/(*all)', to: redirect(path: '/s/%{script_name}/lockable/%{position}/levels/%{all}') resources :scripts, path: '/s/' do diff --git a/dashboard/test/integration/redirects_test.rb b/dashboard/test/integration/redirects_test.rb index a090f87f208a7..d69d3345d06a6 100644 --- a/dashboard/test/integration/redirects_test.rb +++ b/dashboard/test/integration/redirects_test.rb @@ -65,6 +65,15 @@ class RedirectsTest < ActionDispatch::IntegrationTest get '/s/allthethings/stage/33/puzzle/1/page/1' assert_redirected_to '/s/allthethings/lessons/33/levels/1/page/1' + + # ideally we would just return a 404, but it is easier to implement a + # redirect to a url which 404s. + get '/s/allthethings/stage/1/puzzle' + assert_redirected_to '/s/allthethings/lessons/1/levels' + e = assert_raises(ActionController::RoutingError) do + follow_redirect! + end + assert_includes e.message, 'No route matches' end test 'redirects urls with stage for lesson extras' do @@ -98,6 +107,15 @@ class RedirectsTest < ActionDispatch::IntegrationTest get '/s/test-script/lockable/1/puzzle/1/page/1' assert_redirected_to '/s/test-script/lockable/1/levels/1/page/1' + + # ideally we would just return a 404, but it is easier to implement a + # redirect to a url which 404s. + get '/s/test-script/lockable/1/puzzle' + assert_redirected_to '/s/test-script/lockable/1/levels' + e = assert_raises(ActionController::RoutingError) do + follow_redirect! + end + assert_includes e.message, 'No route matches' end test 'old script id paths redirect to named paths' do