wiremock_mapper 0.4.0 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 44fa1527716e579fdceae8884c5afbe07db66862
4
- data.tar.gz: ca83101dfb8018ed99bcc69193e21f9f5c283d45
3
+ metadata.gz: 9f120074815585f809be94a0c688f74dab08a525
4
+ data.tar.gz: 3aa65a0f6e7f0b48b68093a4d424dd694447cbf1
5
5
  SHA512:
6
- metadata.gz: f7962ea5867013599c6883d8f6eacb06b30dac8718168803099a1026b28f29b500dd7894204b0445f68dabfb556156b33be657f1f366f190cfe4aceebd2cc7f3
7
- data.tar.gz: 58ce785da47a5997b4d13d24d1186321e3792701124e7cd7f7d6e0c8ea5b8badb3c07978e22b64e4cf84acfa05ebedff34a3f4497ddcbc715cb4bbdf2f7ea5c0
6
+ metadata.gz: 1cc94dd1aa580de748d23ff5231cfd612a950b0134cb9d6714e0a070670766e7a3aaff11f384ee712ef9e3dc763d2598cc070b54b09b67364bbbcc2a3c923541
7
+ data.tar.gz: 876d7d72b05cdd6c15a5da27ff9e1a55e5bfe2df554b0e1541afb70a1c4d4c82ebfff2a76ec466a031b9e8c278ba5618df42ef920c8629e265df7be7b28cb3d7
@@ -0,0 +1,106 @@
1
+ module WireMockMapper
2
+ module Builders
3
+ class MatchBuilder
4
+ def initialize(request_builder)
5
+ @request_builder = request_builder
6
+ @type = ''
7
+ @value = ''
8
+ @options = {}
9
+ end
10
+
11
+ # Match if attribute is absent
12
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
13
+ def absent
14
+ @type = :absent
15
+ @value = true
16
+ @request_builder
17
+ end
18
+
19
+ # Match if attribute value contains the arg
20
+ # @param value [String] string to match
21
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
22
+ def containing(value)
23
+ @type = :contains
24
+ @value = value
25
+ @request_builder
26
+ end
27
+
28
+ # Match if attribute value is equal to the arg
29
+ # @param value [String] string to compare against
30
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
31
+ def equal_to(value)
32
+ @type = :equalTo
33
+ @value = value
34
+ @request_builder
35
+ end
36
+
37
+ # Match if attribute json is equal to the arg
38
+ # @param json [String] json to compare against
39
+ # @param ignore_array_order [true, false] flag to ignore the order of arrays
40
+ # @param ignore_extra_elements [true, false] flag to ignore any extra elements
41
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
42
+ def equal_to_json(json, ignore_array_order = false, ignore_extra_elements = false)
43
+ @type = :equalToJson
44
+ @value = json
45
+
46
+ @options[:ignoreArrayOrder] = true if ignore_array_order
47
+ @options[:ignoreExtraElements] = true if ignore_extra_elements
48
+
49
+ @request_builder
50
+ end
51
+
52
+ # Match if attribute xml is equal to the arg
53
+ # @param xml [String] xml to compare against
54
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
55
+ def equal_to_xml(xml)
56
+ @type = :equalToXml
57
+ @value = xml
58
+ @request_builder
59
+ end
60
+
61
+ # Match if attribute value matches the regex_string
62
+ # @param regex_string [String] xml to match against
63
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
64
+ def matching(regex_string)
65
+ @type = :matches
66
+ @value = regex_string
67
+ @request_builder
68
+ end
69
+
70
+ # Match if attribute json matches the json_path
71
+ # @param json_path [String] json_path to match against
72
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
73
+ def matching_json_path(json_path)
74
+ @type = :matchesJsonPath
75
+ @value = json_path
76
+ @request_builder
77
+ end
78
+
79
+ # Match if attribute xml matches the xpath
80
+ # @param xpath [String] xpath to match against
81
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
82
+ def matching_xpath(xpath)
83
+ @type = :matchesXPath
84
+ @value = xpath
85
+ @request_builder
86
+ end
87
+
88
+ # Match if attribute value does not match
89
+ # @param regex_string [String] regex_string to match against
90
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
91
+ def not_matching(regex_string)
92
+ @type = :doesNotMatch
93
+ @value = regex_string
94
+ @request_builder
95
+ end
96
+
97
+ def to_hash(*)
98
+ { @type => @value }.merge(@options)
99
+ end
100
+
101
+ def to_json(*)
102
+ to_hash.to_json
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,124 @@
1
+ require_relative 'match_builder'
2
+ require_relative 'url_match_builder'
3
+
4
+ module WireMockMapper
5
+ module Builders
6
+ class RequestBuilder
7
+ def initialize
8
+ @options = {}
9
+ end
10
+
11
+ ##
12
+ # @!method receives_any
13
+ # Sets the request HTTP method to ANY
14
+ # @return [RequestBuilder] request builder for chaining
15
+
16
+ ##
17
+ # @!method receives_delete
18
+ # Sets the request HTTP method to DELETE
19
+ # @return [RequestBuilder] request builder for chaining
20
+
21
+ ##
22
+ # @!method receives_get
23
+ # Sets the request HTTP method to GET
24
+ # @return [RequestBuilder] request builder for chaining
25
+
26
+ ##
27
+ # @!method receives_head
28
+ # Sets the request HTTP method to HEAD
29
+ # @return [RequestBuilder] request builder for chaining
30
+
31
+ ##
32
+ # @!method receives_options
33
+ # Sets the request HTTP method to OPTIONS
34
+ # @return [RequestBuilder] request builder for chaining
35
+
36
+ ##
37
+ # @!method receives_post
38
+ # Sets the request HTTP method to POST
39
+ # @return [RequestBuilder] request builder for chaining
40
+
41
+ ##
42
+ # @!method receives_put
43
+ # Sets the request HTTP method to PUT
44
+ # @return [RequestBuilder] request builder for chaining
45
+
46
+ ##
47
+ # @!method receives_trace
48
+ # Sets the request HTTP method to TRACE
49
+ # @return [RequestBuilder] request builder for chaining
50
+ HTTP_VERBS = %w(ANY DELETE GET HEAD OPTIONS POST PUT TRACE).freeze
51
+ private_constant :HTTP_VERBS
52
+
53
+ HTTP_VERBS.each do |verb|
54
+ define_method("receives_#{verb.downcase}") do
55
+ @options[:method] = verb
56
+ self
57
+ end
58
+ end
59
+
60
+ # Expect basic auth
61
+ # @param username [String] username to expect
62
+ # @param password [String] password to expect
63
+ # @return [RequestBuilder] request builder for chaining
64
+ def with_basic_auth(username, password)
65
+ @options[:basicAuth] = { username: username, password: password }
66
+ self
67
+ end
68
+
69
+ # Expect body
70
+ # @return [MatchBuilder] match builder to declare the match on the body
71
+ def with_body
72
+ @options[:bodyPatterns] ||= []
73
+ match_builder = MatchBuilder.new(self)
74
+ @options[:bodyPatterns] << match_builder
75
+ match_builder
76
+ end
77
+
78
+ # Expect cookie
79
+ # @param key [String] the cookie key
80
+ # @return [MatchBuilder] match builder to declare the match on the cookie
81
+ def with_cookie(key)
82
+ @options[:cookies] ||= {}
83
+ @options[:cookies][key] = MatchBuilder.new(self)
84
+ end
85
+
86
+ # Expect header
87
+ # @param key [String] the header key
88
+ # @return [MatchBuilder] match builder to declare the match on the header
89
+ def with_header(key)
90
+ @options[:headers] ||= {}
91
+ @options[:headers][key] = MatchBuilder.new(self)
92
+ end
93
+
94
+ # Expect query param
95
+ # @param key [String] the query param key
96
+ # @return [MatchBuilder] match builder to declare the match on the query param
97
+ def with_query_param(key)
98
+ @options[:queryParameters] ||= {}
99
+ @options[:queryParameters][key] = MatchBuilder.new(self)
100
+ end
101
+
102
+ # Expect url path with query params
103
+ # @return [UrlMatchBuilder] url match builder to declare the match on the url
104
+ def with_url
105
+ @url_match = UrlMatchBuilder.new(self)
106
+ end
107
+
108
+ # Expect url path only
109
+ # @return [UrlMatchBuilder] url match builder to declare the match on the url
110
+ def with_url_path
111
+ @url_match = UrlMatchBuilder.new(self, true)
112
+ end
113
+
114
+ def to_hash(*)
115
+ options_with_url_match = @options.merge(@url_match.to_hash) if @url_match
116
+ options_with_url_match || @options
117
+ end
118
+
119
+ def to_json(*)
120
+ to_hash.to_json
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,52 @@
1
+ module WireMockMapper
2
+ module Builders
3
+ class ResponseBuilder
4
+ def initialize
5
+ @options = {}
6
+ end
7
+
8
+ # Response body
9
+ # @param value [String] the value to set the response body to
10
+ # @return [ResponseBuilder] response builder for chaining
11
+ def with_body(value)
12
+ value = value.to_json unless value.is_a? String
13
+ @options[:body] = value
14
+ self
15
+ end
16
+
17
+ # Add a response header
18
+ # @param key [String] the key of the header
19
+ # @param value [String] the value of the header
20
+ # @return [ResponseBuilder] response builder for chaining
21
+ def with_header(key, value)
22
+ @options[:headers] ||= {}
23
+ @options[:headers][key] = value
24
+ self
25
+ end
26
+
27
+ # Add a response http status
28
+ # @param status_code [String, Numeric] the status code to respond with
29
+ # @return [ResponseBuilder] response builder for chaining
30
+ def with_status(status_code)
31
+ @options[:status] = status_code
32
+ self
33
+ end
34
+
35
+ # Add a response http status
36
+ # @param status_code [String] the status message to respond with
37
+ # @return [ResponseBuilder] response builder for chaining
38
+ def with_status_message(status_message)
39
+ @options[:statusMessage] = status_message
40
+ self
41
+ end
42
+
43
+ def to_hash(*)
44
+ @options
45
+ end
46
+
47
+ def to_json(*)
48
+ @options.to_json
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,38 @@
1
+ module WireMockMapper
2
+ module Builders
3
+ class UrlMatchBuilder
4
+ def initialize(request_builder, path = false)
5
+ @request_builder = request_builder
6
+ @path = path
7
+ @type = ''
8
+ @url_or_pattern = ''
9
+ end
10
+
11
+ # Expect url to equal
12
+ # @param url [String] url to match against
13
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
14
+ def equal_to(url)
15
+ @type = @path ? :urlPath : :url
16
+ @url_or_pattern = url
17
+ @request_builder
18
+ end
19
+
20
+ # Expect url to match
21
+ # @param regex_string [String] regex for url to match against
22
+ # @return [RequestBuilder] calling request builder for chaining additional attributes
23
+ def matching(regex_string)
24
+ @type = @path ? :urlPathPattern : :urlPattern
25
+ @url_or_pattern = regex_string
26
+ @request_builder
27
+ end
28
+
29
+ def to_hash(*)
30
+ { @type => @url_or_pattern }
31
+ end
32
+
33
+ def to_json(*)
34
+ to_hash.to_json
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/configuration.rb CHANGED
@@ -1,12 +1,12 @@
1
- require_relative 'request_builder'
2
- require_relative 'response_builder'
1
+ require_relative 'builders/request_builder'
2
+ require_relative 'builders/response_builder'
3
3
 
