Skip to content

Commit bc4b63f

Browse files
author
Jerry Cheung
committed
shared example group for testing versions across
strategies
1 parent 263892a commit bc4b63f

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

spec/spec_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
$LOAD_PATH.unshift(File.dirname(__FILE__))
22
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
34

45
$stdout = StringIO.new
56

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
shared_examples_for "versioning" do
2+
it 'should set the API version' do
3+
subject.version 'v1', macro_options
4+
subject.get :hello do
5+
"Version: #{request.env['api.version']}"
6+
end
7+
versioned_get '/hello', 'v1', macro_options
8+
last_response.body.should eql "Version: v1"
9+
end
10+
11+
it 'should add the prefix before the API version' do
12+
subject.prefix 'api'
13+
subject.version 'v1', macro_options
14+
subject.get :hello do
15+
"Version: #{request.env['api.version']}"
16+
end
17+
versioned_get '/hello', 'v1', macro_options.merge(:prefix => 'api')
18+
last_response.body.should eql "Version: v1"
19+
end
20+
21+
it 'should be able to specify version as a nesting' do
22+
subject.version 'v2', macro_options
23+
subject.get '/awesome' do
24+
"Radical"
25+
end
26+
27+
subject.version 'v1', macro_options do
28+
get '/legacy' do
29+
"Totally"
30+
end
31+
end
32+
33+
versioned_get '/awesome', 'v1', macro_options
34+
last_response.status.should eql 404
35+
36+
versioned_get '/awesome', 'v2', macro_options
37+
last_response.status.should eql 200
38+
versioned_get '/legacy', 'v1', macro_options
39+
last_response.status.should eql 200
40+
versioned_get '/legacy', 'v2', macro_options
41+
last_response.status.should eql 404
42+
end
43+
44+
it 'should be able to specify multiple versions' do
45+
subject.version 'v1', 'v2', macro_options
46+
subject.get 'awesome' do
47+
"I exist"
48+
end
49+
50+
versioned_get '/awesome', 'v1', macro_options
51+
last_response.status.should eql 200
52+
versioned_get '/awesome', 'v2', macro_options
53+
last_response.status.should eql 200
54+
versioned_get '/awesome', 'v3', macro_options
55+
last_response.status.should eql 404
56+
end
57+
58+
it 'should allow the same endpoint to be implemented for different versions' do
59+
subject.version 'v2', macro_options
60+
subject.get 'version' do
61+
request.env['api.version']
62+
end
63+
64+
subject.version 'v1', macro_options do
65+
get 'version' do
66+
"version " + request.env['api.version']
67+
end
68+
end
69+
70+
versioned_get '/version', 'v2', macro_options
71+
last_response.status.should == 200
72+
last_response.body.should == 'v2'
73+
versioned_get '/version', 'v1', macro_options
74+
last_response.status.should == 200
75+
last_response.body.should == 'version v1'
76+
end
77+
end

0 commit comments

Comments
 (0)