class LegacyRouteSetTests

Attributes

controller[RW]
routes[R]
rs[R]

Public Instance Methods

matches?(request) click to toggle source
# File actionpack/test/controller/routing_test.rb, line 231
def matches?(request)
  request.subdomain.present? && request.subdomain != "clients"
end
setup() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 82
def setup
  @rs = make_set
  @response = nil
end
setup_for_named_route(options = {}) click to toggle source
# File actionpack/test/controller/routing_test.rb, line 481
def setup_for_named_route(options = {})
  MockController.build(rs.url_helpers, options).new
end
setup_request_method_routes_for(method) click to toggle source
# File actionpack/test/controller/routing_test.rb, line 806
def setup_request_method_routes_for(method)
  rs.draw do
    match "/match" => "books##{method}", :via => method.to_sym
  end
end
test_action_expiry() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 685
def test_action_expiry
  rs.draw { ActiveSupport::Deprecation.silence { get ":controller(/:action(/:id))" } }
  get URI("http://test.host/content/show")
  assert_equal "/content", controller.url_for(controller: "content", only_path: true)
end
test_backwards() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 631
def test_backwards
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get "page/:id(/:action)" => "pages#show"
      get ":controller(/:action(/:id))"
    end
  end

  get URI("http://test.host/pages/show")
  assert_equal "/page/20",   controller.url_for(id: 20, only_path: true)
  assert_equal "/page/20",   url_for(rs, controller: "pages", id: 20, action: "show")
  assert_equal "/pages/boo", url_for(rs, controller: "pages", action: "boo")
end
test_basic_named_route() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 417
def test_basic_named_route
  rs.draw do
    root to: "content#list", as: "home"
  end
  assert_equal("http://test.host/", setup_for_named_route.send(:home_url))
end
test_both_requirement_and_optional() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 703
def test_both_requirement_and_optional
  rs.draw do
    get("test(/:year)" => "post#show", :as => "blog",
      :defaults => { year: nil },
      :constraints => { year: /\d{4}/ }
    )

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end

  assert_equal "/test", url_for(rs, controller: "post", action: "show")
  assert_equal "/test", url_for(rs, controller: "post", action: "show", year: nil)

  assert_equal("http://test.host/test", setup_for_named_route.send(:blog_url))
end
test_changing_controller() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 553
def test_changing_controller
  rs.draw { ActiveSupport::Deprecation.silence { get ":controller/:action/:id" } }

  get URI("http://test.host/admin/user/index/10")

  assert_equal "/admin/stuff/show/10",
      controller.url_for(controller: "stuff", action: "show", id: 10, only_path: true)
end
test_class_and_lambda_constraints() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 229
def test_class_and_lambda_constraints
  subdomain = Class.new {
    def matches?(request)
      request.subdomain.present? && request.subdomain != "clients"
    end
  }

  rs.draw do
    get "/", constraints: subdomain.new,
               to: lambda { |env| [200, {}, %w{default}] }
    get "/", constraints: { subdomain: "clients" },
               to: lambda { |env| [200, {}, %w{clients}] }
  end

  assert_equal "default", get(URI("http://www.example.org/"))
  assert_equal "clients", get(URI("http://clients.example.org/"))
end
test_dash_with_custom_regexp() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 127
def test_dash_with_custom_regexp
  rs.draw do
    get "/:artist/:song-omg", constraints: { song: /\d+/ }, to: lambda { |env|
      resp = ActiveSupport::JSON.encode ActionDispatch::Request.new(env).path_parameters
      [200, {}, [resp]]
    }
  end

  hash = ActiveSupport::JSON.decode get(URI("http://example.org/journey/123-omg"))
  assert_equal({ "artist" => "journey", "song" => "123" }, hash)
  assert_equal "Not Found", get(URI("http://example.org/journey/faithfully-omg"))