4
4
  module WireMockMapper
5
5
  class Configuration
6
6
  @wiremock_url = ''
7
7
 
8
- @request_builder = RequestBuilder.new
9
- @response_builder = ResponseBuilder.new
8
+ @request_builder = Builders::RequestBuilder.new
9
+ @response_builder = Builders::ResponseBuilder.new
10
10
 
11
11
  class << self
12
12
  attr_reader :request_builder, :response_builder, :wiremock_url
@@ -16,13 +16,6 @@ module WireMockMapper
16
16
  yield @request_builder, @response_builder
17
17
  end
18
18
 
19
- # Add a request header for all future requests
20
- # @param key [String] header key
21
- # @return [MatchBuilder] match builder to declare the match on the header
22
- def add_request_header(key)
23
- @request_headers[key] = MatchBuilder.new(self)
24
- end
25
-
26
19
  # Set the WireMock url
27
20
  # @param url [String] the url of the WireMock server
28
21
  def set_wiremock_url(url)
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module WireMockMapper
2
+ VERSION = '0.6.0'.freeze
3
+ end
@@ -1,11 +1,7 @@
1
1
  require 'net/http'
2
2
  require_relative 'configuration'
3
- require_relative 'request_builder'
4
- require_relative 'response_builder'
5
3
 
