module ActionDispatch::Assertions::RoutingAssertions::WithIntegrationRouting

def create_routes

def create_routes
  app = self.app
  routes = ActionDispatch::Routing::RouteSet.new
  @original_routes ||= app.routes
  @original_routes.singleton_class.redefine_method(:call, &routes.method(:call))
  https = integration_session.https?
  host = integration_session.host
  app.instance_variable_set(:@routes, routes)
  @integration_session = Class.new(ActionDispatch::Integration::Session) do
    include app.routes.url_helpers
    include app.routes.mounted_helpers
  end.new(app)
  @integration_session.https! https
  @integration_session.host! host
  @routes = routes
  yield routes
end

def reset_routes(old_routes, old_routes_call_method, old_integration_session)

def reset_routes(old_routes, old_routes_call_method, old_integration_session)
  app.instance_variable_set(:@routes, old_routes)
  @original_routes.singleton_class.redefine_method(:call, &old_routes_call_method)
  @integration_session = old_integration_session
  @routes = old_routes
end

def with_routing(&block)

def with_routing(&block)
  old_routes = app.routes
  old_routes_call_method = old_routes.method(:call)
  old_integration_session = integration_session
  create_routes(&block)
ensure
  reset_routes(old_routes, old_routes_call_method, old_integration_session)
end