end
test_default_setup() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 320
def test_default_setup
  rs.draw { ActiveSupport::Deprecation.silence { get "/:controller(/:action(/:id))" } }
  assert_equal({ controller: "content", action: "index" }, rs.recognize_path("/content"))
  assert_equal({ controller: "content", action: "list" },  rs.recognize_path("/content/list"))
  assert_equal({ controller: "content", action: "show", id: "10" }, rs.recognize_path("/content/show/10"))

  assert_equal({ controller: "admin/user", action: "show", id: "10" }, rs.recognize_path("/admin/user/show/10"))

  assert_equal "/admin/user/show/10", url_for(rs, controller: "admin/user", action: "show", id: 10)

  get URI("http://test.host/admin/user/list/10")

  assert_equal({ controller: "admin/user", action: "list", id: "10" },
               controller.request.path_parameters)

  assert_equal "/admin/user/show",    controller.url_for(action: "show", only_path: true)
  assert_equal "/admin/user/list/10", controller.url_for(only_path: true)

  assert_equal "/admin/stuff", controller.url_for(controller: "stuff", only_path: true)
  assert_equal "/stuff", controller.url_for(controller: "/stuff", only_path: true)
end
test_dynamic_path_allowed() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 609
def test_dynamic_path_allowed
  rs.draw do
    get "*path" => "content#show_file"
  end

  assert_equal "/pages/boo",
      url_for(rs, controller: "content", action: "show_file", path: %w(pages boo))
end
test_dynamic_recall_paths_allowed() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 618
def test_dynamic_recall_paths_allowed
  rs.draw do
    get "*path" => "content#show_file"
  end

  get URI("http://test.host/pages/boo")
  assert_equal({ controller: "content", action: "show_file", path: "pages/boo" },
               controller.request.path_parameters)

  assert_equal "/pages/boo",
    controller.url_for(only_path: true)
end
test_empty_string_match() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 288
def test_empty_string_match
  rs.draw do
    get "/:username", constraints: { username: /[^\/]+/ },
                     to: lambda { |e| [200, {}, ["foo"]] }
  end
  assert_equal "Not Found", get(URI("http://example.org/"))
  assert_equal "foo", get(URI("http://example.org/hello"))
end
test_failed_constraints_raises_exception_with_violated_constraints() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 874
def test_failed_constraints_raises_exception_with_violated_constraints
  rs.draw do
    get "foos/:id" => "foos#show", :as => "foo_with_requirement", :constraints => { id: /\d+/ }
  end

  assert_raise(ActionController::UrlGenerationError) do
    setup_for_named_route.send(:foo_with_requirement_url, "I am Against the constraints")
  end
end
test_id_encoding() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 99
def test_id_encoding
  rs.draw do
    get "/journey/:id", to: lambda { |env|
      param = ActionDispatch::Request.new(env).path_parameters
      resp = ActiveSupport::JSON.encode param
      [200, {}, [resp]]
    }
  end

  # The encoding of the URL in production is *binary*, so we add a
  # .b here.
  hash = ActiveSupport::JSON.decode get(URI("http://example.org/journey/%E5%A4%AA%E9%83%8E".b))
  assert_equal({ "id" => "太郎" }, hash)
  assert_equal ::Encoding::UTF_8, hash["id"].encoding
end
test_id_with_dash() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 115
def test_id_with_dash
  rs.draw do
    get "/journey/:id", to: lambda { |env|
      resp = ActiveSupport::JSON.encode ActionDispatch::Request.new(env).path_parameters
      [200, {}, [resp]]
    }
  end

  hash = ActiveSupport::JSON.decode get(URI("http://example.org/journey/faithfully-omg"))
  assert_equal({ "id" => "faithfully-omg" }, hash)
end
test_lambda_constraints() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 247
def test_lambda_constraints
  rs.draw do
    get "/", constraints: lambda { |req|
      req.subdomain.present? && req.subdomain != "clients" },
               to: lambda { |env| [200, {}, %w{default}] }

    get "/", constraints: lambda { |req|
      req.subdomain.present? && req.subdomain == "clients" },
               to: lambda { |env| [200, {}, %w{clients}] }
  end

  assert_equal "default", get(URI("http://www.example.org/"))
  assert_equal "clients", get(URI("http://clients.example.org/"))
end
test_named_root_url_generation_with_controller_and_action() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 760
def test_named_root_url_generation_with_controller_and_action
  rs.draw do
    root to: "content#index", as: "home"
  end

  assert_equal "/", url_for(rs, controller: "content", action: "index")
  assert_equal "/", url_for(rs, controller: "content")

  assert_equal("http://test.host/", setup_for_named_route.send(:home_url))