6
4
  module WireMockMapper
7
- VERSION = '0.4.0'.freeze
8
-
9
5
  def self.create_mapping(url = Configuration.wiremock_url)
10
6
  request_builder = deep_clone(Configuration.request_builder)
11
7
  response_builder = deep_clone(Configuration.response_builder)
@@ -10,10 +10,11 @@ describe WireMockMapper::Configuration do
10
10
  end
11
11
 
12
12
  header_key_value = WireMockMapper::Configuration.request_builder.to_hash[:headers]['foo']
13
- expect(header_key_value).to be_a(WireMockMapper::MatchBuilder)
13
+ expect(header_key_value).to be_a(WireMockMapper::Builders::MatchBuilder)
14
14
 
15
15
  # BOOOOOO!
16
- WireMockMapper::Configuration.instance_variable_set(:@request_builder, WireMockMapper::RequestBuilder.new)
16
+ WireMockMapper::Configuration.instance_variable_set(:@request_builder,
17
+ WireMockMapper::Builders::RequestBuilder.new)
17
18
  end
18
19
  end
19
20
 
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe WireMockMapper::MatchBuilder do
3
+ describe WireMockMapper::Builders::MatchBuilder do
4
+ let(:builder) { WireMockMapper::Builders::MatchBuilder.new(nil) }
5
+
4
6
  describe 'absent' do
5
7
  it 'returns a hash of { absent => true }' do
6
- builder = WireMockMapper::MatchBuilder.new(nil)
7
8
  builder.absent
8
9
  expect(builder.to_hash).to eq(absent: true)
9
10
  end
@@ -11,7 +12,6 @@ describe WireMockMapper::MatchBuilder do
11
12
 
12
13
  describe 'containing' do
13
14
  it 'returns a hash of { contains => value }' do
14
- builder = WireMockMapper::MatchBuilder.new(nil)
15
15
  builder.containing 'foo'
16
16
  expect(builder.to_hash).to eq(contains: 'foo')
17
17
  end
@@ -19,7 +19,6 @@ describe WireMockMapper::MatchBuilder do
19
19
 
20
20
  describe 'equal_to' do
21
21
  it 'returns a hash of { equalTo => value }' do
22
- builder = WireMockMapper::MatchBuilder.new(nil)
23
22
  builder.equal_to 'foo'
24
23
  expect(builder.to_hash).to eq(equalTo: 'foo')
25
24
  end
@@ -27,19 +26,16 @@ describe WireMockMapper::MatchBuilder do
27
26
 
28
27
  describe 'equal_to_json' do
29
28
  it 'returns a hash of { equalToJson => value }' do
