rails/actionpack/test/dispatch/routing_assertions_test.rb
David Chelimsky dcce01132d Raise Assertion instead of RoutingError for routing assertion failures.
Before this change, assert_recognizes, assert_generates, and
assert_routing raised ActionController::RoutingError when they failed to
recognize the route.

This commit changes them to raise Assertion instead. This aligns with
convention for logical failures, and supports reporting tools that care
about the difference between logical failures and errors e.g. the
summary at the end of a test run.

- Fixes #5899
2012-05-20 06:21:32 -05:00

116 lines
4.5 KiB
Ruby

require 'abstract_unit'
require 'controller/fake_controllers'
class SecureArticlesController < ArticlesController; end
class BlockArticlesController < ArticlesController; end
class QueryArticlesController < ArticlesController; end
class RoutingAssertionsTest < ActionController::TestCase
def setup
@routes = ActionDispatch::Routing::RouteSet.new
@routes.draw do
resources :articles
scope 'secure', :constraints => { :protocol => 'https://' } do
resources :articles, :controller => 'secure_articles'
end
scope 'block', :constraints => lambda { |r| r.ssl? } do
resources :articles, :controller => 'block_articles'
end
scope 'query', :constraints => lambda { |r| r.params[:use_query] == 'true' } do
resources :articles, :controller => 'query_articles'
end
end
end
def test_assert_generates
assert_generates('/articles', { :controller => 'articles', :action => 'index' })
assert_generates('/articles/1', { :controller => 'articles', :action => 'show', :id => '1' })
end
def test_assert_generates_with_defaults
assert_generates('/articles/1/edit', { :controller => 'articles', :action => 'edit' }, { :id => '1' })
end
def test_assert_generates_with_extras
assert_generates('/articles', { :controller => 'articles', :action => 'index', :page => '1' }, {}, { :page => '1' })
end
def test_assert_recognizes
assert_recognizes({ :controller => 'articles', :action => 'index' }, '/articles')
assert_recognizes({ :controller => 'articles', :action => 'show', :id => '1' }, '/articles/1')
end
def test_assert_recognizes_with_extras
assert_recognizes({ :controller => 'articles', :action => 'index', :page => '1' }, '/articles', { :page => '1' })
end
def test_assert_recognizes_with_method
assert_recognizes({ :controller => 'articles', :action => 'create' }, { :path => '/articles', :method => :post })
assert_recognizes({ :controller => 'articles', :action => 'update', :id => '1' }, { :path => '/articles/1', :method => :put })
end
def test_assert_recognizes_with_hash_constraint
assert_raise(Assertion) do
assert_recognizes({ :controller => 'secure_articles', :action => 'index' }, 'http://test.host/secure/articles')
end
assert_recognizes({ :controller => 'secure_articles', :action => 'index', :protocol => 'https://' }, 'https://test.host/secure/articles')
end
def test_assert_recognizes_with_block_constraint
assert_raise(Assertion) do
assert_recognizes({ :controller => 'block_articles', :action => 'index' }, 'http://test.host/block/articles')
end
assert_recognizes({ :controller => 'block_articles', :action => 'index' }, 'https://test.host/block/articles')
end
def test_assert_recognizes_with_query_constraint
assert_raise(Assertion) do
assert_recognizes({ :controller => 'query_articles', :action => 'index', :use_query => 'false' }, '/query/articles', { :use_query => 'false' })
end
assert_recognizes({ :controller => 'query_articles', :action => 'index', :use_query => 'true' }, '/query/articles', { :use_query => 'true' })
end
def test_assert_routing
assert_routing('/articles', :controller => 'articles', :action => 'index')
end
def test_assert_routing_with_defaults
assert_routing('/articles/1/edit', { :controller => 'articles', :action => 'edit', :id => '1' }, { :id => '1' })
end
def test_assert_routing_with_extras
assert_routing('/articles', { :controller => 'articles', :action => 'index', :page => '1' }, { }, { :page => '1' })
end
def test_assert_routing_with_hash_constraint
assert_raise(Assertion) do
assert_routing('http://test.host/secure/articles', { :controller => 'secure_articles', :action => 'index' })
end
assert_routing('https://test.host/secure/articles', { :controller => 'secure_articles', :action => 'index', :protocol => 'https://' })
end
def test_assert_routing_with_block_constraint
assert_raise(Assertion) do
assert_routing('http://test.host/block/articles', { :controller => 'block_articles', :action => 'index' })
end
assert_routing('https://test.host/block/articles', { :controller => 'block_articles', :action => 'index' })
end
def test_with_routing
with_routing do |routes|
routes.draw do
resources :articles, :path => 'artikel'
end
assert_routing('/artikel', :controller => 'articles', :action => 'index')
assert_raise(Assertion) do
assert_routing('/articles', { :controller => 'articles', :action => 'index' })
end
end
end
end