end
test_named_route_method() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 771
def test_named_route_method
  rs.draw do
    get "categories" => "content#categories", :as => "categories"

    ActiveSupport::Deprecation.silence do
      get ":controller(/:action(/:id))"
    end
  end

  assert_equal "/categories", url_for(rs, controller: "content", action: "categories")
  assert_equal "/content/hi", url_for(rs, controller: "content", action: "hi")
end
test_named_route_root() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 493
def test_named_route_root
  rs.draw do
    root to: "hello#index"
  end
  routes = setup_for_named_route
  assert_equal("http://test.host/", routes.send(:root_url))
  assert_equal("/", routes.send(:root_path))
end
test_named_route_root_with_hash() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 511
def test_named_route_root_with_hash
  rs.draw do
    root "hello#index", as: :index
  end

  routes = setup_for_named_route
  assert_equal("http://test.host/", routes.send(:index_url))
  assert_equal("/", routes.send(:index_path))
end
test_named_route_root_with_trailing_slash() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 527
def test_named_route_root_with_trailing_slash
  rs.draw do
    root "hello#index"
  end

  routes = setup_for_named_route(trailing_slash: true)
  assert_equal("http://test.host/", routes.send(:root_url))
  assert_equal("http://test.host/?foo=bar", routes.send(:root_url, foo: :bar))
end
test_named_route_root_without_hash() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 502
def test_named_route_root_without_hash
  rs.draw do
    root "hello#index"
  end
  routes = setup_for_named_route
  assert_equal("http://test.host/", routes.send(:root_url))
  assert_equal("/", routes.send(:root_path))
end
test_named_route_with_blank_path_prefix() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 453
def test_named_route_with_blank_path_prefix
  rs.draw do
    scope "" do
      get "page" => "content#show_page", :as => "page"
    end
  end

  assert_equal("http://test.host/page",
      setup_for_named_route.send(:page_url))
end
test_named_route_with_default() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 433
def test_named_route_with_default
  rs.draw do
    get "page/:title" => "content#show_page", :title => "AboutPage", :as => "page"
  end

  assert_equal("http://test.host/page/AboutQuails",
      setup_for_named_route.send(:page_url, title: "AboutQuails"))
end
test_named_route_with_nested_controller() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 464
def test_named_route_with_nested_controller
  rs.draw do
    get "admin/user" => "admin/user#index", :as => "users"
  end

  assert_equal("http://test.host/admin/user",
      setup_for_named_route.send(:users_url))
end
test_named_route_with_option() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 424
def test_named_route_with_option
  rs.draw do
    get "page/:title" => "content#show_page", :as => "page"
  end

  assert_equal("http://test.host/page/new%20stuff",
      setup_for_named_route.send(:page_url, title: "new stuff"))
end
test_named_route_with_path_prefix() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 442
def test_named_route_with_path_prefix
  rs.draw do
    scope "my" do
      get "page" => "content#show_page", :as => "page"
    end
  end

  assert_equal("http://test.host/my/page",
      setup_for_named_route.send(:page_url))
end
test_named_route_with_regexps() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 537
def test_named_route_with_regexps
  rs.draw do
    get "page/:year/:month/:day/:title" => "page#show", :as => "article",
      :year => /\d+/, :month => /\d+/, :day => /\d+/

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end

  routes = setup_for_named_route

  assert_equal "http://test.host/page/2005/6/10/hi",
    routes.send(:article_url, title: "hi", day: 10, year: 2005, month: 6)
end
test_named_route_without_hash() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 485
def test_named_route_without_hash
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id", as: "normal"
    end
  end
end
test_named_routes_array() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 784
def test_named_routes_array
  test_named_route_method
  assert_equal [:categories], rs.named_routes.names
end
test_nil_defaults() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 789
def test_nil_defaults
  rs.draw do
    get "journal" => "content#list_journal",
      :date => nil, :user_id => nil

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end

  assert_equal "/journal", url_for(rs,
    controller: "content",
    action: "list_journal",
    date: nil,
    user_id: nil)
end
test_non_controllers_cannot_be_matched() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 591
def test_non_controllers_cannot_be_matched
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end
  assert_raise(ActionController::RoutingError) { rs.recognize_path("/not_a/show/10") }