30
- builder = WireMockMapper::MatchBuilder.new(nil)
31
29
  builder.equal_to_json 'foo'
32
30
  expect(builder.to_hash).to eq(equalToJson: 'foo')
33
31
  end
34
32
 
35
33
  it 'returns a hash of { equalToJson => value, ignoreArrayOrder => true }' do
36
- builder = WireMockMapper::MatchBuilder.new(nil)
37
34
  builder.equal_to_json 'foo', true
38
35
  expect(builder.to_hash).to eq(equalToJson: 'foo', ignoreArrayOrder: true)
39
36
  end
40
37
 
41
38
  it 'returns a hash of { equalToJson => value, ignoreExtraElements => true }' do
42
- builder = WireMockMapper::MatchBuilder.new(nil)
43
39
  builder.equal_to_json 'foo', false, true
44
40
  expect(builder.to_hash).to eq(equalToJson: 'foo', ignoreExtraElements: true)
45
41
  end
@@ -47,7 +43,6 @@ describe WireMockMapper::MatchBuilder do
47
43
 
48
44
  describe 'equal_to_xml' do
49
45
  it 'returns a hash of { equalToXml => value }' do
50
- builder = WireMockMapper::MatchBuilder.new(nil)
51
46
  builder.equal_to_xml 'foo'
52
47
  expect(builder.to_hash).to eq(equalToXml: 'foo')
53
48
  end
@@ -55,7 +50,6 @@ describe WireMockMapper::MatchBuilder do
55
50
 
56
51
  describe 'matching' do
57
52
  it 'returns a hash of { matches => value }' do
58
- builder = WireMockMapper::MatchBuilder.new(nil)
59
53
  builder.matching 'foo'
60
54
  expect(builder.to_hash).to eq(matches: 'foo')
61
55
  end
@@ -63,7 +57,6 @@ describe WireMockMapper::MatchBuilder do
63
57
 
64
58
  describe 'matching_json_path' do
65
59
  it 'returns a hash of { matchesJsonPath => value }' do
66
- builder = WireMockMapper::MatchBuilder.new(nil)
67
60
  builder.matching_json_path 'foo'
68
61
  expect(builder.to_hash).to eq(matchesJsonPath: 'foo')
69
62
  end
@@ -71,7 +64,6 @@ describe WireMockMapper::MatchBuilder do
71
64
 
72
65
  describe 'matching_xpath' do
73
66
  it 'returns a hash of { matchesXPath => value }' do
74
- builder = WireMockMapper::MatchBuilder.new(nil)
75
67
  builder.matching_xpath 'foo'
76
68
  expect(builder.to_hash).to eq(matchesXPath: 'foo')
77
69
  end
@@ -79,7 +71,6 @@ describe WireMockMapper::MatchBuilder do
79
71
 
80
72
  describe 'not_matching' do
81
73
  it 'returns a hash of { doesNotMatch => value }' do
82
- builder = WireMockMapper::MatchBuilder.new(nil)
83
74
  builder.not_matching 'foo'
84
75
  expect(builder.to_hash).to eq(doesNotMatch: 'foo')
85
76
  end
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe WireMockMapper::RequestBuilder do
3
+ describe WireMockMapper::Builders::RequestBuilder do
4
+ let(:builder) { WireMockMapper::Builders::RequestBuilder.new }
5
+
4
6
  describe 'receives_any' do
5
7
  it 'sets the http method and url path' do
6
- builder = WireMockMapper::RequestBuilder.new
7
8
  builder.receives_any
8
9
  result = builder.to_hash
9
10
  expect(result[:method]).to eq('ANY')
@@ -12,7 +13,6 @@ describe WireMockMapper::RequestBuilder do
12
13
 
13
14
  describe 'receives_delete' do
14
15
  it 'sets the http method and url path' do
15
- builder = WireMockMapper::RequestBuilder.new
16
16
  builder.receives_delete
17
17
  result = builder.to_hash
18
18
  expect(result[:method]).to eq('DELETE')
@@ -21,7 +21,6 @@ describe WireMockMapper::RequestBuilder do
21
21
 
22
22
  describe 'receives_get' do
23
23
  it 'sets the http method and url path' do
24
- builder = WireMockMapper::RequestBuilder.new
25
24
  builder.receives_get
26
25
  result = builder.to_hash
27
26
  expect(result[:method]).to eq('GET')
@@ -30,7 +29,6 @@ describe WireMockMapper::RequestBuilder do
30
29
 
31
30
  describe 'receives_head' do
32
31
  it 'sets the http method and url path' do
33
- builder = WireMockMapper::RequestBuilder.new
34
32
  builder.receives_head
35
33
  result = builder.to_hash
36
34
  expect(result[:method]).to eq('HEAD')
@@ -39,7 +37,6 @@ describe WireMockMapper::RequestBuilder do
39
37
 
40
38
  describe 'receives_options' do
41
39
  it 'sets the http method and url path' do
42
- builder = WireMockMapper::RequestBuilder.new
43
40
  builder.receives_options
44
41
  result = builder.to_hash
45
42
  expect(result[:method]).to eq('OPTIONS')
@@ -48,7 +45,6 @@ describe WireMockMapper::RequestBuilder do
48
45
 
