puffing-billy 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/Gemfile.lock +2 -2
- data/Guardfile +5 -5
- data/README.md +19 -1
- data/Rakefile +1 -1
- data/lib/billy.rb +17 -17
- data/lib/billy/cache.rb +30 -31
- data/lib/billy/config.rb +4 -2
- data/lib/billy/handlers/cache_handler.rb +5 -7
- data/lib/billy/handlers/handler.rb +2 -2
- data/lib/billy/handlers/proxy_handler.rb +16 -16
- data/lib/billy/handlers/request_handler.rb +6 -8
- data/lib/billy/handlers/stub_handler.rb +2 -2
- data/lib/billy/json_utils.rb +1 -2
- data/lib/billy/proxy_connection.rb +5 -5
- data/lib/billy/proxy_request_stub.rb +7 -7
- data/lib/billy/version.rb +1 -1
- data/lib/tasks/billy.rake +13 -15
- data/puffing-billy.gemspec +28 -28
- data/spec/features/examples/facebook_api_spec.rb +7 -7
- data/spec/features/examples/tumblr_api_spec.rb +6 -6
- data/spec/lib/billy/cache_spec.rb +14 -16
- data/spec/lib/billy/handlers/cache_handler_spec.rb +26 -24
- data/spec/lib/billy/handlers/handler_spec.rb +3 -3
- data/spec/lib/billy/handlers/proxy_handler_spec.rb +18 -16
- data/spec/lib/billy/handlers/request_handler_spec.rb +44 -42
- data/spec/lib/billy/handlers/stub_handler_spec.rb +14 -12
- data/spec/lib/billy/proxy_request_stub_spec.rb +55 -42
- data/spec/lib/billy/resource_utils_spec.rb +17 -17
- data/spec/lib/proxy_spec.rb +62 -70
- data/spec/spec_helper.rb +3 -3
- data/spec/support/test_server.rb +2 -2
- metadata +6 -6
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Billy::Handler do
|
4
|
-
let(:handler) { Class.new{ include Billy::Handler }.new }
|
4
|
+
let(:handler) { Class.new { include Billy::Handler }.new }
|
5
5
|
it '#handle_request raises an error if not overridden' do
|
6
|
-
expect(handler.handle_request(nil,nil,nil,nil)).to eql(
|
6
|
+
expect(handler.handle_request(nil, nil, nil, nil)).to eql(error: 'The handler has not overridden the handle_request method!')
|
7
7
|
end
|
8
8
|
|
9
9
|
it '#handles_request returns false by default' do
|
10
|
-
expect(handler.handles_request?(nil,nil,nil,nil)).to be false
|
10
|
+
expect(handler.handles_request?(nil, nil, nil, nil)).to be false
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'responds to #reset' do
|
@@ -2,13 +2,15 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Billy::ProxyHandler do
|
4
4
|
subject { Billy::ProxyHandler.new }
|
5
|
-
let(:request)
|
5
|
+
let(:request) do
|
6
|
+
{
|
6
7
|
method: 'post',
|
7
8
|
url: 'http://example.test:8080/index?some=param',
|
8
|
-
headers: {'Accept-Encoding' => 'gzip',
|
9
|
-
|
9
|
+
headers: { 'Accept-Encoding' => 'gzip',
|
10
|
+
'Cache-Control' => 'no-cache' },
|
10
11
|
body: 'Some body'
|
11
|
-
|
12
|
+
}
|
13
|
+
end
|
12
14
|
|
13
15
|
describe '#handles_request?' do
|
14
16
|
context 'with non-whitelisted requests enabled' do
|
@@ -108,31 +110,31 @@ describe Billy::ProxyHandler do
|
|
108
110
|
header
|
109
111
|
end
|
110
112
|
|
111
|
-
let(:em_response) { double(
|
112
|
-
let(:em_request)
|
113
|
-
double(
|
114
|
-
|
113
|
+
let(:em_response) { double('response') }
|
114
|
+
let(:em_request) do
|
115
|
+
double('EM::HttpRequest', error: nil, response: em_response, response_header: response_header)
|
116
|
+
end
|
115
117
|
|
116
118
|
before do
|
117
119
|
allow(subject).to receive(:handles_request?).and_return(true)
|
118
|
-
allow(em_response).to receive(:force_encoding).and_return(
|
120
|
+
allow(em_response).to receive(:force_encoding).and_return('The response body')
|
119
121
|
allow(EventMachine::HttpRequest).to receive(:new).and_return(em_request)
|
120
122
|
expect(em_request).to receive(:post).and_return(em_request)
|
121
123
|
end
|
122
124
|
|
123
125
|
it 'returns any error in the response' do
|
124
|
-
allow(em_request).to receive(:error).and_return(
|
126
|
+
allow(em_request).to receive(:error).and_return('ERROR!')
|
125
127
|
expect(subject.handle_request(request[:method],
|
126
128
|
request[:url],
|
127
129
|
request[:headers],
|
128
|
-
request[:body])).to eql(
|
130
|
+
request[:body])).to eql(error: "Request to #{request[:url]} failed with error: ERROR!")
|
129
131
|
end
|
130
132
|
|
131
133
|
it 'returns a hashed response if the request succeeds' do
|
132
134
|
expect(subject.handle_request(request[:method],
|
133
135
|
request[:url],
|
134
136
|
request[:headers],
|
135
|
-
request[:body])).to eql(
|
137
|
+
request[:body])).to eql(status: 200, headers: { 'Connection' => 'close' }, content: 'The response body')
|
136
138
|
end
|
137
139
|
|
138
140
|
it 'returns nil if both the error and response are for some reason nil' do
|
@@ -156,10 +158,10 @@ describe Billy::ProxyHandler do
|
|
156
158
|
allow(Billy.config).to receive(:proxied_request_inactivity_timeout).and_return(42)
|
157
159
|
allow(Billy.config).to receive(:proxied_request_connect_timeout).and_return(24)
|
158
160
|
|
159
|
-
expect(EventMachine::HttpRequest).to receive(:new).with(request[:url],
|
160
|
-
|
161
|
-
|
162
|
-
|
161
|
+
expect(EventMachine::HttpRequest).to receive(:new).with(request[:url],
|
162
|
+
inactivity_timeout: 42,
|
163
|
+
connect_timeout: 24
|
164
|
+
)
|
163
165
|
|
164
166
|
subject.handle_request(request[:method],
|
165
167
|
request[:url],
|
@@ -22,15 +22,17 @@ describe Billy::RequestHandler do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'with stubbed handlers' do
|
25
|
-
let(:args) {
|
26
|
-
let(:stub_handler) { double(
|
27
|
-
let(:cache_handler) { double(
|
28
|
-
let(:proxy_handler) { double(
|
29
|
-
let(:handlers)
|
30
|
-
|
31
|
-
:
|
32
|
-
:
|
33
|
-
|
25
|
+
let(:args) { %w(get url headers body) }
|
26
|
+
let(:stub_handler) { double('StubHandler') }
|
27
|
+
let(:cache_handler) { double('CacheHandler') }
|
28
|
+
let(:proxy_handler) { double('ProxyHandler') }
|
29
|
+
let(:handlers) do
|
30
|
+
{
|
31
|
+
stubs: stub_handler,
|
32
|
+
cache: cache_handler,
|
33
|
+
proxy: proxy_handler
|
34
|
+
}
|
35
|
+
end
|
34
36
|
|
35
37
|
before do
|
36
38
|
allow(subject).to receive(:handlers).and_return(handlers)
|
@@ -38,82 +40,82 @@ describe Billy::RequestHandler do
|
|
38
40
|
|
39
41
|
describe '#handles_request?' do
|
40
42
|
it 'returns false if no handlers handle the request' do
|
41
|
-
handlers.each do |
|
43
|
+
handlers.each do |_key, handler|
|
42
44
|
expect(handler).to receive(:handles_request?).with(*args).and_return(false)
|
43
45
|
end
|
44
46
|
expect(subject.handles_request?(*args)).to be false
|
45
47
|
end
|
46
48
|
|
47
49
|
it 'returns true immediately if the stub handler handles the request' do
|
48
|
-
expect(stub_handler).to
|
49
|
-
expect(cache_handler).to_not
|
50
|
-
expect(proxy_handler).to_not
|
50
|
+
expect(stub_handler).to receive(:handles_request?).with(*args).and_return(true)
|
51
|
+
expect(cache_handler).to_not receive(:handles_request?)
|
52
|
+
expect(proxy_handler).to_not receive(:handles_request?)
|
51
53
|
expect(subject.handles_request?(*args)).to be true
|
52
54
|
end
|
53
55
|
|
54
56
|
it 'returns true if the cache handler handles the request' do
|
55
|
-
expect(stub_handler).to
|
56
|
-
expect(cache_handler).to
|
57
|
-
expect(proxy_handler).to_not
|
57
|
+
expect(stub_handler).to receive(:handles_request?).with(*args).and_return(false)
|
58
|
+
expect(cache_handler).to receive(:handles_request?).with(*args).and_return(true)
|
59
|
+
expect(proxy_handler).to_not receive(:handles_request?)
|
58
60
|
expect(subject.handles_request?(*args)).to be true
|
59
61
|
end
|
60
62
|
|
61
63
|
it 'returns true if the proxy handler handles the request' do
|
62
|
-
expect(stub_handler).to
|
63
|
-
expect(cache_handler).to
|
64
|
-
expect(proxy_handler).to
|
64
|
+
expect(stub_handler).to receive(:handles_request?).with(*args).and_return(false)
|
65
|
+
expect(cache_handler).to receive(:handles_request?).with(*args).and_return(false)
|
66
|
+
expect(proxy_handler).to receive(:handles_request?).with(*args).and_return(true)
|
65
67
|
expect(subject.handles_request?(*args)).to be true
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
69
71
|
describe '#handle_request' do
|
70
72
|
it 'returns stubbed responses' do
|
71
|
-
expect(stub_handler).to
|
72
|
-
expect(cache_handler).to_not
|
73
|
-
expect(proxy_handler).to_not
|
74
|
-
expect(subject.handle_request(*args)).to eql
|
73
|
+
expect(stub_handler).to receive(:handle_request).with(*args).and_return('foo')
|
74
|
+
expect(cache_handler).to_not receive(:handle_request)
|
75
|
+
expect(proxy_handler).to_not receive(:handle_request)
|
76
|
+
expect(subject.handle_request(*args)).to eql 'foo'
|
75
77
|
end
|
76
78
|
|
77
79
|
it 'returns cached responses' do
|
78
|
-
expect(stub_handler).to
|
79
|
-
expect(cache_handler).to
|
80
|
-
expect(proxy_handler).to_not
|
81
|
-
expect(subject.handle_request(*args)).to eql
|
80
|
+
expect(stub_handler).to receive(:handle_request).with(*args)
|
81
|
+
expect(cache_handler).to receive(:handle_request).with(*args).and_return('bar')
|
82
|
+
expect(proxy_handler).to_not receive(:handle_request)
|
83
|
+
expect(subject.handle_request(*args)).to eql 'bar'
|
82
84
|
end
|
83
85
|
|
84
86
|
it 'returns proxied responses' do
|
85
|
-
expect(stub_handler).to
|
86
|
-
expect(cache_handler).to
|
87
|
-
expect(proxy_handler).to
|
88
|
-
expect(subject.handle_request(*args)).to eql
|
87
|
+
expect(stub_handler).to receive(:handle_request).with(*args)
|
88
|
+
expect(cache_handler).to receive(:handle_request).with(*args)
|
89
|
+
expect(proxy_handler).to receive(:handle_request).with(*args).and_return('baz')
|
90
|
+
expect(subject.handle_request(*args)).to eql 'baz'
|
89
91
|
end
|
90
92
|
|
91
93
|
it 'returns an error hash if request is not handled' do
|
92
|
-
expect(stub_handler).to
|
93
|
-
expect(cache_handler).to
|
94
|
-
expect(proxy_handler).to
|
95
|
-
expect(subject.handle_request(*args)).to eql(
|
94
|
+
expect(stub_handler).to receive(:handle_request).with(*args)
|
95
|
+
expect(cache_handler).to receive(:handle_request).with(*args)
|
96
|
+
expect(proxy_handler).to receive(:handle_request).with(*args)
|
97
|
+
expect(subject.handle_request(*args)).to eql(error: 'Connection to url not cached and new http connections are disabled')
|
96
98
|
end
|
97
99
|
|
98
100
|
it 'returns an error hash with body message if POST request is not handled' do
|
99
101
|
args[0] = 'post'
|
100
|
-
expect(stub_handler).to
|
101
|
-
expect(cache_handler).to
|
102
|
-
expect(proxy_handler).to
|
103
|
-
expect(subject.handle_request(*args)).to eql(
|
102
|
+
expect(stub_handler).to receive(:handle_request).with(*args)
|
103
|
+
expect(cache_handler).to receive(:handle_request).with(*args)
|
104
|
+
expect(proxy_handler).to receive(:handle_request).with(*args)
|
105
|
+
expect(subject.handle_request(*args)).to eql(error: "Connection to url with body 'body' not cached and new http connections are disabled")
|
104
106
|
end
|
105
107
|
end
|
106
108
|
|
107
109
|
describe '#stub' do
|
108
110
|
it 'delegates to the stub_handler' do
|
109
|
-
expect(stub_handler).to receive(:stub).with(
|
110
|
-
subject.stub(
|
111
|
+
expect(stub_handler).to receive(:stub).with('some args')
|
112
|
+
subject.stub('some args')
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
114
116
|
describe '#reset' do
|
115
117
|
it 'resets all of the handlers' do
|
116
|
-
handlers.each do |
|
118
|
+
handlers.each do |_key, handler|
|
117
119
|
expect(handler).to receive(:reset)
|
118
120
|
end
|
119
121
|
subject.reset
|
@@ -2,42 +2,44 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Billy::StubHandler do
|
4
4
|
let(:handler) { Billy::StubHandler.new }
|
5
|
-
let(:request)
|
5
|
+
let(:request) do
|
6
|
+
{
|
6
7
|
method: 'GET',
|
7
8
|
url: 'http://example.test:8080/index?some=param',
|
8
|
-
headers: {'Accept-Encoding' => 'gzip',
|
9
|
-
|
9
|
+
headers: { 'Accept-Encoding' => 'gzip',
|
10
|
+
'Cache-Control' => 'no-cache' },
|
10
11
|
body: 'Some body'
|
11
|
-
|
12
|
+
}
|
13
|
+
end
|
12
14
|
|
13
15
|
describe '#handles_request?' do
|
14
16
|
it 'handles the request if it is stubbed' do
|
15
|
-
expect(handler).to receive(:find_stub).and_return(
|
16
|
-
expect(handler.handles_request?(nil,nil,nil,nil)).to be true
|
17
|
+
expect(handler).to receive(:find_stub).and_return('a stub')
|
18
|
+
expect(handler.handles_request?(nil, nil, nil, nil)).to be true
|
17
19
|
end
|
18
20
|
|
19
21
|
it 'does not handle the request if it is not stubbed' do
|
20
22
|
expect(handler).to receive(:find_stub).and_return(nil)
|
21
|
-
expect(handler.handles_request?(nil,nil,nil,nil)).to be false
|
23
|
+
expect(handler.handles_request?(nil, nil, nil, nil)).to be false
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
27
|
describe '#handle_request' do
|
26
28
|
it 'returns nil if the request is not stubbed' do
|
27
29
|
expect(handler).to receive(:handles_request?).and_return(false)
|
28
|
-
expect(handler.handle_request(nil,nil,nil,nil)).to be nil
|
30
|
+
expect(handler.handle_request(nil, nil, nil, nil)).to be nil
|
29
31
|
end
|
30
32
|
|
31
33
|
it 'returns a response hash if the request is stubbed' do
|
32
|
-
stub = double(
|
34
|
+
stub = double('stub', call: [200, { 'Content-Type' => 'application/json' }, 'Some content'])
|
33
35
|
expect(handler).to receive(:handles_request?).and_return(true)
|
34
36
|
expect(handler).to receive(:find_stub).and_return(stub)
|
35
37
|
expect(handler.handle_request('GET',
|
36
38
|
request[:url],
|
37
39
|
request[:headers],
|
38
|
-
request[:body])).to eql(
|
39
|
-
|
40
|
-
|
40
|
+
request[:body])).to eql(status: 200,
|
41
|
+
headers: { 'Content-Type' => 'application/json' },
|
42
|
+
content: 'Some content')
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
@@ -3,27 +3,27 @@ require 'spec_helper'
|
|
3
3
|
describe Billy::ProxyRequestStub do
|
4
4
|
context '#matches?' do
|
5
5
|
it 'should match urls and methods' do
|
6
|
-
expect(Billy::ProxyRequestStub.new('http://example.com')
|
7
|
-
matches?('GET', 'http://example.com')).to be
|
8
|
-
expect(Billy::ProxyRequestStub.new('http://example.com')
|
9
|
-
matches?('POST', 'http://example.com')).to_not be
|
10
|
-
|
11
|
-
expect(Billy::ProxyRequestStub.new('http://example.com', :
|
12
|
-
matches?('GET', 'http://example.com')).to be
|
13
|
-
expect(Billy::ProxyRequestStub.new('http://example.com', :
|
14
|
-
matches?('GET', 'http://example.com')).to_not be
|
15
|
-
|
16
|
-
expect(Billy::ProxyRequestStub.new('http://example.com', :
|
17
|
-
matches?('POST', 'http://example.com')).to be
|
18
|
-
expect(Billy::ProxyRequestStub.new('http://fooxample.com', :
|
19
|
-
matches?('POST', 'http://example.com')).to_not be
|
6
|
+
expect(Billy::ProxyRequestStub.new('http://example.com')
|
7
|
+
.matches?('GET', 'http://example.com')).to be
|
8
|
+
expect(Billy::ProxyRequestStub.new('http://example.com')
|
9
|
+
.matches?('POST', 'http://example.com')).to_not be
|
10
|
+
|
11
|
+
expect(Billy::ProxyRequestStub.new('http://example.com', method: :get)
|
12
|
+
.matches?('GET', 'http://example.com')).to be
|
13
|
+
expect(Billy::ProxyRequestStub.new('http://example.com', method: :post)
|
14
|
+
.matches?('GET', 'http://example.com')).to_not be
|
15
|
+
|
16
|
+
expect(Billy::ProxyRequestStub.new('http://example.com', method: :post)
|
17
|
+
.matches?('POST', 'http://example.com')).to be
|
18
|
+
expect(Billy::ProxyRequestStub.new('http://fooxample.com', method: :post)
|
19
|
+
.matches?('POST', 'http://example.com')).to_not be
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should match regexps' do
|
23
|
-
expect(Billy::ProxyRequestStub.new(/http:\/\/.+\.com/, :
|
24
|
-
matches?('POST', 'http://example.com')).to be
|
25
|
-
expect(Billy::ProxyRequestStub.new(/http:\/\/.+\.co\.uk/, :
|
26
|
-
matches?('GET', 'http://example.com')).to_not be
|
23
|
+
expect(Billy::ProxyRequestStub.new(/http:\/\/.+\.com/, method: :post)
|
24
|
+
.matches?('POST', 'http://example.com')).to be
|
25
|
+
expect(Billy::ProxyRequestStub.new(/http:\/\/.+\.co\.uk/, method: :get)
|
26
|
+
.matches?('GET', 'http://example.com')).to_not be
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'should match up to but not including query strings' do
|
@@ -34,11 +34,24 @@ describe Billy::ProxyRequestStub do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
context "#
|
37
|
+
context "#matches? (with strip_query_params false in config)" do
|
38
|
+
before do
|
39
|
+
Billy.config.strip_query_params = false
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should not match up to request with query strings' do
|
43
|
+
stub = Billy::ProxyRequestStub.new('http://example.com/foo/bar/')
|
44
|
+
expect(stub.matches?('GET', 'http://example.com/foo/')).to_not be
|
45
|
+
expect(stub.matches?('GET', 'http://example.com/foo/bar/')).to be
|
46
|
+
expect(stub.matches?('GET', 'http://example.com/foo/bar/?baz=bap')).to_not be
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context '#call (without #and_return)' do
|
38
51
|
let(:subject) { Billy::ProxyRequestStub.new('url') }
|
39
52
|
|
40
|
-
it
|
41
|
-
expect(subject.call({}, {}, nil)).to eql [204, {
|
53
|
+
it 'returns a 204 empty response' do
|
54
|
+
expect(subject.call({}, {}, nil)).to eql [204, { 'Content-Type' => 'text/plain' }, '']
|
42
55
|
end
|
43
56
|
end
|
44
57
|
|
@@ -46,7 +59,7 @@ describe Billy::ProxyRequestStub do
|
|
46
59
|
let(:subject) { Billy::ProxyRequestStub.new('url') }
|
47
60
|
|
48
61
|
it 'should generate bare responses' do
|
49
|
-
subject.and_return :
|
62
|
+
subject.and_return body: 'baz foo bar'
|
50
63
|
expect(subject.call({}, {}, nil)).to eql [
|
51
64
|
200,
|
52
65
|
{},
|
@@ -55,75 +68,75 @@ describe Billy::ProxyRequestStub do
|
|
55
68
|
end
|
56
69
|
|
57
70
|
it 'should generate text responses' do
|
58
|
-
subject.and_return :
|
71
|
+
subject.and_return text: 'foo bar baz'
|
59
72
|
expect(subject.call({}, {}, nil)).to eql [
|
60
73
|
200,
|
61
|
-
{'Content-Type' => 'text/plain'},
|
74
|
+
{ 'Content-Type' => 'text/plain' },
|
62
75
|
'foo bar baz'
|
63
76
|
]
|
64
77
|
end
|
65
78
|
|
66
79
|
it 'should generate JSON responses' do
|
67
|
-
subject.and_return :
|
80
|
+
subject.and_return json: { foo: 'bar' }
|
68
81
|
expect(subject.call({}, {}, nil)).to eql [
|
69
82
|
200,
|
70
|
-
{'Content-Type' => 'application/json'},
|
83
|
+
{ 'Content-Type' => 'application/json' },
|
71
84
|
'{"foo":"bar"}'
|
72
85
|
]
|
73
86
|
end
|
74
87
|
|
75
88
|
context 'JSONP' do
|
76
89
|
it 'should generate JSONP responses' do
|
77
|
-
subject.and_return :
|
90
|
+
subject.and_return jsonp: { foo: 'bar' }
|
78
91
|
expect(subject.call({ 'callback' => ['baz'] }, {}, nil)).to eql [
|
79
92
|
200,
|
80
|
-
{'Content-Type' => 'application/javascript'},
|
93
|
+
{ 'Content-Type' => 'application/javascript' },
|
81
94
|
'baz({"foo":"bar"})'
|
82
95
|
]
|
83
96
|
end
|
84
97
|
|
85
98
|
it 'should generate JSONP responses with custom callback parameter' do
|
86
|
-
subject.and_return :
|
99
|
+
subject.and_return jsonp: { foo: 'bar' }, callback_param: 'cb'
|
87
100
|
expect(subject.call({ 'cb' => ['bap'] }, {}, nil)).to eql [
|
88
101
|
200,
|
89
|
-
{'Content-Type' => 'application/javascript'},
|
102
|
+
{ 'Content-Type' => 'application/javascript' },
|
90
103
|
'bap({"foo":"bar"})'
|
91
104
|
]
|
92
105
|
end
|
93
106
|
|
94
107
|
it 'should generate JSONP responses with custom callback name' do
|
95
|
-
subject.and_return :
|
108
|
+
subject.and_return jsonp: { foo: 'bar' }, callback: 'cb'
|
96
109
|
expect(subject.call({}, {}, nil)).to eql [
|
97
110
|
200,
|
98
|
-
{'Content-Type' => 'application/javascript'},
|
111
|
+
{ 'Content-Type' => 'application/javascript' },
|
99
112
|
'cb({"foo":"bar"})'
|
100
113
|
]
|
101
114
|
end
|
102
115
|
end
|
103
116
|
|
104
117
|
it 'should generate redirection responses' do
|
105
|
-
subject.and_return :
|
118
|
+
subject.and_return redirect_to: 'http://example.com'
|
106
119
|
expect(subject.call({}, {}, nil)).to eql [
|
107
120
|
302,
|
108
|
-
{'Location' => 'http://example.com'},
|
121
|
+
{ 'Location' => 'http://example.com' },
|
109
122
|
nil
|
110
123
|
]
|
111
124
|
end
|
112
125
|
|
113
126
|
it 'should set headers' do
|
114
|
-
subject.and_return :
|
127
|
+
subject.and_return text: 'foo', headers: { 'HTTP-X-Foo' => 'bar' }
|
115
128
|
expect(subject.call({}, {}, nil)).to eql [
|
116
129
|
200,
|
117
|
-
{'Content-Type' => 'text/plain', 'HTTP-X-Foo' => 'bar'},
|
130
|
+
{ 'Content-Type' => 'text/plain', 'HTTP-X-Foo' => 'bar' },
|
118
131
|
'foo'
|
119
132
|
]
|
120
133
|
end
|
121
134
|
|
122
135
|
it 'should set status codes' do
|
123
|
-
subject.and_return :
|
136
|
+
subject.and_return text: 'baz', code: 410
|
124
137
|
expect(subject.call({}, {}, nil)).to eql [
|
125
138
|
410,
|
126
|
-
{'Content-Type' => 'text/plain'},
|
139
|
+
{ 'Content-Type' => 'text/plain' },
|
127
140
|
'baz'
|
128
141
|
]
|
129
142
|
end
|
@@ -133,15 +146,15 @@ describe Billy::ProxyRequestStub do
|
|
133
146
|
expected_headers = { 'header1' => 'three', 'header2' => 'four' }
|
134
147
|
expected_body = 'body text'
|
135
148
|
|
136
|
-
subject.and_return(
|
149
|
+
subject.and_return(proc do |params, headers, body|
|
137
150
|
expect(params).to eql expected_params
|
138
151
|
expect(headers).to eql expected_headers
|
139
152
|
expect(body).to eql 'body text'
|
140
|
-
{:
|
141
|
-
|
153
|
+
{ code: 418, text: 'success' }
|
154
|
+
end)
|
142
155
|
expect(subject.call(expected_params, expected_headers, expected_body)).to eql [
|
143
156
|
418,
|
144
|
-
{'Content-Type' => 'text/plain'},
|
157
|
+
{ 'Content-Type' => 'text/plain' },
|
145
158
|
'success'
|
146
159
|
]
|
147
160
|
end
|