soaspec 0.3.3 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9f6e35bf3fb8a025d3b6b3e7331686c6b1c2c6ab332fc46edf4c63e360e4b37
4
- data.tar.gz: a1c11edd859c3b71a5f2384cef5437c41ec609a4104df144e6491d3081f588c6
3
+ metadata.gz: 6e3843bc70d12aba4f2d2d825ef0eb3f142cea08fe50c6042875bcbc8f08d770
4
+ data.tar.gz: 6448d093a3a2df45fa7db32c2c230349fd892258ffcf8d863f01759b79913a67
5
5
  SHA512:
6
- metadata.gz: 74334ea904ce3ff6f131e43b1954945231bb0178aba8867564e7e9056b1f723a9506a500de582fa226d77dc872384a4944306b5dd35ae7766d1d1f0fd5c05af1
7
- data.tar.gz: 8f9ff7688a0442663faa05a640912b8e4161317597ddd8ea6ad3e6cb7632800b50ed7441fb38caa080782e2f2b2d519d3e07ded33c552179c32514ceeeb21d35
6
+ metadata.gz: f81e8e90e494743cdd9fdd87d251194cb7c791631a53508c224f458787458417c1c12b0d8cae942e246f92b7ffe2bd76cede518ddf60f156ef85eb3d4874138e
7
+ data.tar.gz: 43c1a37a03e64cacce5a478083d183b6e4422d1ab5db5edc94b81c812968a804326df97c3c9ba539101e10fee8c27981f41186e337517e115d221194f922f7ad
data/ChangeLog CHANGED
@@ -1,3 +1,17 @@
1
+ Version 0.3.6
2
+ * Enhancement
3
+ * Build up Rest request using `RestClient::Request` rather than use resource to allow
4
+ sending payload to HTTP methods like `delete` and `get` which doesn't usually take one but
5
+ sometimes does
6
+
7
+ Version 0.3.5
8
+ * Enhancement
9
+ * Clean up the Handler code, mainly REST by moving logic into RestRequest method
10
+
11
+ Version 0.3.4
12
+ * Bug fix
13
+ * Don't put global options on STDOUT. Put within logger
14
+
1
15
  Version 0.3.3
2
16
  * Enhancement
3
17
  * Ability to specify multipart on Soaspec::OAuth2, not always assume it's value
@@ -4,7 +4,9 @@ require_relative 'exe_helpers'
4
4
 
5
5
  module Soaspec
6
6
  # Used for defining parameters for recording and asserting against
7
- # a baseline
7
+ # a baseline.
8
+ # This does not take into account different payloads in the request, only
9
+ # for where a response varies by suburls or query parameters
8
10
  class Baseline
9
11
  include Soaspec::ExeHelpers
10
12
  @folder = File.join('config', 'baseline')
@@ -24,10 +26,10 @@ module Soaspec
24
26
  def initialize(exchange, format)
25
27
  self.exchange = exchange
26
28
  self.format = format
27
- unless ALLOWED_FORMATS.include? format
28
- raise ArgumentError, "Expected format #{format} to be " \
29
- "either #{ALLOWED_FORMATS}"
30
- end
29
+ return if ALLOWED_FORMATS.include? format
30
+
31
+ raise ArgumentError, "Expected format #{format} to be " \
32
+ "either #{ALLOWED_FORMATS}"
31
33
  end
32
34
 
33
35
  # Compare baseline with expected result. This will create baseline
@@ -6,7 +6,7 @@ module Soaspec
6
6
  module ExchangeProperties
7
7
  # Set default exchange handler for this exchange
8
8
  # This is helpful for when you need a new exchange handler created for each exchange
9
- # @param [Class] handler_class Class of ExchangeHandler to set Exchange to use
9
+ # @param [< ExchangeHandler] handler_class Class of ExchangeHandler to set Exchange to use
10
10
  # @param [String] name Name to call handler when it's instantiated (Defaults to class name)
11
11
  # @param [Hash] params Hash of parameters to set for instance of ExchangeHandler
12
12
  def default_handler(handler_class, name = handler_class.to_s, params = '')
@@ -7,9 +7,11 @@ module Soaspec
7
7
  # :get
8
8
  # @return [Symbol] REST method used
