diff options
Diffstat (limited to 'spec/integration')
-rw-r--r-- | spec/integration/router_spec.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/spec/integration/router_spec.rb b/spec/integration/router_spec.rb new file mode 100644 index 0000000..3be7b3a --- /dev/null +++ b/spec/integration/router_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe Zero::Router do + let(:router) { Zero::Router.new(routes) } + subject { router.call(env) } +# let(:app) do +# lambda {|env| [200, {'Content-Type' => 'text/html'}, 'correct'] } +# end + let(:app) { double } + let(:wrong_app) do + lambda {|env| [200, {'Content-Type' => 'text/html'}, 'Wrong'] } + end + + before :each do + app.should_receive(:call) + end + + context 'a working route' do + let(:routes) { { '/app' => app } } + let(:env) { generate_env('/app') } + it('takes a route') { subject } + end + + context 'select the right route' do + let(:routes) do + { '/wrong' => wrong_app, + '/correct' => app } + end + let(:env) { generate_env('/correct') } + it("selects the correct from multiple routes") { subject } + end + + context 'uses the deepest path' do + let(:routes) { { '/wrong' => wrong_app, + '/deep' => wrong_app, + '/deep/wrong' => wrong_app, + '/deep/correct' => app }} + let(:env) { generate_env('/deep/correct') } + it("finds uses the deepest path first") { subject } + end + + context 'converts parts of the url to parameters' do + let(:routes) { { '/foo/:id' => app } } + let(:env) { generate_env('/foo/42') } + it "should extract variables from the url" do + subject + end + end +end |