aboutsummaryrefslogtreecommitdiff
path: root/spec/integration/router_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/integration/router_spec.rb')
-rw-r--r--spec/integration/router_spec.rb49
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