puffing-billy 0.12.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/CHANGELOG.md +7 -0
- data/README.md +11 -0
- data/lib/billy/browsers/watir.rb +4 -3
- data/lib/billy/handlers/request_handler.rb +3 -1
- data/lib/billy/handlers/stub_handler.rb +4 -0
- data/lib/billy/init/rspec.rb +1 -1
- data/lib/billy/proxy.rb +1 -1
- data/lib/billy/version.rb +1 -1
- data/puffing-billy.gemspec +3 -4
- data/spec/features/examples/facebook_api_spec.rb +2 -1
- data/spec/lib/billy/handlers/request_handler_spec.rb +15 -0
- data/spec/lib/billy/handlers/stub_handler_spec.rb +31 -0
- metadata +13 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dcfc87385c54e63251237553f7ceb2f71d072dc
|
4
|
+
data.tar.gz: e2eb85158a087358686d7501d86809768dd838cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 445dc2a1115c10d077561903dbcd58e418eb01c810542bf6c7d2256d1653afdf0ff0e41d0bd9e077f2d525999a2759b5e22f70ae7b04657720a5c0f69e685123
|
7
|
+
data.tar.gz: ce5f7ee19a3c7fdad6c60fbe6b8c5fd28b43c4219e4d039d93ae3b90c444d2285df27f447fb77eed61fa835b894de1ac247bdc65642d6222d2e4b2f31bd9eba9
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
v1.0.0, 2018-03-05
|
2
|
+
-------------------
|
3
|
+
* Add #unstub method, replace deprecated watir-webdriver with watir [#212](https://github.com/oesmith/puffing-billy/pull/212)
|
4
|
+
* Watir upgrade requires puffing-billy to drop support for ruby 1.9.3
|
5
|
+
* Prepend rspec puffing billy reset hook [#227](https://github.com/oesmith/puffing-billy/pull/227)
|
6
|
+
* Catch unhandled request handler errors [#228](https://github.com/oesmith/puffing-billy/pull/228)
|
7
|
+
|
1
8
|
v0.12.0, 2018-02-07
|
2
9
|
-------------------
|
3
10
|
* Follow cache file symlinks [#220](https://github.com/oesmith/puffing-billy/pull/220)
|
data/README.md
CHANGED
@@ -128,6 +128,17 @@ proxy.stub('http://example.com/api', :method => :options).and_return(
|
|
128
128
|
Stubs are reset between tests. Any requests that are not stubbed will be
|
129
129
|
proxied to the remote server.
|
130
130
|
|
131
|
+
If for any reason you'd need to reset stubs manually you can do it in two ways:
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
# reset a single stub
|
135
|
+
example_stub = proxy.stub('http://example.com/text/').and_return(:text => 'Foobar')
|
136
|
+
proxy.unstub example_stub
|
137
|
+
|
138
|
+
# reset all stubs
|
139
|
+
proxy.reset
|
140
|
+
```
|
141
|
+
|
131
142
|
## Cucumber Usage
|
132
143
|
|
133
144
|
An example feature:
|
data/lib/billy/browsers/watir.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'billy'
|
2
|
-
require 'watir
|
2
|
+
require 'watir'
|
3
3
|
|
4
4
|
module Billy
|
5
5
|
module Browsers
|
@@ -25,8 +25,9 @@ module Billy
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def configure_phantomjs(args)
|
28
|
-
args[:
|
29
|
-
args[:args]
|
28
|
+
args[:driver_opts] ||= {}
|
29
|
+
args[:driver_opts][:args] ||= []
|
30
|
+
args[:driver_opts][:args] += %W[--proxy=#{Billy.proxy.host}:#{Billy.proxy.port}]
|
30
31
|
args
|
31
32
|
end
|
32
33
|
|
@@ -5,7 +5,7 @@ module Billy
|
|
5
5
|
extend Forwardable
|
6
6
|
include Handler
|
7
7
|
|
8
|
-
def_delegators :stub_handler, :stub
|
8
|
+
def_delegators :stub_handler, :stub, :unstub
|
9
9
|
|
10
10
|
def handlers
|
11
11
|
@handlers ||= { stubs: StubHandler.new,
|
@@ -23,6 +23,8 @@ module Billy
|
|
23
23
|
|
24
24
|
body_msg = Billy.config.cache_request_body_methods.include?(method) ? " with body '#{body}'" : ''
|
25
25
|
{ error: "Connection to #{url}#{body_msg} not cached and new http connections are disabled" }
|
26
|
+
rescue => error
|
27
|
+
{ error: error.message }
|
26
28
|
end
|
27
29
|
|
28
30
|
def handles_request?(method, url, headers, body)
|
data/lib/billy/init/rspec.rb
CHANGED
data/lib/billy/proxy.rb
CHANGED
@@ -6,7 +6,7 @@ module Billy
|
|
6
6
|
extend Forwardable
|
7
7
|
attr_reader :request_handler
|
8
8
|
|
9
|
-
def_delegators :request_handler, :stub, :reset, :reset_cache, :restore_cache, :handle_request
|
9
|
+
def_delegators :request_handler, :stub, :unstub, :reset, :reset_cache, :restore_cache, :handle_request
|
10
10
|
|
11
11
|
def initialize
|
12
12
|
@request_handler = Billy::RequestHandler.new
|
data/lib/billy/version.rb
CHANGED
data/puffing-billy.gemspec
CHANGED
@@ -28,10 +28,9 @@ Gem::Specification.new do |gem|
|
|
28
28
|
gem.add_development_dependency 'rb-inotify'
|
29
29
|
gem.add_development_dependency 'pry'
|
30
30
|
gem.add_development_dependency 'cucumber'
|
31
|
-
gem.add_development_dependency 'watir
|
32
|
-
|
33
|
-
gem.add_runtime_dependency '
|
34
|
-
gem.add_runtime_dependency 'eventmachine', '1.2.0.1'
|
31
|
+
gem.add_development_dependency 'watir', '~> 6.10.0'
|
32
|
+
gem.add_runtime_dependency 'addressable', '~> 2.5'
|
33
|
+
gem.add_runtime_dependency 'eventmachine', '~> 1.0.4'
|
35
34
|
gem.add_runtime_dependency 'em-synchrony'
|
36
35
|
gem.add_runtime_dependency 'em-http-request', '~> 1.1', '>= 1.1.0'
|
37
36
|
gem.add_runtime_dependency 'eventmachine_httpserver'
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'base64'
|
3
3
|
|
4
|
-
|
4
|
+
# FIXME: Looks like Facebook API changed recently and this test fails consistently now -RS 2018-03-05
|
5
|
+
xdescribe 'Facebook API example', type: :feature, js: true do
|
5
6
|
before do
|
6
7
|
proxy.stub('https://www.facebook.com:443/dialog/oauth').and_return(proc do |params, _, _|
|
7
8
|
# mock a signed request from facebook. the JS api never verifies the
|
@@ -104,6 +104,21 @@ describe Billy::RequestHandler do
|
|
104
104
|
expect(proxy_handler).to receive(:handle_request).with(*args)
|
105
105
|
expect(subject.handle_request(*args)).to eql(error: "Connection to url with body 'body' not cached and new http connections are disabled")
|
106
106
|
end
|
107
|
+
|
108
|
+
it 'returns an error hash on unhandled exceptions' do
|
109
|
+
# Allow handling requests initially
|
110
|
+
allow(stub_handler).to receive(:handle_request)
|
111
|
+
allow(cache_handler).to receive(:handle_request)
|
112
|
+
|
113
|
+
allow(proxy_handler).to receive(:handle_request).and_raise("Any Proxy Error")
|
114
|
+
expect(subject.handle_request(*args)).to eql(error: "Any Proxy Error")
|
115
|
+
|
116
|
+
allow(cache_handler).to receive(:handle_request).and_raise("Any Cache Error")
|
117
|
+
expect(subject.handle_request(*args)).to eql(error: "Any Cache Error")
|
118
|
+
|
119
|
+
allow(stub_handler).to receive(:handle_request).and_raise("Any Stub Error")
|
120
|
+
expect(subject.handle_request(*args)).to eql(error: "Any Stub Error")
|
121
|
+
end
|
107
122
|
end
|
108
123
|
|
109
124
|
describe '#stub' do
|
@@ -63,6 +63,37 @@ describe Billy::StubHandler do
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
+
describe '#unstub' do
|
67
|
+
let!(:get_stub) { handler.stub('http://example.get/') }
|
68
|
+
let!(:post_stub) { handler.stub('http://example.post/', method: :post) }
|
69
|
+
|
70
|
+
it 'removes a single stub' do
|
71
|
+
expect(handler.handles_request?('GET',
|
72
|
+
'http://example.get/',
|
73
|
+
request[:headers],
|
74
|
+
request[:body])).to be true
|
75
|
+
expect(handler.handles_request?('POST',
|
76
|
+
'http://example.post/',
|
77
|
+
request[:headers],
|
78
|
+
request[:body])).to be true
|
79
|
+
|
80
|
+
handler.unstub get_stub
|
81
|
+
|
82
|
+
expect(handler.handles_request?('GET',
|
83
|
+
'http://example.get/',
|
84
|
+
request[:headers],
|
85
|
+
request[:body])).to be false
|
86
|
+
expect(handler.handles_request?('POST',
|
87
|
+
'http://example.post/',
|
88
|
+
request[:headers],
|
89
|
+
request[:body])).to be true
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'does not raise errors for not existing stub' do
|
93
|
+
expect { handler.unstub 'http://example.option/' }.not_to raise_error
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
66
97
|
it '#stubs requests' do
|
67
98
|
handler.stub('http://example.test:8080/index')
|
68
99
|
expect(handler.handles_request?('GET',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puffing-billy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Olly Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -179,53 +179,47 @@ dependencies:
|
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name: watir
|
182
|
+
name: watir
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: 6.10.0
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
194
|
+
version: 6.10.0
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: addressable
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: '2.
|
202
|
-
- - ">="
|
203
|
-
- !ruby/object:Gem::Version
|
204
|
-
version: 2.4.0
|
201
|
+
version: '2.5'
|
205
202
|
type: :runtime
|
206
203
|
prerelease: false
|
207
204
|
version_requirements: !ruby/object:Gem::Requirement
|
208
205
|
requirements:
|
209
206
|
- - "~>"
|
210
207
|
- !ruby/object:Gem::Version
|
211
|
-
version: '2.
|
212
|
-
- - ">="
|
213
|
-
- !ruby/object:Gem::Version
|
214
|
-
version: 2.4.0
|
208
|
+
version: '2.5'
|
215
209
|
- !ruby/object:Gem::Dependency
|
216
210
|
name: eventmachine
|
217
211
|
requirement: !ruby/object:Gem::Requirement
|
218
212
|
requirements:
|
219
|
-
- -
|
213
|
+
- - "~>"
|
220
214
|
- !ruby/object:Gem::Version
|
221
|
-
version: 1.
|
215
|
+
version: 1.0.4
|
222
216
|
type: :runtime
|
223
217
|
prerelease: false
|
224
218
|
version_requirements: !ruby/object:Gem::Requirement
|
225
219
|
requirements:
|
226
|
-
- -
|
220
|
+
- - "~>"
|
227
221
|
- !ruby/object:Gem::Version
|
228
|
-
version: 1.
|
222
|
+
version: 1.0.4
|
229
223
|
- !ruby/object:Gem::Dependency
|
230
224
|
name: em-synchrony
|
231
225
|
requirement: !ruby/object:Gem::Requirement
|