Skip to content

Commit

Permalink
FIX #4127 (#4700)
Browse files Browse the repository at this point in the history
  • Loading branch information
a-barbieri authored and feliperenan committed Jan 23, 2019
1 parent c000b58 commit ee65cd6
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 7 deletions.
9 changes: 7 additions & 2 deletions lib/devise/failure_app.rb
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,16 @@ def scope_url

opts[:format] = request_format unless skip_format?

opts[:script_name] = relative_url_root if relative_url_root?

router_name = Devise.mappings[scope].router_name || Devise.available_router_name
context = send(router_name)

if relative_url_root?
opts[:script_name] = relative_url_root
elsif defined? context.routes
rootpath = context.routes.url_helpers.root_path
opts[:script_name] = rootpath.chomp('/') unless rootpath.length <= 1
end

if context.respond_to?(route)
context.send(route, opts)
elsif respond_to?(:root_url)
Expand Down
40 changes: 35 additions & 5 deletions test/integration/mounted_engine_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,23 @@

require 'test_helper'

class MyMountableEngine
def self.call(env)
['200', { 'Content-Type' => 'text/html' }, ['Rendered content of MyMountableEngine']]
module MyMountableEngine
class Engine < ::Rails::Engine
isolate_namespace MyMountableEngine
end
class TestsController < ActionController::Base
def index
render plain: 'Root test successful'
end
def inner_route
render plain: 'Inner route test successful'
end
end
end

MyMountableEngine::Engine.routes.draw do
get 'test', to: 'tests#inner_route'
root to: 'tests#index'
end

# If disable_clear_and_finalize is set to true, Rails will not clear other routes when calling
Expand All @@ -15,7 +28,7 @@ def self.call(env)

Rails.application.routes.draw do
authenticate(:user) do
mount MyMountableEngine, at: '/mountable_engine'
mount MyMountableEngine::Engine, at: '/mountable_engine'
end
end

Expand All @@ -33,6 +46,23 @@ class AuthenticatedMountedEngineTest < Devise::IntegrationTest
get '/mountable_engine'

assert_response :success
assert_contain 'Rendered content of MyMountableEngine'
assert_contain 'Root test successful'
end


test 'renders a inner route of the mounted engine when authenticated' do
sign_in_as_user
get '/mountable_engine/test'

assert_response :success
assert_contain 'Inner route test successful'
end

test 'respond properly to a non existing route of the mounted engine' do
sign_in_as_user

assert_raise ActionController::RoutingError do
get '/mountable_engine/non-existing-route'
end
end
end

0 comments on commit ee65cd6

Please sign in to comment.