agile-proxy 0.1.19 → 0.1.20
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/README.md +1 -0
- data/db/migrations/20150221152500_add_record_requests_to_request_specs.rb +7 -0
- data/lib/agile_proxy/api/request_specs.rb +1 -1
- data/lib/agile_proxy/handlers/request_handler.rb +3 -2
- data/lib/agile_proxy/handlers/stub_handler.rb +1 -1
- data/lib/agile_proxy/version.rb +1 -1
- data/spec/integration/helpers/request_spec_helper.rb +1 -0
- data/spec/integration/specs/lib/server_spec.rb +8 -0
- data/spec/unit/agile_proxy/api/request_specs_spec.rb +1 -1
- data/spec/unit/agile_proxy/handlers/request_handler_spec.rb +10 -2
- data/spec/unit/agile_proxy/handlers/stub_handler_spec.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7faec1aa540783f6fe42b674e1aeea119a470b15
|
4
|
+
data.tar.gz: 1b01c98d23e6c95eb894601b4b05c3420a4219df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43f930138c348608ef2972536c2192c08716b4603a2bb9234108926da5d2d8e532a9618082a7a54b7f1212e5711d35eb79e0fcd455a31aa33dac3895ced35789
|
7
|
+
data.tar.gz: bfbdf55b64323489c085822e565f1a32f2f3447684142f36c9bf48de9e2a7a9ffc7379bf7b400450e5dafbfe4ce1b799225c4c0bb4754d92950ee3ceb56a574e
|
data/README.md
CHANGED
@@ -121,4 +121,5 @@ v0.1.15 - 0.1.17 - No functionality change, these were just to try and please tr
|
|
121
121
|
v0.1.18 - Fixed issue with integration test which was showing up now that travis is working again
|
122
122
|
v0.1.19 - Recordings now record the request spec id.
|
123
123
|
Recordings can now be accessed via /request_specs/:request_spec_id/recordings to provide recordings specific to the request spec
|
124
|
+
v0.1.20 - An individual request spec can now be set to 'record_requests' rather than requiring the whole application to be in record mode which slows down every request
|
124
125
|
|
@@ -22,7 +22,7 @@ module AgileProxy
|
|
22
22
|
@permitted_params ||= declared(
|
23
23
|
params,
|
24
24
|
{ include_missing: false },
|
25
|
-
[:spec, :note, :response, :http_method, :url, :url_type, :conditions]
|
25
|
+
[:spec, :note, :response, :http_method, :url, :url_type, :conditions, :record_requests]
|
26
26
|
)
|
27
27
|
end
|
28
28
|
|
@@ -35,7 +35,8 @@ module AgileProxy
|
|
35
35
|
"Connection to #{request.url}#{body} not stubbed and new http connections are disabled"
|
36
36
|
]
|
37
37
|
end
|
38
|
-
|
38
|
+
request_spec = env['agile_proxy.request_spec']
|
39
|
+
if application.record_requests || (request_spec && request_spec.record_requests)
|
39
40
|
application.recordings.create request_headers: request.headers,
|
40
41
|
request_body: body,
|
41
42
|
request_url: request.url,
|
@@ -43,7 +44,7 @@ module AgileProxy
|
|
43
44
|
response_headers: rack_response[1],
|
44
45
|
response_body: rack_response[2],
|
45
46
|
response_status: rack_response[0],
|
46
|
-
request_spec_id:
|
47
|
+
request_spec_id: request_spec ? request_spec.id : nil
|
47
48
|
end
|
48
49
|
rack_response
|
49
50
|
end
|
@@ -62,7 +62,7 @@ module AgileProxy
|
|
62
62
|
route_spec = {
|
63
63
|
path => proc do |router_env|
|
64
64
|
AgileProxy.log(:info, "agile-proxy: STUB #{method} for '#{request.url}'")
|
65
|
-
router_env['agile_proxy.
|
65
|
+
router_env['agile_proxy.request_spec'] = spec
|
66
66
|
spec.call(HashWithIndifferentAccess.new(router_env['action_dispatch.request.path_parameters'].merge(router_env['action_dispatch.request.query_parameters']).merge(router_env['action_dispatch.request.request_parameters'])), headers, body)
|
67
67
|
end
|
68
68
|
}
|
data/lib/agile_proxy/version.rb
CHANGED
@@ -57,6 +57,7 @@ module AgileProxy
|
|
57
57
|
[@http_url, @https_url, @http_url_no_proxy, @https_url_no_proxy].each do |url|
|
58
58
|
@stubs_with_recordings.push Spec.for url, 'index_old', create_request_spec(url: "#{url}/index.html", response: { content_type: 'text/html', content: '<html><body>This Is An Older Mock</body></html>' }) #This is intentional - the system should always use the latest
|
59
59
|
@stubs_with_recordings.push Spec.for url, 'index', create_request_spec(url: "#{url}/index.html", response: { content_type: 'text/html', content: '<html><body>Mocked Content</body></html>' })
|
60
|
+
@stubs_with_recordings.push Spec.for url, 'index_recording', create_request_spec(url: "#{url}/indexRecording.html", response: { content_type: 'text/html', content: '<html><body>Mocked Content</body></html>' })
|
60
61
|
@stubs_with_recordings.push Spec.for url, 'api_forums', create_request_spec(url: "#{url}/api/forums", response: { content_type: 'application/json', content: JSON.pretty_generate(forums: [], total: 0) })
|
61
62
|
@stubs_with_recordings.push Spec.for url, 'api_forums_post', create_request_spec(url: "#{url}/api/forums", http_method: 'POST', response: { content_type: 'application/json', content: '{"created": true}' })
|
62
63
|
@stubs_with_recordings.push Spec.for url, 'api_forum_post', create_request_spec(url: "#{url}/api/forums/:forum_id/:post_id", response: { content_type: 'text/html', content: '<html><body><h1>Sorted By: {{sort}}</h1><h2>{{forum_id}}</h2><h3>{{post_id}}</h3></body></html>', is_template: true })
|
@@ -65,6 +65,14 @@ shared_examples_for 'a request stub' do |options = {}|
|
|
65
65
|
expect(http.get('/index.html').status).to eql 200
|
66
66
|
end
|
67
67
|
|
68
|
+
#TODO When time allows, work out how to easily test this as the stubs are not recorded for anything but recorded tests
|
69
|
+
#the lookup table would need to contain all stubs and we would need a way of indexing them to allow the test to find
|
70
|
+
# the correct one.
|
71
|
+
xit 'Should record a stub if specified in the stub irrespective of whether app is recording or not' do
|
72
|
+
expect(http.get('/indexRecording.html').status).to eql 200
|
73
|
+
expect(recordings_for('index_recording')).to include(recordings_matcher_for('index_recording', '/indexRecording.html'))
|
74
|
+
end
|
75
|
+
|
68
76
|
it 'Should stub a different get request with json response' do
|
69
77
|
resp = http.get('/api/forums')
|
70
78
|
expect(ActiveSupport::JSON.decode(resp.body).symbolize_keys).to eql forums: [], total: 0
|
@@ -119,7 +119,7 @@ describe AgileProxy::Api::RequestSpecs, api_test: true do
|
|
119
119
|
end
|
120
120
|
describe 'POST /users/1/applications/1/request_specs' do
|
121
121
|
let(:request_spec_instance) { request_spec_assoc_class.new }
|
122
|
-
let(:persisted_attributes) { { user_id: 1, application_id: 1, url: 'http://www.test.com', http_method: 'GET' } }
|
122
|
+
let(:persisted_attributes) { { user_id: 1, application_id: 1, url: 'http://www.test.com', http_method: 'GET', record_requests: true } }
|
123
123
|
before :each do
|
124
124
|
expect(request_spec_instance).to receive(:as_json).with(default_json_spec).and_return(persisted_attributes)
|
125
125
|
expect(current_user).to receive(:id).and_return(1)
|
@@ -8,12 +8,13 @@ describe AgileProxy::RequestHandler do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
context 'with stubbed handlers' do
|
11
|
-
let(:env) { to_rack_env(url: 'http://dummy.host.com/index.html').merge('agile_proxy.
|
11
|
+
let(:env) { to_rack_env(url: 'http://dummy.host.com/index.html').merge('agile_proxy.request_spec' => mock_request_spec) }
|
12
12
|
let(:stub_handler) { Class.new }
|
13
13
|
let(:proxy_handler) { Class.new }
|
14
14
|
let(:application_class) { Class.new }
|
15
15
|
let(:recordings_class) { Class.new }
|
16
16
|
let(:application) { double('Application', record_requests: false, recordings: recordings_class) }
|
17
|
+
let(:mock_request_spec) {double('RequestSpec', id: 8, record_requests: false)}
|
17
18
|
|
18
19
|
before do
|
19
20
|
stub_const 'AgileProxy::StubHandler', stub_handler
|
@@ -41,13 +42,20 @@ describe AgileProxy::RequestHandler do
|
|
41
42
|
expect(subject.call(env)).to eql [200, {}, 'Some data']
|
42
43
|
end
|
43
44
|
|
44
|
-
it 'Calls application.recordings.create with a reference to the stub if record_requests is true' do
|
45
|
+
it 'Calls application.recordings.create with a reference to the stub if record_requests is true on the application' do
|
45
46
|
allow(application).to receive(:record_requests).and_return true
|
46
47
|
expect(application.recordings).to receive(:create).with(a_hash_including request_spec_id: 8)
|
47
48
|
expect_any_instance_of(stub_handler).to receive(:call).with(env).and_return [200, {}, 'Some data']
|
48
49
|
expect_any_instance_of(proxy_handler).to_not receive(:call)
|
49
50
|
expect(subject.call(env)).to eql [200, {}, 'Some data']
|
50
51
|
end
|
52
|
+
it 'Calls application.recordings.create with a reference to the stub if record_requests is true on the request spec' do
|
53
|
+
allow(mock_request_spec).to receive(:record_requests).and_return true
|
54
|
+
expect(application.recordings).to receive(:create).with(a_hash_including request_spec_id: 8)
|
55
|
+
expect_any_instance_of(stub_handler).to receive(:call).with(env).and_return [200, {}, 'Some data']
|
56
|
+
expect_any_instance_of(proxy_handler).to_not receive(:call)
|
57
|
+
expect(subject.call(env)).to eql [200, {}, 'Some data']
|
58
|
+
end
|
51
59
|
|
52
60
|
end
|
53
61
|
|
@@ -48,7 +48,6 @@ describe AgileProxy::StubHandler do
|
|
48
48
|
request.body.rewind
|
49
49
|
expect(stub).to receive(:call).with({ some: 'param' }, { 'Accept-Encoding' => 'gzip', 'Cache-Control' => 'no-cache' }, body).and_return([200, { 'Content-Type' => 'application/json' }, 'Some Content'])
|
50
50
|
expect(handler.call(request.env)).to eql([200, { 'Content-Type' => 'application/json' }, 'Some Content'])
|
51
|
-
expect(request.env).to include('agile_proxy.request_spec_id' => stub.id)
|
52
51
|
|
53
52
|
end
|
54
53
|
it 'should store the id of the request spec in the rack environment when call is called' do
|
@@ -58,6 +57,7 @@ describe AgileProxy::StubHandler do
|
|
58
57
|
request.body.rewind
|
59
58
|
expect(stub).to receive(:call).with({ some: 'param' }, { 'Accept-Encoding' => 'gzip', 'Cache-Control' => 'no-cache' }, body).and_return([200, { 'Content-Type' => 'application/json' }, 'Some Content'])
|
60
59
|
expect(handler.call(request.env)).to eql([200, { 'Content-Type' => 'application/json' }, 'Some Content'])
|
60
|
+
expect(request.env).to include('agile_proxy.request_spec' => stub)
|
61
61
|
|
62
62
|
end
|
63
63
|
describe 'Routing patterns' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: agile-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gary Taylor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -2301,6 +2301,7 @@ files:
|
|
2301
2301
|
- db/migrations/20141106083100_add_username_and_password_to_applications.rb
|
2302
2302
|
- db/migrations/20141119143800_add_record_to_applications.rb
|
2303
2303
|
- db/migrations/20141119174300_create_recordings.rb
|
2304
|
+
- db/migrations/20150221152500_add_record_requests_to_request_specs.rb
|
2304
2305
|
- db/schema.rb
|
2305
2306
|
- db/seed.rb
|
2306
2307
|
- examples/README.md
|