123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- require 'helper'
- module Journey
- class TestRoute < MiniTest::Unit::TestCase
- def test_initialize
- app = Object.new
- path = Path::Pattern.new '/:controller(/:action(/:id(.:format)))'
- defaults = Object.new
- route = Route.new("name", app, path, {}, defaults)
- assert_equal app, route.app
- assert_equal path, route.path
- assert_equal defaults, route.defaults
- end
- def test_route_adds_itself_as_memo
- app = Object.new
- path = Path::Pattern.new '/:controller(/:action(/:id(.:format)))'
- defaults = Object.new
- route = Route.new("name", app, path, {}, defaults)
- route.ast.grep(Nodes::Terminal).each do |node|
- assert_equal route, node.memo
- end
- end
- def test_ip_address
- path = Path::Pattern.new '/messages/:id(.:format)'
- route = Route.new("name", nil, path, {:ip => '192.168.1.1'},
- { :controller => 'foo', :action => 'bar' })
- assert_equal '192.168.1.1', route.ip
- end
- def test_default_ip
- path = Path::Pattern.new '/messages/:id(.:format)'
- route = Route.new("name", nil, path, {},
- { :controller => 'foo', :action => 'bar' })
- assert_equal(//, route.ip)
- end
- def test_format_empty
- path = Path::Pattern.new '/messages/:id(.:format)'
- route = Route.new("name", nil, path, {},
- { :controller => 'foo', :action => 'bar' })
- assert_equal '/messages', route.format({})
- end
- def test_format_with_star
- path = Path::Pattern.new '/:controller/*extra'
- route = Route.new("name", nil, path, {},
- { :controller => 'foo', :action => 'bar' })
- assert_equal '/foo/himom', route.format({
- :controller => 'foo',
- :extra => 'himom',
- })
- end
- def test_connects_all_match
- path = Path::Pattern.new '/:controller(/:action(/:id(.:format)))'
- route = Route.new("name", nil, path, {:action => 'bar'}, { :controller => 'foo' })
- assert_equal '/foo/bar/10', route.format({
- :controller => 'foo',
- :action => 'bar',
- :id => 10
- })
- end
- def test_extras_are_not_included_if_optional
- path = Path::Pattern.new '/page/:id(/:action)'
- route = Route.new("name", nil, path, { }, { :action => 'show' })
- assert_equal '/page/10', route.format({ :id => 10 })
- end
- def test_extras_are_not_included_if_optional_with_parameter
- path = Path::Pattern.new '(/sections/:section)/pages/:id'
- route = Route.new("name", nil, path, { }, { :action => 'show' })
- assert_equal '/pages/10', route.format({:id => 10})
- end
- def test_extras_are_not_included_if_optional_parameter_is_nil
- path = Path::Pattern.new '(/sections/:section)/pages/:id'
- route = Route.new("name", nil, path, { }, { :action => 'show' })
- assert_equal '/pages/10', route.format({:id => 10, :section => nil})
- end
- def test_score
- path = Path::Pattern.new "/page/:id(/:action)(.:format)"
- specific = Route.new "name", nil, path, {}, {:controller=>"pages", :action=>"show"}
- path = Path::Pattern.new "/:controller(/:action(/:id))(.:format)"
- generic = Route.new "name", nil, path, {}
- knowledge = {:id=>20, :controller=>"pages", :action=>"show"}
- routes = [specific, generic]
- refute_equal specific.score(knowledge), generic.score(knowledge)
- found = routes.sort_by { |r| r.score(knowledge) }.last
- assert_equal specific, found
- end
- end
- end
|