49
46
  describe 'receives_put' do
50
47
  it 'sets the http method and url path' do
51
- builder = WireMockMapper::RequestBuilder.new
52
48
  builder.receives_put
53
49
  result = builder.to_hash
54
50
  expect(result[:method]).to eq('PUT')
@@ -57,7 +53,6 @@ describe WireMockMapper::RequestBuilder do
57
53
 
58
54
  describe 'receives_post' do
59
55
  it 'sets the http method and url path' do
60
- builder = WireMockMapper::RequestBuilder.new
61
56
  builder.receives_post
62
57
  result = builder.to_hash
63
58
  expect(result[:method]).to eq('POST')
@@ -66,7 +61,6 @@ describe WireMockMapper::RequestBuilder do
66
61
 
67
62
  describe 'receives_trace' do
68
63
  it 'sets the http method and url path' do
69
- builder = WireMockMapper::RequestBuilder.new
70
64
  builder.receives_trace
71
65
  result = builder.to_hash
72
66
  expect(result[:method]).to eq('TRACE')
@@ -75,7 +69,6 @@ describe WireMockMapper::RequestBuilder do
75
69
 
76
70
  describe 'with_basic_auth' do
77
71
  it 'adds basic auth' do
78
- builder = WireMockMapper::RequestBuilder.new
79
72
  builder.with_basic_auth('ike', '123456')
80
73
  expect(builder.to_hash[:basicAuth]).to eq(username: 'ike', password: '123456')
81
74
  end
@@ -83,12 +76,10 @@ describe WireMockMapper::RequestBuilder do
83
76
 
84
77
  describe 'with_body' do
85
78
  it 'returns a MatchBuilder' do
86
- builder = WireMockMapper::RequestBuilder.new
87
- expect(builder.with_body).to be_a(WireMockMapper::MatchBuilder)
79
+ expect(builder.with_body).to be_a(WireMockMapper::Builders::MatchBuilder)
88
80
  end
89
81
 
90
82
  it 'adds the matcher to bodyPatterns' do
91
- builder = WireMockMapper::RequestBuilder.new
92
83
  matcher = builder.with_body
93
84
  expect(builder.to_hash).to eq(bodyPatterns: [matcher])
94
85
  end
@@ -96,22 +87,38 @@ describe WireMockMapper::RequestBuilder do
96
87
 
97
88
  describe 'with_cookie' do
98
89
  it 'returns a MatchBuilder' do
99
- builder = WireMockMapper::RequestBuilder.new
100
- expect(builder.with_cookie(:whatever)).to be_a(WireMockMapper::MatchBuilder)
90
+ expect(builder.with_cookie(:whatever)).to be_a(WireMockMapper::Builders::MatchBuilder)
101
91
  end
102
92
  end
103
93
 
104
94
  describe 'with_header' do
105
95
  it 'returns a MatchBuilder' do
106
- builder = WireMockMapper::RequestBuilder.new
107
- expect(builder.with_header(:whatever)).to be_a(WireMockMapper::MatchBuilder)
96
+ expect(builder.with_header(:whatever)).to be_a(WireMockMapper::Builders::MatchBuilder)
97
+ end
98
+ end
99
+
100
+ describe 'with_url' do
101
+ it 'should return a UrlMatchBuilder' do
102
+ expect(builder.with_url).to be_a(WireMockMapper::Builders::UrlMatchBuilder)
103
+ end
104
+ end
105
+
106
+ describe 'with_url_path' do
107
+ it 'should return a UrlMatchBuilder' do
108
+ expect(builder.with_url_path).to be_a(WireMockMapper::Builders::UrlMatchBuilder)
109
+ end
110
+ end
111
+
112
+ describe 'to_hash' do
113
+ it 'should merge in url_match info' do
114
+ builder.with_url.equal_to('foo')
115
+ expect(builder.to_hash).to eq(url: 'foo')
108
116
  end
109
117
  end
110
118
 
111
119
  describe 'with_query_param' do
112
120
  it 'returns a MatchBuilder' do
113
- builder = WireMockMapper::RequestBuilder.new
114
- expect(builder.with_query_param(:whatever)).to be_a(WireMockMapper::MatchBuilder)
121
+ expect(builder.with_query_param(:whatever)).to be_a(WireMockMapper::Builders::MatchBuilder)
115
122
  end
116
123
  end
117
124
  end
@@ -1,16 +1,16 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe WireMockMapper::ResponseBuilder do
3
+ describe WireMockMapper::Builders::ResponseBuilder do
4
+ let(:builder) { WireMockMapper::Builders::ResponseBuilder.new }
5
+
4
6
  describe 'with_body' do
5
7
  it 'adds the body' do
6
- builder = WireMockMapper::ResponseBuilder.new
7
8
  builder.with_body('some body')
8
9
  result = builder.to_hash
9
10
  expect(result[:body]).to eq('some body')
10
11
  end
11
12
 
12
13
  it 'converts value to_json if it is not a string' do
13
- builder = WireMockMapper::ResponseBuilder.new
14
14
  builder.with_body(some: 'hash')
15
15
  result = builder.to_hash