9
9
  attr_accessor :method
10
+ # This will be the actual payload sent. This could be set in Exchange through the payload
11
+ # explicitly, the 'body' param which will convert a Hash to JSON or a template
10
12
  # @example JSON body
11
13
  # {"test":5}
12
- # @return [String] Body of request sent
14
+ # @return [String] Body of request sent. Payload that will be sent in request
13
15
  attr_accessor :body
14
16
  # @return [String] Name given to test to describe it
15
17
  attr_accessor :test_name
@@ -27,6 +29,13 @@ module Soaspec
27
29
  # @return [Soaspec::RestHandler] RestHandler used for this request
28
30
  attr_accessor :rest_handler
29
31
 
32
+ # @return [String] Base url plus sub url
33
+ def full_url
34
+ url = rest_handler.base_url_value
35
+ url += "/#{suburl}" if suburl
36
+ @full_url = ERB.new(url).result(binding)
37
+ end
38
+
30
39
  # Interpret REST parameters given provided parameters and adding defaults, making
31
40
  # transformations
32
41
  #
@@ -51,19 +60,21 @@ module Soaspec
51
60
 
52
61
  # @param [Hash] overall Overall parameters used in Request
53
62
  # @param [Hash] options Headers and basic auth options
54
- # @param [Soaspec::RestHandler] rest_handler RestHandler handling creation of this request
63
+ # @param [< Soaspec::RestHandler] rest_handler RestHandler handling creation of this request
55
64
  def initialize(overall, options, rest_handler)
56
65
  self.rest_handler = rest_handler
57
66
  overall_params = interpret_parameters(overall)
58
- @overall_params = overall_params
67
+ @overall_params = overall_params.dup
59
68
  self.method = overall_params.delete(:method)
60
- self.body = payload? ? post_data : nil #body
69
+ self.body = post_data
70
+ overall_params.delete(:body)
71
+ overall_params.delete(:payload)
61
72
  self.suburl = overall_params.delete(:suburl)
62
73
  self.test_name = overall_params.delete(:name)
63
74
  self.other_params = overall_params
64
75
  self.basic_auth_user = options[:user]
65
76
  self.basic_auth_password = options[:password]
66
- self.headers = options[:headers]
77
+ self.headers = options[:headers] # TODO: Use this in request
67
78
  end
68
79
 
69
80
  # @return [Hash] Query parameters for a REST Request
@@ -98,30 +109,38 @@ module Soaspec
98
109
  File.join(*components.collect!(&:to_s))
99
110
  end
100
111
 
101
- # @return [Boolean] Whether REST method should have a payload
102
- def payload?
103
- case method
104
- when :post, :patch, :put
105
- true
106
- else
107
- false
108
- end
112
+ # Use the request parameters to call the REST api
113
+ def call(merged_options)
114
+ rest_handler.exception = nil # Remove any previously stored exception
115
+ Soaspec::SpecLogger.info("request body: #{body}") if body
116
+ merge_headers = (merged_options[:headers] || {}).merge(other_params)
117
+ params = merged_options.merge(method: method, url: full_url,
118
+ headers: merge_headers)
119
+ params.merge!(payload: body) if body
120
+ RestClient::Request.execute params
121
+ rescue RestClient::Exception => e
122
+ rest_handler.exception = e
123
+ raise e unless e.respond_to? :response
124
+
125
+ e.response
109
126
  end
110
127
 
111
- # TODO: Implement this for this object
112
128
  # Work out data to send based upon payload, template_name, or body
113
- # @return [String] Payload to send in REST request
129
+ # @return [String, NilClass] Payload to send in REST request. Nil if nothing is to be sent
114
130
  def post_data
115
131
  option = rest_handler.request_option
