147 lines
4.8 KiB
Ruby
147 lines
4.8 KiB
Ruby
|
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
||
|
require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/simple')
|
||
|
|
||
|
describe "Router" do
|
||
|
|
||
|
def setup
|
||
|
Padrino.clear!
|
||
|
end
|
||
|
|
||
|
should "dispatch paths correctly" do
|
||
|
app = lambda { |env|
|
||
|
[200, {
|
||
|
'X-ScriptName' => env['SCRIPT_NAME'],
|
||
|
'X-PathInfo' => env['PATH_INFO'],
|
||
|
'Content-Type' => 'text/plain'
|
||
|
}, [""]]
|
||
|
}
|
||
|
map = Padrino::Router.new(
|
||
|
{ :path => '/bar', :to => app },
|
||
|
{ :path => '/foo', :to => app },
|
||
|
{ :path => '/foo/bar', :to => app }
|
||
|
)
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/qux")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/foo")
|
||
|
assert res.ok?
|
||
|
assert_equal "/foo", res["X-ScriptName"]
|
||
|
assert_equal "/", res["X-PathInfo"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/foo/")
|
||
|
assert res.ok?
|
||
|
assert_equal "/foo", res["X-ScriptName"]
|
||
|
assert_equal "/", res["X-PathInfo"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/foo/bar")
|
||
|
assert res.ok?
|
||
|
assert_equal "/foo/bar", res["X-ScriptName"]
|
||
|
assert_equal "/", res["X-PathInfo"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/foo/bar/")
|
||
|
assert res.ok?
|
||
|
assert_equal "/foo/bar", res["X-ScriptName"]
|
||
|
assert_equal "/", res["X-PathInfo"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/foo///bar//quux")
|
||
|
assert_equal 200, res.status
|
||
|
assert res.ok?
|
||
|
assert_equal "/foo/bar", res["X-ScriptName"]
|
||
|
assert_equal "//quux", res["X-PathInfo"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/foo/quux", "SCRIPT_NAME" => "/bleh")
|
||
|
assert res.ok?
|
||
|
assert_equal "/bleh/foo", res["X-ScriptName"]
|
||
|
assert_equal "/quux", res["X-PathInfo"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/bar", 'HTTP_HOST' => 'foo.org')
|
||
|
assert res.ok?
|
||
|
assert_equal "/bar", res["X-ScriptName"]
|
||
|
assert_equal "/", res["X-PathInfo"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/bar/", 'HTTP_HOST' => 'foo.org')
|
||
|
assert res.ok?
|
||
|
assert_equal "/bar", res["X-ScriptName"]
|
||
|
assert_equal "/", res["X-PathInfo"]
|
||
|
end
|
||
|
|
||
|
should "dispatches hosts correctly" do
|
||
|
map = Padrino::Router.new(
|
||
|
{ :host => "foo.org", :to => lambda { |env|
|
||
|
[200,
|
||
|
{ "Content-Type" => "text/plain",
|
||
|
"X-Position" => "foo.org",
|
||
|
"X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
|
||
|
}, [""]]}},
|
||
|
{ :host => "subdomain.foo.org", :to => lambda { |env|
|
||
|
[200,
|
||
|
{ "Content-Type" => "text/plain",
|
||
|
"X-Position" => "subdomain.foo.org",
|
||
|
"X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
|
||
|
}, [""]]}},
|
||
|
{ :host => /.*\.bar.org/, :to => lambda { |env|
|
||
|
[200,
|
||
|
{ "Content-Type" => "text/plain",
|
||
|
"X-Position" => "bar.org",
|
||
|
"X-Host" => env["HTTP_HOST"] || env["SERVER_NAME"],
|
||
|
}, [""]]}}
|
||
|
)
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "bar.org")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "at.bar.org")
|
||
|
assert res.ok?
|
||
|
assert_equal "bar.org", res["X-Position"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "foo.org")
|
||
|
assert res.ok?
|
||
|
assert_equal "foo.org", res["X-Position"]
|
||
|
|
||
|
res = Rack::MockRequest.new(map).get("/", "HTTP_HOST" => "subdomain.foo.org", "SERVER_NAME" => "foo.org")
|
||
|
assert res.ok?
|
||
|
assert_equal "subdomain.foo.org", res["X-Position"]
|
||
|
end
|
||
|
|
||
|
should "works with padrino core applications" do
|
||
|
Padrino.mount("simple_demo").host("padrino.org")
|
||
|
assert_equal ["simple_demo"], Padrino.mounted_apps.map(&:name)
|
||
|
assert_equal ["padrino.org"], Padrino.mounted_apps.map(&:app_host)
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "bar.org")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "padrino.org")
|
||
|
assert res.ok?
|
||
|
end
|
||
|
|
||
|
should "works with padrino applications" do
|
||
|
Padrino.mount("simple_demo").to("/foo").host(/.*\.padrino.org/)
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "bar.org")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/", "HTTP_HOST" => "padrino.org")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/none", "HTTP_HOST" => "foo.padrino.org")
|
||
|
assert res.not_found?
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/foo", "HTTP_HOST" => "bar.padrino.org")
|
||
|
assert res.ok?
|
||
|
|
||
|
res = Rack::MockRequest.new(Padrino.application).get("/foo/", "HTTP_HOST" => "bar.padrino.org")
|
||
|
assert res.ok?
|
||
|
end
|
||
|
end
|