16
16
  expect(result[:body]).to eq('{"some":"hash"}')
@@ -19,14 +19,12 @@ describe WireMockMapper::ResponseBuilder do
19
19
 
20
20
  describe 'with_header' do
21
21
  it 'adds the header' do
22
- builder = WireMockMapper::ResponseBuilder.new
23
22
  builder.with_header('key', 'value')
24
23
  result = builder.to_hash
25
24
  expect(result[:headers]).to eq('key' => 'value')
26
25
  end
27
26
 
28
27
  it 'adds multiple headers' do
29
- builder = WireMockMapper::ResponseBuilder.new
30
28
  builder.with_header('key', 'value')
31
29
  builder.with_header('another key', 'another value')
32
30
  result = builder.to_hash
@@ -36,7 +34,6 @@ describe WireMockMapper::ResponseBuilder do
36
34
 
37
35
  describe 'with_status' do
38
36
  it 'adds the status code' do
39
- builder = WireMockMapper::ResponseBuilder.new
40
37
  builder.with_status(400)
41
38
  result = builder.to_hash
42
39
  expect(result[:status]).to eq(400)
@@ -45,7 +42,6 @@ describe WireMockMapper::ResponseBuilder do
45
42
 
46
43
  describe 'with_status_message' do
47
44
  it 'adds the status message' do
48
- builder = WireMockMapper::ResponseBuilder.new
49
45
  builder.with_status_message('message')
50
46
  result = builder.to_hash
51
47
  expect(result[:statusMessage]).to eq('message')
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,9 @@
1
+ require 'bundler/setup'
1
2
  require 'webmock/rspec'
2
- require 'codeclimate-test-reporter'
3
- require 'pry'
4
3
 
4
+ Bundler.require :development
5
5
  CodeClimate::TestReporter.start
6
+
7
+ WebMock.disable_net_connect!(allow: 'codeclimate.com')
8
+
9
+ require_all 'lib'
@@ -1,9 +1,8 @@
1
1
  require 'spec_helper'
2
- require_relative '../lib/url_match_builder'
3
2
 
4
- describe WireMockMapper::MatchBuilder do
3
+ describe WireMockMapper::Builders::MatchBuilder do
5
4
  context 'initialized with path = true' do
6
- let(:builder) { WireMockMapper::UrlMatchBuilder.new(nil, true) }
5
+ let(:builder) { WireMockMapper::Builders::UrlMatchBuilder.new(nil, true) }
7
6
 
8
7
  describe 'equal_to' do
9
8
  it 'sets the return of to_hash to {urlPath: value}' do
@@ -21,7 +20,7 @@ describe WireMockMapper::MatchBuilder do
21
20
  end
22
21
 
23
22
  context 'initialized with path = false' do
24
- let(:builder) { WireMockMapper::UrlMatchBuilder.new(nil) }
23
+ let(:builder) { WireMockMapper::Builders::UrlMatchBuilder.new(nil) }
25
24
 
26
25
  describe 'equal_to' do
27
26
  it 'sets the return of to_hash to {url: value}' do
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe WireMockMapper do
4
- context 'control' do
4
+ describe 'create_mapping' do
5
5
  it 'posts the correct json to the wiremock url' do
6
6
  url = 'http://nowhere.com'