end
test_non_greedy_glob_regexp() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 297
def test_non_greedy_glob_regexp
  params = nil
  rs.draw do
    get "/posts/:id(/*filters)", constraints: { filters: /.+?/ },
      to: lambda { |e|
      params = e["action_dispatch.request.path_parameters"]
      [200, {}, ["foo"]]
    }
  end
  assert_equal "foo", get(URI("http://example.org/posts/1/foo.js"))
  assert_equal({ id: "1", filters: "foo", format: "js" }, params)
end
test_optimised_named_route_with_host() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 473
def test_optimised_named_route_with_host
  rs.draw do
    get "page" => "content#show_page", :as => "pages", :host => "foo.com"
  end
  routes = setup_for_named_route
  assert_equal "http://foo.com/page", routes.pages_url
end
test_optional_star_paths_are_greedy() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 190
def test_optional_star_paths_are_greedy
  rs.draw do
    get "/(*filters)", to: lambda { |env|
      x = env["action_dispatch.request.path_parameters"][:filters]
      [200, {}, [x]]
    }, format: false
  end

  u = URI("http://example.org/ne_27.065938,-80.6092/sw_25.489856,-82.542794")
  assert_equal u.path.sub(/^\//, ""), get(u)
end
test_optional_star_paths_are_greedy_but_not_too_much() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 202
def test_optional_star_paths_are_greedy_but_not_too_much
  rs.draw do
    get "/(*filters)", to: lambda { |env|
      x = ActiveSupport::JSON.encode env["action_dispatch.request.path_parameters"]
      [200, {}, [x]]
    }
  end

  expected = { "filters" => "ne_27.065938,-80.6092/sw_25.489856,-82",
               "format"  => "542794" }
  u = URI("http://example.org/ne_27.065938,-80.6092/sw_25.489856,-82.542794")
  assert_equal expected, ActiveSupport::JSON.decode(get(u))
end
test_paths_escaped() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 562
def test_paths_escaped
  rs.draw do
    get "file/*path" => "content#show_file", :as => "path"

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end

  # No + to space in URI escaping, only for query params.
  results = rs.recognize_path "/file/hello+world/how+are+you%3F"
  assert results, "Recognition should have succeeded"
  assert_equal "hello+world/how+are+you?", results[:path]

  # Use %20 for space instead.
  results = rs.recognize_path "/file/hello%20world/how%20are%20you%3F"
  assert results, "Recognition should have succeeded"
  assert_equal "hello world/how are you?", results[:path]
end
test_paths_slashes_unescaped_with_ordered_parameters() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 582
def test_paths_slashes_unescaped_with_ordered_parameters
  rs.draw do
    get "/file/*path" => "content#index", :as => "path"
  end

  # No / to %2F in URI, only for query params.
  assert_equal("/file/hello/world", setup_for_named_route.send(:path_path, ["hello", "world"]))
end
test_pre_dash() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 140
def test_pre_dash
  rs.draw do
    get "/:artist/omg-:song", to: lambda { |env|
      resp = ActiveSupport::JSON.encode ActionDispatch::Request.new(env).path_parameters
      [200, {}, [resp]]
    }
  end

  hash = ActiveSupport::JSON.decode get(URI("http://example.org/journey/omg-faithfully"))
  assert_equal({ "artist" => "journey", "song" => "faithfully" }, hash)
end
test_pre_dash_with_custom_regexp() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 152
def test_pre_dash_with_custom_regexp
  rs.draw do
    get "/:artist/omg-:song", constraints: { song: /\d+/ }, to: lambda { |env|
      resp = ActiveSupport::JSON.encode ActionDispatch::Request.new(env).path_parameters
      [200, {}, [resp]]
    }
  end

  hash = ActiveSupport::JSON.decode get(URI("http://example.org/journey/omg-123"))
  assert_equal({ "artist" => "journey", "song" => "123" }, hash)
  assert_equal "Not Found", get(URI("http://example.org/journey/omg-faithfully"))
end
test_recognize_array_of_methods() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 820
def test_recognize_array_of_methods
  rs.draw do
    match "/match" => "books#get_or_post", :via => [:get, :post]
    put "/match" => "books#not_get_or_post"
  end

  params = rs.recognize_path("/match", method: :post)
  assert_equal "get_or_post", params[:action]

  params = rs.recognize_path("/match", method: :put)
  assert_equal "not_get_or_post", params[:action]
end
test_regexp_precidence() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 216
def test_regexp_precidence
  rs.draw do
    get "/whois/:domain", constraints: {
      domain: /\w+\.[\w\.]+/ },
      to: lambda { |env| [200, {}, %w{regexp}] }

    get "/whois/:id", to: lambda { |env| [200, {}, %w{id}] }
  end

  assert_equal "regexp", get(URI("http://example.org/whois/example.org"))
  assert_equal "id", get(URI("http://example.org/whois/123"))
end
test_requirement_should_prevent_optional_id() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 691
def test_requirement_should_prevent_optional_id
  rs.draw do
    get "post/:id" => "post#show", :constraints => { id: /\d+/ }, :as => "post"
  end

  assert_equal "/post/10", url_for(rs, controller: "post", action: "show", id: 10)

  assert_raise(ActionController::UrlGenerationError) do
    url_for(rs, controller: "post", action: "show")
  end
end
test_root_url_generation_with_controller_and_action() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 751
def test_root_url_generation_with_controller_and_action
  rs.draw do
    root to: "content#index"
  end

  assert_equal "/", url_for(rs, controller: "content", action: "index")
  assert_equal "/", url_for(rs, controller: "content")
end
test_root_without_path_raises_argument_error() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 521
def test_root_without_path_raises_argument_error
  assert_raises ArgumentError do
    rs.draw { root nil }
  end
end
test_route_with_colon_first() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 342
def test_route_with_colon_first
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get "/:controller/:action/:id", action: "index", id: nil
    end

    get ":url", controller: "content", action: "translate"
  end

  assert_equal({ controller: "content", action: "translate", url: "example" }, rs.recognize_path("/example"))
end
test_route_with_integer_default() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 645
def test_route_with_integer_default
  rs.draw do
    get "page(/:id)" => "content#show_page", :id => 1

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end

  assert_equal "/page",    url_for(rs, controller: "content", action: "show_page")
  assert_equal "/page",    url_for(rs, controller: "content", action: "show_page", id: 1)
  assert_equal "/page",    url_for(rs, controller: "content", action: "show_page", id: "1")
  assert_equal "/page/10", url_for(rs, controller: "content", action: "show_page", id: 10)

  assert_equal({ controller: "content", action: "show_page", id: 1 }, rs.recognize_path("/page"))
  assert_equal({ controller: "content", action: "show_page", id: "1" }, rs.recognize_path("/page/1"))
  assert_equal({ controller: "content", action: "show_page", id: "10" }, rs.recognize_path("/page/10"))
end
test_route_with_regexp_and_captures_for_controller() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 381
def test_route_with_regexp_and_captures_for_controller
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get "/:controller(/:action(/:id))", controller: /admin\/(accounts|users)/
    end
  end
  assert_equal({ controller: "admin/accounts", action: "index" }, rs.recognize_path("/admin/accounts"))
  assert_equal({ controller: "admin/users", action: "index" }, rs.recognize_path("/admin/users"))
  assert_raise(ActionController::RoutingError) { rs.recognize_path("/admin/products") }
end
test_route_with_regexp_and_dot() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 392
def test_route_with_regexp_and_dot
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:file",
                controller: /admin|user/,
                action: /upload|download/,
                defaults: { file: nil },
                constraints: { file: %r{[^/]+(\.[^/]+)?} }
    end
  end
  # Without a file extension
  assert_equal "/user/download/file",
    url_for(rs, controller: "user", action: "download", file: "file")

  assert_equal({ controller: "user", action: "download", file: "file" },
    rs.recognize_path("/user/download/file"))

  # Now, let's try a file with an extension, really a dot (.)
  assert_equal "/user/download/file.jpg",
    url_for(rs, controller: "user", action: "download", file: "file.jpg")

  assert_equal({ controller: "user", action: "download", file: "file.jpg" },
    rs.recognize_path("/user/download/file.jpg"))
end
test_route_with_regexp_for_action() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 354
def test_route_with_regexp_for_action
  rs.draw { ActiveSupport::Deprecation.silence { get "/:controller/:action", action: /auth[-|_].+/ } }

  assert_equal({ action: "auth_google", controller: "content" }, rs.recognize_path("/content/auth_google"))
  assert_equal({ action: "auth-facebook", controller: "content" }, rs.recognize_path("/content/auth-facebook"))

  assert_equal "/content/auth_google", url_for(rs, controller: "content", action: "auth_google")
  assert_equal "/content/auth-facebook", url_for(rs, controller: "content", action: "auth-facebook")
end
test_route_with_regexp_for_controller() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 364
def test_route_with_regexp_for_controller
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get ":controller/:admintoken(/:action(/:id))", controller: /admin\/.+/
      get "/:controller(/:action(/:id))"
    end
  end

  assert_equal({ controller: "admin/user", admintoken: "foo", action: "index" },
      rs.recognize_path("/admin/user/foo"))
  assert_equal({ controller: "content", action: "foo" },
      rs.recognize_path("/content/foo"))

  assert_equal "/admin/user/foo", url_for(rs, controller: "admin/user", admintoken: "foo", action: "index")
  assert_equal "/content/foo",    url_for(rs, controller: "content", action: "foo")
end
test_route_with_text_default() click to toggle source

For newer revision

# File actionpack/test/controller/routing_test.rb, line 665
def test_route_with_text_default
  rs.draw do
    get "page/:id" => "content#show_page", :id => 1

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end

  assert_equal "/page/foo", url_for(rs, controller: "content", action: "show_page", id: "foo")
  assert_equal({ controller: "content", action: "show_page", id: "foo" }, rs.recognize_path("/page/foo"))

  token = "\321\202\320\265\320\272\321\201\321\202".dup # 'text' in Russian
  token.force_encoding(Encoding::BINARY)
  escaped_token = CGI::escape(token)

  assert_equal "/page/" + escaped_token, url_for(rs, controller: "content", action: "show_page", id: token)
  assert_equal({ controller: "content", action: "show_page", id: token }, rs.recognize_path("/page/#{escaped_token}"))
end
test_routes_changed_correctly_after_clear() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 884
def test_routes_changed_correctly_after_clear
  rs = ::ActionDispatch::Routing::RouteSet.new
  rs.draw do
    get "ca" => "ca#aa"
    get "cb" => "cb#ab"
    get "cc" => "cc#ac"

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
      get ":controller/:action/:id.:format"
    end
  end

  hash = rs.recognize_path "/cc"

  assert_not_nil hash
  assert_equal %w(cc ac), [hash[:controller], hash[:action]]

  rs.draw do
    get "cb" => "cb#ab"
    get "cc" => "cc#ac"

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
      get ":controller/:action/:id.:format"
    end
  end

  hash = rs.recognize_path "/cc"

  assert_not_nil hash
  assert_equal %w(cc ac), [hash[:controller], hash[:action]]
end
test_scoped_lambda() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 262
def test_scoped_lambda
  scope_called = false
  rs.draw do
    scope "/foo", constraints: lambda { |req| scope_called = true } do
      get "/", to: lambda { |env| [200, {}, %w{default}] }
    end
  end

  assert_equal "default", get(URI("http://www.example.org/foo/"))
  assert scope_called, "scope constraint should be called"
end
test_scoped_lambda_with_get_lambda() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 274
def test_scoped_lambda_with_get_lambda
  inner_called = false

  rs.draw do
    scope "/foo", constraints: lambda { |req| flunk "should not be called" } do
      get "/", constraints: lambda { |req| inner_called = true },
               to: lambda { |env| [200, {}, %w{default}] }
    end
  end

  assert_equal "default", get(URI("http://www.example.org/foo/"))
  assert inner_called, "inner constraint should be called"
end
test_set_to_nil_forgets() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 721
def test_set_to_nil_forgets
  rs.draw do
    get "pages(/:year(/:month(/:day)))" => "content#list_pages", :month => nil, :day => nil

    ActiveSupport::Deprecation.silence do
      get ":controller/:action/:id"
    end
  end

  assert_equal "/pages/2005",
    url_for(rs, controller: "content", action: "list_pages", year: 2005)
  assert_equal "/pages/2005/6",
    url_for(rs, controller: "content", action: "list_pages", year: 2005, month: 6)
  assert_equal "/pages/2005/6/12",
    url_for(rs, controller: "content", action: "list_pages", year: 2005, month: 6, day: 12)

  get URI("http://test.host/pages/2005/6/12")
  assert_equal({ controller: "content", action: "list_pages", year: "2005", month: "6", day: "12" },
              controller.request.path_parameters)

  assert_equal "/pages/2005/6/4",
    controller.url_for(day: 4, only_path: true)

  assert_equal "/pages/2005/6",
    controller.url_for(day: nil, only_path: true)

  assert_equal "/pages/2005",
    controller.url_for(day: nil, month: nil, only_path: true)
end
test_should_list_options_diff_when_routing_constraints_dont_match() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 600
def test_should_list_options_diff_when_routing_constraints_dont_match
  rs.draw do
    get "post/:id" => "post#show", :constraints => { id: /\d+/ }, :as => "post"
  end
  assert_raise(ActionController::UrlGenerationError) do
    url_for(rs, controller: "post", action: "show", bad_param: "foo", use_route: "post")
  end
end
test_specific_controller_action_failure() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 310
def test_specific_controller_action_failure
  rs.draw do
    mount lambda {} => "/foo"
  end

  assert_raises(ActionController::UrlGenerationError) do
    url_for(rs, controller: "omg", action: "lol")
  end
end
test_star_paths_are_greedy() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 165
def test_star_paths_are_greedy
  rs.draw do
    get "/*path", to: lambda { |env|
      x = env["action_dispatch.request.path_parameters"][:path]
      [200, {}, [x]]
    }, format: false
  end

  u = URI("http://example.org/foo/bar.html")
  assert_equal u.path.sub(/^\//, ""), get(u)
end
test_star_paths_are_greedy_but_not_too_much() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 177
def test_star_paths_are_greedy_but_not_too_much
  rs.draw do
    get "/*path", to: lambda { |env|
      x = ActiveSupport::JSON.encode env["action_dispatch.request.path_parameters"]
      [200, {}, [x]]
    }
  end

  expected = { "path" => "foo/bar", "format" => "html" }
  u = URI("http://example.org/foo/bar.html")
  assert_equal expected, ActiveSupport::JSON.decode(get(u))
end
test_subpath_generated() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 860
def test_subpath_generated
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get "/books/:id/edit"    => "subpath_books#edit"
      get "/items/:id/:action" => "subpath_books"
      get "/posts/new/:action" => "subpath_books"
    end
  end

  assert_equal "/books/7/edit",      url_for(rs, controller: "subpath_books", id: 7, action: "edit")
  assert_equal "/items/15/complete", url_for(rs, controller: "subpath_books", id: 15, action: "complete")
  assert_equal "/posts/new/preview", url_for(rs, controller: "subpath_books", action: "preview")
end
test_subpath_recognized() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 833
def test_subpath_recognized
  rs.draw do
    ActiveSupport::Deprecation.silence do
      get "/books/:id/edit"    => "subpath_books#edit"
      get "/items/:id/:action" => "subpath_books"
      get "/posts/new/:action" => "subpath_books"
      get "/posts/:id"         => "subpath_books#show"
    end
  end

  hash = rs.recognize_path "/books/17/edit"
  assert_not_nil hash
  assert_equal %w(subpath_books 17 edit), [hash[:controller], hash[:id], hash[:action]]

  hash = rs.recognize_path "/items/3/complete"
  assert_not_nil hash
  assert_equal %w(subpath_books 3 complete), [hash[:controller], hash[:id], hash[:action]]

  hash = rs.recognize_path "/posts/new/preview"
  assert_not_nil hash
  assert_equal %w(subpath_books preview), [hash[:controller], hash[:action]]

  hash = rs.recognize_path "/posts/7"
  assert_not_nil hash
  assert_equal %w(subpath_books show 7), [hash[:controller], hash[:action], hash[:id]]
end
test_symbols_with_dashes() click to toggle source
# File actionpack/test/controller/routing_test.rb, line 87
def test_symbols_with_dashes
  rs.draw do
    get "/:artist/:song-omg", to: lambda { |env|
      resp = ActiveSupport::JSON.encode ActionDispatch::Request.new(env).path_parameters
      [200, {}, [resp]]
    }
  end

  hash = ActiveSupport::JSON.decode get(URI("http://example.org/journey/faithfully-omg"))
  assert_equal({ "artist" => "journey", "song" => "faithfully" }, hash)
end