wiremock_mapper 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/lib/configuration.rb +11 -2
- data/lib/request_builder.rb +1 -2
- data/lib/wiremock_mapper.rb +11 -6
- data/spec/configuration_spec.rb +14 -5
- data/spec/wiremock_mapper_spec.rb +27 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44fa1527716e579fdceae8884c5afbe07db66862
|
4
|
+
data.tar.gz: ca83101dfb8018ed99bcc69193e21f9f5c283d45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7962ea5867013599c6883d8f6eacb06b30dac8718168803099a1026b28f29b500dd7894204b0445f68dabfb556156b33be657f1f366f190cfe4aceebd2cc7f3
|
7
|
+
data.tar.gz: 58ce785da47a5997b4d13d24d1186321e3792701124e7cd7f7d6e0c8ea5b8badb3c07978e22b64e4cf84acfa05ebedff34a3f4497ddcbc715cb4bbdf2f7ea5c0
|
data/README.md
CHANGED
@@ -11,12 +11,18 @@
|
|
11
11
|
####Usage Example
|
12
12
|
```ruby
|
13
13
|
WireMockMapper::Configuration.set_wiremock_url('http://my_wiremock.com')
|
14
|
-
|
14
|
+
|
15
|
+
WireMockMapper::Configuration.create_global_mapping do |request, respond|
|
16
|
+
request.with_header('Some-Header').equal_to('some_value')
|
17
|
+
.with_cookie('Some-Cookie').equal_to('some_cookie_value')
|
18
|
+
respond.with_status(200)
|
19
|
+
end
|
15
20
|
|
16
21
|
WireMockMapper.create_mapping do |request, respond|
|
17
22
|
request.receives_post
|
18
23
|
.with_url_path.equal_to('path/to/stub')
|
19
24
|
.with_header('Some-Other-Header').equal_to('some_other_value')
|
25
|
+
.with_cookie('Some-Other-Cookie').equal_to('some_other_cookie_value')
|
20
26
|
.with_body.equal_to(foo: bar)
|
21
27
|
respond.with_body('good job!')
|
22
28
|
end
|
data/lib/configuration.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
|
+
require_relative 'request_builder'
|
2
|
+
require_relative 'response_builder'
|
3
|
+
|
1
4
|
module WireMockMapper
|
2
5
|
class Configuration
|
3
|
-
@request_headers = {}
|
4
6
|
@wiremock_url = ''
|
5
7
|
|
8
|
+
@request_builder = RequestBuilder.new
|
9
|
+
@response_builder = ResponseBuilder.new
|
10
|
+
|
6
11
|
class << self
|
7
|
-
attr_reader :
|
12
|
+
attr_reader :request_builder, :response_builder, :wiremock_url
|
8
13
|
|
14
|
+
# Add mappings to include for all future mappings
|
15
|
+
def create_global_mapping
|
16
|
+
yield @request_builder, @response_builder
|
17
|
+
end
|
9
18
|
|
10
19
|
# Add a request header for all future requests
|
11
20
|
# @param key [String] header key
|
data/lib/request_builder.rb
CHANGED
@@ -3,9 +3,8 @@ require_relative 'url_match_builder'
|
|
3
3
|
|
4
4
|
module WireMockMapper
|
5
5
|
class RequestBuilder
|
6
|
-
def initialize
|
6
|
+
def initialize
|
7
7
|
@options = {}
|
8
|
-
@options[:headers] = configuration.request_headers if configuration
|
9
8
|
end
|
10
9
|
|
11
10
|
HTTP_VERBS = %w(ANY DELETE GET HEAD OPTIONS POST PUT TRACE).freeze
|
data/lib/wiremock_mapper.rb
CHANGED
@@ -4,26 +4,31 @@ require_relative 'request_builder'
|
|
4
4
|
require_relative 'response_builder'
|
5
5
|
|
6
6
|
module WireMockMapper
|
7
|
-
VERSION = '0.
|
7
|
+
VERSION = '0.4.0'.freeze
|
8
8
|
|
9
9
|
def self.create_mapping(url = Configuration.wiremock_url)
|
10
|
-
request_builder =
|
11
|
-
response_builder =
|
10
|
+
request_builder = deep_clone(Configuration.request_builder)
|
11
|
+
response_builder = deep_clone(Configuration.response_builder)
|
12
12
|
|
13
13
|
yield request_builder, response_builder
|
14
14
|
|
15
|
-
|
15
|
+
send_to_wiremock(url, request: request_builder, response: response_builder)
|
16
16
|
end
|
17
17
|
|
18
18
|
WIREMOCK_NEW_MAPPING_PATH = '__admin/mappings/new'.freeze
|
19
19
|
private_constant :WIREMOCK_NEW_MAPPING_PATH
|
20
20
|
|
21
|
-
def self.
|
21
|
+
def self.deep_clone(object)
|
22
|
+
Marshal.load(Marshal.dump(object))
|
23
|
+
end
|
24
|
+
private_class_method :deep_clone
|
25
|
+
|
26
|
+
def self.send_to_wiremock(url, body)
|
22
27
|
uri = URI(URI.join(url, WIREMOCK_NEW_MAPPING_PATH))
|
23
28
|
http = Net::HTTP.new(uri.host, uri.port)
|
24
29
|
request = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json')
|
25
30
|
request.body = body.to_json
|
26
31
|
http.request(request)
|
27
32
|
end
|
28
|
-
private_class_method :
|
33
|
+
private_class_method :send_to_wiremock
|
29
34
|
end
|
data/spec/configuration_spec.rb
CHANGED
@@ -1,14 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe WireMockMapper::Configuration do
|
4
|
-
|
5
|
-
it '
|
6
|
-
WireMockMapper::Configuration.
|
7
|
-
|
4
|
+
describe 'create_global_mapping' do
|
5
|
+
it 'configures the request builder attribute' do
|
6
|
+
expect(WireMockMapper::Configuration.request_builder.to_hash).to eq({})
|
7
|
+
|
8
|
+
WireMockMapper::Configuration.create_global_mapping do |request, _response|
|
9
|
+
request.with_header('foo').equal_to('bar')
|
10
|
+
end
|
11
|
+
|
12
|
+
header_key_value = WireMockMapper::Configuration.request_builder.to_hash[:headers]['foo']
|
13
|
+
expect(header_key_value).to be_a(WireMockMapper::MatchBuilder)
|
14
|
+
|
15
|
+
# BOOOOOO!
|
16
|
+
WireMockMapper::Configuration.instance_variable_set(:@request_builder, WireMockMapper::RequestBuilder.new)
|
8
17
|
end
|
9
18
|
end
|
10
19
|
|
11
|
-
|
20
|
+
describe 'wiremock_url' do
|
12
21
|
it 'sets the wiremock url' do
|
13
22
|
WireMockMapper::Configuration.set_wiremock_url('http://whereever.com')
|
14
23
|
expect(WireMockMapper::Configuration.wiremock_url).to eq('http://whereever.com')
|
@@ -22,5 +22,32 @@ describe WireMockMapper do
|
|
22
22
|
respond.with_body('some response body')
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
# rubocop:disable Metrics/LineLength
|
27
|
+
it 'posts the correct json with configured global mappings to the wiremock url' do
|
28
|
+
url = 'http://nowhere.com'
|
29
|
+
expected_request_body = { request: { 'method' => 'POST',
|
30
|
+
'urlPath' => '/some/path',
|
31
|
+
'headers' => { 'some_global_header' => { 'equalTo' => 'some global header value' },
|
32
|
+
'some_header' => { 'equalTo' => 'some header value' } },
|
33
|
+
'bodyPatterns' => [
|
34
|
+
{ 'matches' => 'some request body' }
|
35
|
+
] },
|
36
|
+
response: { 'body' => 'some response body' } }
|
37
|
+
stub_request(:post, "#{url}/__admin/mappings/new").with(body: expected_request_body)
|
38
|
+
|
39
|
+
request_builder = WireMockMapper::RequestBuilder.new.with_header('some_global_header').equal_to('some global header value')
|
40
|
+
expect(WireMockMapper::Configuration).to receive(:request_builder).and_return(request_builder)
|
41
|
+
|
42
|
+
WireMockMapper.create_mapping(url) do |request, respond|
|
43
|
+
request.receives_post
|
44
|
+
.with_url_path.equal_to('/some/path')
|
45
|
+
.with_header('some_header').equal_to('some header value')
|
46
|
+
.with_body.matching('some request body')
|
47
|
+
|
48
|
+
respond.with_body('some response body')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
# rubocop:enable Metrics/LineLength
|
25
52
|
end
|
26
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wiremock_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Isaac Datlof
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codeclimate-test-reporter
|