7
7
  expected_request_body = { request: { 'method' => 'POST',
@@ -27,7 +27,7 @@ describe WireMockMapper do
27
27
  it 'posts the correct json with configured global mappings to the wiremock url' do
28
28
  url = 'http://nowhere.com'
29
29
  expected_request_body = { request: { 'method' => 'POST',
30
- 'urlPath' => '/some/path',
30
+ 'url' => '/some/url',
31
31
  'headers' => { 'some_global_header' => { 'equalTo' => 'some global header value' },
32
32
  'some_header' => { 'equalTo' => 'some header value' } },
33
33
  'bodyPatterns' => [
@@ -36,12 +36,12 @@ describe WireMockMapper do
36
36
  response: { 'body' => 'some response body' } }
37
37
  stub_request(:post, "#{url}/__admin/mappings/new").with(body: expected_request_body)
38
38
 
39
- request_builder = WireMockMapper::RequestBuilder.new.with_header('some_global_header').equal_to('some global header value')
39
+ request_builder = WireMockMapper::Builders::RequestBuilder.new.with_header('some_global_header').equal_to('some global header value')
40
40
  expect(WireMockMapper::Configuration).to receive(:request_builder).and_return(request_builder)
41
41
 
42
42
  WireMockMapper.create_mapping(url) do |request, respond|
43
43
  request.receives_post
44
- .with_url_path.equal_to('/some/path')
44
+ .with_url.equal_to('/some/url')
45
45
  .with_header('some_header').equal_to('some header value')
46
46
  .with_body.matching('some request body')
47
47
 
@@ -1,5 +1,6 @@
1
1
  $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
2
- require 'wiremock_mapper'
2
+
3
+ require 'version'
3
4
 
4
5
  Gem::Specification.new do |spec|
5
6
  spec.name = 'wiremock_mapper'
@@ -14,7 +15,7 @@ Gem::Specification.new do |spec|
14
15
  spec.summary = 'Ruby DSL for setting up WireMock mappings'
15
16
  spec.description = spec.summary
16
17
 
17
- spec.files = `git ls-files`.split($/)
18
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
21
  spec.extra_rdoc_files = ['LICENSE.txt', 'README.md']
@@ -23,6 +24,7 @@ Gem::Specification.new do |spec|
23
24
  spec.add_development_dependency 'codeclimate-test-reporter'
24
25
  spec.add_development_dependency 'pry'
25
26
  spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'require_all'
26
28
  spec.add_development_dependency 'rspec'
27
29
  spec.add_development_dependency 'rubocop'
28
30
  spec.add_development_dependency 'webmock'
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.0
4
+ version: 0.6.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-14 00:00:00.000000000 Z
11
+ date: 2016-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: codeclimate-test-reporter
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: require_all
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -110,11 +124,12 @@ files:
110
124
  - LICENSE.txt
111
125
  - README.md
112
126
  - Rakefile
127
+ - lib/builders/match_builder.rb
128
+ - lib/builders/request_builder.rb
129
+ - lib/builders/response_builder.rb
130
+ - lib/builders/url_match_builder.rb
113
131
  - lib/configuration.rb
114
- - lib/match_builder.rb
115
- - lib/request_builder.rb
116
- - lib/response_builder.rb
117
- - lib/url_match_builder.rb
132
+ - lib/version.rb
118
133
  - lib/wiremock_mapper.rb
119
134
  - spec/configuration_spec.rb
120
135
  - spec/match_builder_spec.rb
data/lib/match_builder.rb DELETED
@@ -1,104 +0,0 @@
1
- module WireMockMapper
2
- class MatchBuilder
3
- def initialize(request_builder)
4
- @request_builder = request_builder
5
- @type = ''
6
- @value = ''
7
- @options = {}
8
- end
9
-
10
- # Match if attribute is absent
11
- # @return [RequestBuilder] calling request builder for chaining additional attributes
12
- def absent
13
- @type = :absent
14
- @value = true
15
- @request_builder
16
- end
17
-
18
- # Match if attribute value contains the arg
19
- # @param value [String] string to match
20
- # @return [RequestBuilder] calling request builder for chaining additional attributes
21
- def containing(value)
22
- @type = :contains
23
- @value = value
24
- @request_builder
25
- end
26
-
27
- # Match if attribute value is equal to the arg
28
- # @param value [String] string to compare against
29
- # @return [RequestBuilder] calling request builder for chaining additional attributes
30
- def equal_to(value)
31
- @type = :equalTo
32
- @value = value
33
- @request_builder
34
- end
35
-
36
- # Match if attribute json is equal to the arg
37
- # @param json [String] json to compare against
38
- # @param ignore_array_order [true, false] flag to ignore the order of arrays
39
- # @param ignore_extra_elements [true, false] flag to ignore any extra elements
40
- # @return [RequestBuilder] calling request builder for chaining additional attributes
41
- def equal_to_json(json, ignore_array_order = false, ignore_extra_elements = false)
42
- @type = :equalToJson
43
- @value = json
44
-
45
- @options[:ignoreArrayOrder] = true if ignore_array_order
46
- @options[:ignoreExtraElements] = true if ignore_extra_elements
47
-
48
- @request_builder
49
- end
50
-
51
- # Match if attribute xml is equal to the arg
52
- # @param xml [String] xml to compare against
53
- # @return [RequestBuilder] calling request builder for chaining additional attributes
54
- def equal_to_xml(xml)
55
- @type = :equalToXml
56
- @value = xml
57
- @request_builder
58
- end
59
-
60
- # Match if attribute value matches the regex_string
61
- # @param regex_string [String] xml to match against
62
- # @return [RequestBuilder] calling request builder for chaining additional attributes
63
- def matching(regex_string)
64
- @type = :matches
65
- @value = regex_string
66
- @request_builder
67
- end
68
-
69
- # Match if attribute json matches the json_path
70
- # @param json_path [String] json_path to match against
71
- # @return [RequestBuilder] calling request builder for chaining additional attributes
72
- def matching_json_path(json_path)
73
- @type = :matchesJsonPath
74
- @value = json_path
75
- @request_builder
76
- end
77
-
78
- # Match if attribute xml matches the xpath
79
- # @param xpath [String] xpath to match against
80
- # @return [RequestBuilder] calling request builder for chaining additional attributes
81
- def matching_xpath(xpath)
82
- @type = :matchesXPath
83
- @value = xpath
84
- @request_builder
85
- end
86
-
87
- # Match if attribute value does not match
88
- # @param regex_string [String] regex_string to match against
89
- # @return [RequestBuilder] calling request builder for chaining additional attributes
90
- def not_matching(regex_string)
91
- @type = :doesNotMatch
92
- @value = regex_string
93
- @request_builder
94
- end
95
-
96
- def to_hash(*)
97
- { @type => @value }.merge(@options)
98
- end
99
-
100
- def to_json(*)
101
- to_hash.to_json
102
- end
103
- end
104
- end
@@ -1,83 +0,0 @@
1
- require_relative 'match_builder'
2
- require_relative 'url_match_builder'
3
-
4
- module WireMockMapper
5
- class RequestBuilder
6
- def initialize
7
- @options = {}
8
- end
9
-
10
- HTTP_VERBS = %w(ANY DELETE GET HEAD OPTIONS POST PUT TRACE).freeze
11
- private_constant :HTTP_VERBS
12
-
13
- HTTP_VERBS.each do |verb|
14
- define_method("receives_#{verb.downcase}") do
15
- @options[:method] = verb
16
- self
17
- end
18
- end
19
-
20
- # Expect basic auth
21
- # @param username [String] username to expect
22
- # @param password [String] password to expect
23
- # @return [RequestBuilder] request builder for chaining
24
- def with_basic_auth(username, password)
25
- @options[:basicAuth] = { username: username, password: password }
26
- self
27
- end
28
-
29
- # Expect body
30
- # @return [MatchBuilder] match builder to declare the match on the body
31
- def with_body
32
- @options[:bodyPatterns] ||= []
33
- match_builder = MatchBuilder.new(self)
34
- @options[:bodyPatterns] << match_builder
35
- match_builder
36
- end
37
-
38
- # Expect cookie
39
- # @param key [String] the cookie key
40
- # @return [MatchBuilder] match builder to declare the match on the cookie
41
- def with_cookie(key)
42
- @options[:cookies] ||= {}
43
- @options[:cookies][key] = MatchBuilder.new(self)
44
- end
45
-
46
- # Expect header
47
- # @param key [String] the header key
48
- # @return [MatchBuilder] match builder to declare the match on the header
49
- def with_header(key)
50
- @options[:headers] ||= {}
51
- @options[:headers][key] = MatchBuilder.new(self)
52
- end
53
-
54
- # Expect query param
55
- # @param key [String] the query param key
56
- # @return [MatchBuilder] match builder to declare the match on the query param
57
- def with_query_param(key)
58
- @options[:queryParameters] ||= {}
59
- @options[:queryParameters][key] = MatchBuilder.new(self)
60
- end
61
-
62
- # Expect url path with query params
63
- # @return [UrlMatchBuilder] url match builder to declare the match on the url
64
- def with_url
65
- @url_match = UrlMatchBuilder.new(self)
66
- end
67
-
68
- # Expect url path only
69
- # @return [UrlMatchBuilder] url match builder to declare the match on the url
70
- def with_url_path
71
- @url_match = UrlMatchBuilder.new(self, true)
72
- end
73
-
74
- def to_hash(*)
75
- options_with_url_match = @options.merge(@url_match.to_hash) if @url_match
76
- options_with_url_match || @options
77
- end
78
-
79
- def to_json(*)
80
- to_hash.to_json
81
- end
82
- end
83
- end
@@ -1,50 +0,0 @@
1
- module WireMockMapper
2
- class ResponseBuilder
3
- def initialize
4
- @options = {}
5
- end
6
-
7
- # Response body
8
- # @param value [String] the value to set the response body to
9
- # @return [ResponseBuilder] response builder for chaining
10
- def with_body(value)
11
- value = value.to_json unless value.is_a? String
12
- @options[:body] = value
13
- self
14
- end
15
-
16
- # Add a response header
17
- # @param key [String] the key of the header
18
- # @param value [String] the value of the header
19
- # @return [ResponseBuilder] response builder for chaining
20
- def with_header(key, value)
21
- @options[:headers] ||= {}
22
- @options[:headers][key] = value
23
- self
24
- end
25
-
26
- # Add a response http status
27
- # @param status_code [String, Numeric] the status code to respond with
28
- # @return [ResponseBuilder] response builder for chaining
29
- def with_status(status_code)
30
- @options[:status] = status_code
31
- self
32
- end
33
-
34
- # Add a response http status
35
- # @param status_code [String] the status message to respond with
36
- # @return [ResponseBuilder] response builder for chaining
37
- def with_status_message(status_message)
38
- @options[:statusMessage] = status_message
39
- self
40
- end
41
-
42
- def to_hash(*)
43
- @options
44
- end
45
-
46
- def to_json(*)
47
- @options.to_json
48
- end
49
- end
50
- end
@@ -1,36 +0,0 @@
1
- module WireMockMapper
2
- class UrlMatchBuilder
3
- def initialize(request_builder, path = false)
4
- @request_builder = request_builder
5
- @path = path
6
- @type = ''
7
- @url_or_pattern = ''
8
- end
9
-
10
- # Expect url to equal
11
- # @param url [String] url to match against
12
- # @return [RequestBuilder] calling request builder for chaining additional attributes
13
- def equal_to(url)
14
- @type = @path ? :urlPath : :url
15
- @url_or_pattern = url
16
- @request_builder
17
- end
18
-
19
- # Expect url to match
20
- # @param regex_string [String] regex for url to match against
21
- # @return [RequestBuilder] calling request builder for chaining additional attributes
22
- def matching(regex_string)
23
- @type = @path ? :urlPathPattern : :urlPattern
24
- @url_or_pattern = regex_string
25
- @request_builder
26
- end
27
-
28
- def to_hash(*)
29
- { @type => @url_or_pattern }
30
- end
31
-
32
- def to_json(*)
33
- to_hash.to_json
34
- end
35
- end
36
- end