116
- if option == :hash && !@overall_params[:payload]
117
- @overall_params[:payload] = JSON.generate(rest_handler.hash_used_in_request(@overall_params[:body])).to_s
118
- elsif option == :template
119
- test_values = nil
120
- test_values = @overall_params[:body].dup if @overall_params[:body]
121
- Soaspec::TemplateReader.new.render_body(rest_handler.template_name, test_values || @overall_params)
122
- else
123
- @overall_params[:payload]
124
- end
132
+ body = if option == :hash && !@overall_params[:payload]
133
+ @overall_params[:payload] = JSON.generate(rest_handler.hash_used_in_request(@overall_params[:body])).to_s
134
+ elsif option == :template
135
+ test_values = nil
136
+ test_values = @overall_params[:body].dup if @overall_params[:body]
137
+ Soaspec::TemplateReader.new.render_body(rest_handler.template_name, test_values || @overall_params)
138
+ else
139
+ @overall_params[:payload]
140
+ end
141
+ return body if body && body != '{}'
142
+
143
+ nil
125
144
  end
126
145
  end
127
146
  end
@@ -64,26 +64,8 @@ module Soaspec
64
64
  # @return [RestClient::Response] Response from making request
65
65
  def make_request(override_parameters)
66
66
  req_params = request_parameters override_parameters
67
- # In order for ERB to be calculated at correct time, the first time request is made, the resource should be created
68
- @resource ||= RestClient::Resource.new(ERB.new(base_url_value).result(binding), @merged_options)
69
- @resource_used = req_params.suburl ? @resource[req_params.suburl] : @resource
70
-
71
- self.exception = nil # Remove any previously stored exception
72
- begin
73
- response = case req_params.method
74
- when :post, :patch, :put
75
- Soaspec::SpecLogger.info("request body: #{req_params.post_data}")
76
- @resource_used.send(req_params.method, req_params.post_data, req_params.other_params)
77
- else # :get, :delete
78
- @resource_used.send(req_params.method, req_params.other_params )
79
- end
80
- rescue RestClient::Exception => e
81
- self.exception = e
82
- raise e unless e.respond_to? :response
83
-
84
- response = e.response
85
- end
86
- Soaspec::SpecLogger.info("response: \n headers: #{response&.headers}\n body: #{response}\n")
67
+ response = req_params.call @merged_options
68
+ Soaspec::SpecLogger.info("response:\n headers: #{response&.headers}\n body: #{response}\n")
87
69
  after_response(response, self)
88
70
  response
89
71
  end
@@ -160,7 +142,7 @@ module Soaspec
160
142
 
161
143
  # @return [Integer] HTTP Status code for response
162
144
  def status_code_for(response)
163
- response.code
145
+ response&.code
164
146
  end
165
147
 
166
148
  # Returns the value at the provided xpath
@@ -66,7 +66,8 @@ module Soaspec
66
66
 
67
67
  # Setup object to handle communicating with a particular SOAP WSDL
68
68
  # @param [String] name Name to describe handler. Used in calling 'to_s'
69
- # @param [Hash] options Options defining SOAP request. WSDL, authentication, see http://savonrb.com/version2/globals.html for list of options
69
+ # @param [Hash] options Options defining SOAP request. WSDL, authentication,
70
+ # See http://savonrb.com/version2/globals.html for list of options
70
71
  def initialize(name = self.class.to_s, options = {})
71
72
  if name.is_a?(Hash) && options == {} # If name is not set
72
73
  options = name
@@ -77,9 +78,9 @@ module Soaspec
77
78
  merged_options = SoapDefaults.options
78
79
  merged_options.merge!(logging_options) if Soaspec::SpecLogger.log_api_traffic?
79
80
  merged_options.merge! savon_options
80
- puts 'globals' + savon_globals.to_s
81
81
  merged_options.merge! savon_globals
82
82
  merged_options.merge!(options)
83
+ Soaspec::SpecLogger.info "Using Savon globals: #{merged_options}"
83
84
  self.client = Savon.client(merged_options)
84
85
  end
85
86
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Soaspec
4
4
  # @return [String] Version of the gem
5
- VERSION = '0.3.3'
5
+ VERSION = '0.3.6'
6
6
  end
@@ -107,6 +107,11 @@ module Soaspec
107
107
  params.to_s
108
108
  end
109
109
 
110
+ documentation 'Sends back body received for delete'
111
+ delete '/echoer' do
112
+ request.body
113
+ end
114
+
110
115
  # Used for simple testing of posing
111
116
  documentation 'Simply sends the response body back'
112
117
  post '/echoer' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soaspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - SamuelGarrattIQA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-07 00:00:00.000000000 Z
11
+ date: 2019-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler