soaspec 0.2.29 → 0.2.30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +6 -0
- data/Gemfile +2 -0
- data/Rakefile +3 -1
- data/exe/soaspec +1 -0
- data/exe/xml_to_yaml_file +1 -0
- data/lib/soaspec/core_ext/hash.rb +2 -0
- data/lib/soaspec/cucumber/generic_steps.rb +2 -0
- data/lib/soaspec/demo.rb +2 -0
- data/lib/soaspec/errors.rb +3 -2
- data/lib/soaspec/exchange/exchange.rb +18 -6
- data/lib/soaspec/exchange/exchange_extractor.rb +3 -1
- data/lib/soaspec/exchange/exchange_properties.rb +2 -0
- data/lib/soaspec/exchange/exchange_repeater.rb +2 -0
- data/lib/soaspec/exchange/request_builder.rb +2 -0
- data/lib/soaspec/exchange/variable_storer.rb +2 -0
- data/lib/soaspec/exchange_handlers/exchange_handler.rb +8 -40
- data/lib/soaspec/exchange_handlers/exchange_handler_defaults.rb +61 -0
- data/lib/soaspec/exchange_handlers/handler_accessors.rb +2 -0
- data/lib/soaspec/exchange_handlers/request/rest_request.rb +3 -1
- data/lib/soaspec/exchange_handlers/request/soap_request.rb +3 -1
- data/lib/soaspec/exchange_handlers/response_extractor.rb +2 -0
- data/lib/soaspec/exchange_handlers/rest_exchanger_factory.rb +2 -0
- data/lib/soaspec/exchange_handlers/rest_handler.rb +8 -3
- data/lib/soaspec/exchange_handlers/rest_methods.rb +2 -0
- data/lib/soaspec/exchange_handlers/rest_parameters.rb +13 -0
- data/lib/soaspec/exchange_handlers/rest_parameters_defaults.rb +3 -1
- data/lib/soaspec/exchange_handlers/soap_handler.rb +4 -2
- data/lib/soaspec/exe_helpers.rb +2 -0
- data/lib/soaspec/generate_server.rb +2 -0
- data/lib/soaspec/indifferent_hash.rb +2 -0
- data/lib/soaspec/interpreter.rb +6 -4
- data/lib/soaspec/matchers.rb +6 -2
- data/lib/soaspec/o_auth2.rb +5 -3
- data/lib/soaspec/soaspec_shared_examples.rb +2 -0
- data/lib/soaspec/spec_logger.rb +2 -0
- data/lib/soaspec/template_reader.rb +2 -0
- data/lib/soaspec/test_server/get_bank.rb +2 -0
- data/lib/soaspec/test_server/id_manager.rb +2 -0
- data/lib/soaspec/test_server/invoices.rb +2 -0
- data/lib/soaspec/test_server/puppy_service.rb +2 -0
- data/lib/soaspec/test_server/test_attribute.rb +2 -0
- data/lib/soaspec/test_server/test_namespace.rb +2 -0
- data/lib/soaspec/version.rb +3 -1
- data/lib/soaspec/virtual_server.rb +2 -0
- data/lib/soaspec/wait.rb +3 -1
- data/lib/soaspec/wsdl_generator.rb +6 -6
- data/lib/soaspec.rb +2 -0
- data/soaspec.gemspec +2 -0
- data/test_wsdl.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13abdb0b785d580ec2af2397004bde32370cffa289fbafc7d754a51e2a2e7bee
|
4
|
+
data.tar.gz: 6825e3c29b77b9072e26b068b407f30e3ffcf2e97983fa1d78d47d2e79aedd2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '05649c438f5f8f9d43c870d9e0abc2dcf88fb8762c53374487e0dc7fdb33f4f422d8f6ef514ed536d8276b4705646a7fa471fbc9be4bc3875800c3b40a79c851'
|
7
|
+
data.tar.gz: ce3c53b92dadd7949b18455d835220961a4813954442ba5e46d789ae8f499dc114861f3a3f2d8e720cfda6b641d8c20995722978f36aa20a5c080963ce301958
|
data/ChangeLog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
Version 0.2.30
|
2
|
+
* Enhancement
|
3
|
+
* New method `retry_on_exceptions` on `exchange_handler` where one can specify
|
4
|
+
exceptions to retry on for all exchanges using that Handler
|
5
|
+
* 'exception' method on handler that stores exception of last exchange
|
6
|
+
|
1
7
|
Version 0.2.29
|
2
8
|
* Enhancement
|
3
9
|
* SpecLogger - change:
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'bundler/gem_tasks'
|
2
4
|
require 'rspec/core/rake_task'
|
3
5
|
require 'rake/clean'
|
@@ -12,7 +14,7 @@ RSpec::Core::RakeTask.new(spec: %i[clean clobber start_test_server]) do |t|
|
|
12
14
|
t.pattern = "spec/**/#{ENV['folder']}*/#{ENV['test']}*_spec.rb"
|
13
15
|
end
|
14
16
|
|
15
|
-
task :
|
17
|
+
task parallel: %i[clean clobber start_test_server] do
|
16
18
|
puts `parallel_rspec spec`
|
17
19
|
end
|
18
20
|
|
data/exe/soaspec
CHANGED
data/exe/xml_to_yaml_file
CHANGED
data/lib/soaspec/demo.rb
CHANGED
data/lib/soaspec/errors.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
module Soaspec
|
3
4
|
# Standard Error related to Soaspec
|
4
|
-
class Error < StandardError
|
5
|
+
class Error < StandardError; end
|
5
6
|
# Error related to a response
|
6
|
-
class ResponseError < StandardError
|
7
|
+
class ResponseError < StandardError; end
|
7
8
|
end
|
8
9
|
|
9
10
|
# Raised to represent when there's no element at an Xpath
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../soaspec'
|
2
4
|
require_relative 'exchange_properties'
|
3
5
|
require_relative 'exchange_extractor'
|
@@ -19,9 +21,11 @@ class Exchange
|
|
19
21
|
|
20
22
|
# Instance of ExchangeHandler for which this exchange is made
|
21
23
|
attr_accessor :exchange_handler
|
22
|
-
# How many times to retry for a success
|
24
|
+
# @return [Integer] How many times to retry for a success
|
23
25
|
attr_accessor :retry_count
|
24
|
-
#
|
26
|
+
# @return [Integer] Times request was retried before being returned
|
27
|
+
attr_accessor :times_retried
|
28
|
+
# @@return [String] Name used for displaying class
|
25
29
|
attr_accessor :test_name
|
26
30
|
# Expect Factory to fail upon trying to create
|
27
31
|
attr_writer :fail_factory
|
@@ -35,11 +39,18 @@ class Exchange
|
|
35
39
|
self
|
36
40
|
end
|
37
41
|
|
42
|
+
# This is set on an individual Exchange marking it as one that should be retried
|
38
43
|
# @return [Bool] Whether to keep making request until success code reached
|
39
44
|
def retry_for_success?
|
40
45
|
@retry_for_success
|
41
46
|
end
|
42
47
|
|
48
|
+
# Defined as general rule from ExchangeHandler
|
49
|
+
# @return [Boolean] Whether exception is an exception that must be retried
|
50
|
+
def invalid_exception?
|
51
|
+
!exchange_handler.retry_on_exceptions.find { |e| e == exchange_handler.exception.class }.nil?
|
52
|
+
end
|
53
|
+
|
43
54
|
# Override this in subclass to tie that subclass to an ExchangeHandler
|
44
55
|
# @return [Soaspec::ExchangeHandler] Soaspec::ExchangeHandler used by this exchange
|
45
56
|
def default_handler_used; end
|
@@ -57,8 +68,8 @@ class Exchange
|
|
57
68
|
@fail_factory = nil
|
58
69
|
@override_parameters = override_parameters
|
59
70
|
@retry_for_success = false
|
60
|
-
self.retry_count =
|
61
|
-
|
71
|
+
self.retry_count = exchange_handler.retry_exception_limit
|
72
|
+
exchange_handler.elements.each { |element| methods_for_element(element) }
|
62
73
|
end
|
63
74
|
|
64
75
|
# @return [Hash] Hash representing what will be sent
|
@@ -74,10 +85,11 @@ class Exchange
|
|
74
85
|
request_params = @override_parameters
|
75
86
|
(0..retry_count).each do |count|
|
76
87
|
response = exchange_handler.make_request(request_params)
|
77
|
-
return response
|
88
|
+
return response if !retry_for_success? && !invalid_exception?
|
78
89
|
return response if (200..299).cover? exchange_handler.status_code_for(response)
|
79
90
|
|
80
|
-
sleep
|
91
|
+
sleep exchange_handler.retry_pause_time # Time before retrying
|
92
|
+
self.times_retried = count
|
81
93
|
break response if count == retry_count
|
82
94
|
end
|
83
95
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Soaspec
|
2
4
|
# Methods for extracting aspects of the traffic for a request / response
|
3
5
|
# in an exchange from the ExchangeHandler that it's tied to
|
@@ -32,7 +34,7 @@ module Soaspec
|
|
32
34
|
exchange_handler.value_from_path(response, path.to_s)
|
33
35
|
end
|
34
36
|
|
35
|
-
|
37
|
+
alias value_from_path []
|
36
38
|
|
37
39
|
# Using same path syntax as []. Returns true of false depending on whether an element is found
|
38
40
|
# @return [Boolean] Whether an element exists at the path
|
@@ -1,10 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'handler_accessors'
|
4
|
+
require_relative 'exchange_handler_defaults'
|
2
5
|
|
3
6
|
module Soaspec
|
4
7
|
# Inherit this for a class describing how to implement a particular exchange.
|
5
|
-
# Has
|
8
|
+
# Has methods common to Soaspec framework for working with Exchange/Handler pair
|
6
9
|
class ExchangeHandler
|
7
10
|
extend Soaspec::HandlerAccessors
|
11
|
+
include ExchangeHandlerDefaults
|
12
|
+
|
13
|
+
# @return [Exception] Exception if raised
|
14
|
+
attr_accessor :exception
|
8
15
|
|
9
16
|
# Use an instance of this ExchangeHandler in any further Exchange's
|
10
17
|
# This is a convenience method as it creates an ExchangeHandler behind the scenes
|
@@ -64,32 +71,6 @@ module Soaspec
|
|
64
71
|
@template_name = name
|
65
72
|
end
|
66
73
|
|
67
|
-
# Will be used in 'success_scenarios' shared examples.
|
68
|
-
# Set though 'mandatory_elements' method
|
69
|
-
# @return [Array] Array of symbols specifying element names
|
70
|
-
def expected_mandatory_elements
|
71
|
-
[]
|
72
|
-
end
|
73
|
-
|
74
|
-
# Change this through 'mandatory_xpath_values' method to specify xpath results that must be present in the response
|
75
|
-
# Will be used in 'success_scenarios' shared examples
|
76
|
-
# @return [Hash] Hash of 'xpath' => 'expected value' pairs
|
77
|
-
def expected_mandatory_xpath_values
|
78
|
-
{}
|
79
|
-
end
|
80
|
-
|
81
|
-
# Change this through 'mandatory_json_values' method to specify json results that must be present in the response
|
82
|
-
# Will be used in 'success_scenarios' shared examples
|
83
|
-
# @return [Hash] Hash of 'json/path' => 'expected value' pairs
|
84
|
-
def expected_mandatory_json_values
|
85
|
-
{}
|
86
|
-
end
|
87
|
-
|
88
|
-
# @return [Boolean] Whether all xpaths will be done with XML that is converted to lower case
|
89
|
-
def convert_to_lower?
|
90
|
-
false
|
91
|
-
end
|
92
|
-
|
93
74
|
# Stores a value in a method that can be accessed by the provided name
|
94
75
|
# @param [Symbol] name Name of method to use to access this value within handler
|
95
76
|
# @param [String] value Value to store
|
@@ -113,18 +94,5 @@ module Soaspec
|
|
113
94
|
__send__("#{key}=", hash[key])
|
114
95
|
hash.delete key
|
115
96
|
end
|
116
|
-
|
117
|
-
# @return [Boolean] Whether to remove namespaces in xpath assertion automatically
|
118
|
-
def strip_namespaces?
|
119
|
-
false
|
120
|
-
end
|
121
|
-
|
122
|
-
# Request of API call. Either intended request or actual request
|
123
|
-
# @param [Object] response Response from calling exchange
|
124
|
-
def request(response)
|
125
|
-
return "Request not yet sent Request option is #{@request_option}" unless response
|
126
|
-
|
127
|
-
'Specific API handler should implement this'
|
128
|
-
end
|
129
97
|
end
|
130
98
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Default values set for methods on ExchangeHandler
|
4
|
+
module ExchangeHandlerDefaults
|
5
|
+
# Will be used in 'success_scenarios' shared examples.
|
6
|
+
# Set though 'mandatory_elements' method
|
7
|
+
# @return [Array] Array of symbols specifying element names
|
8
|
+
def expected_mandatory_elements
|
9
|
+
[]
|
10
|
+
end
|
11
|
+
|
12
|
+
# Change this through 'mandatory_xpath_values' method to specify xpath results that must be present in the response
|
13
|
+
# Will be used in 'success_scenarios' shared examples
|
14
|
+
# @return [Hash] Hash of 'xpath' => 'expected value' pairs
|
15
|
+
def expected_mandatory_xpath_values
|
16
|
+
{}
|
17
|
+
end
|
18
|
+
|
19
|
+
# Change this through 'mandatory_json_values' method to specify json results that must be present in the response
|
20
|
+
# Will be used in 'success_scenarios' shared examples
|
21
|
+
# @return [Hash] Hash of 'json/path' => 'expected value' pairs
|
22
|
+
def expected_mandatory_json_values
|
23
|
+
{}
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Boolean] Whether all xpaths will be done with XML that is converted to lower case
|
27
|
+
def convert_to_lower?
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Boolean] Whether to remove namespaces in xpath assertion automatically
|
32
|
+
def strip_namespaces?
|
33
|
+
false
|
34
|
+
end
|
35
|
+
|
36
|
+
# Request of API call. Either intended request or actual request
|
37
|
+
# @param [Object] response Response from calling exchange
|
38
|
+
def request(response)
|
39
|
+
return "Request not yet sent Request option is #{@request_option}" unless response
|
40
|
+
|
41
|
+
'Specific API handler should implement this'
|
42
|
+
end
|
43
|
+
|
44
|
+
# Set through 'retry_on_exceptions' method
|
45
|
+
# @return [Array] List of exceptions to retry for
|
46
|
+
def retry_on_exceptions
|
47
|
+
[]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Set this through 'retry_on_exceptions' on ExchangeHandler
|
51
|
+
# @return [Integer] Time to wait before retrying each request. Default of 1
|
52
|
+
def retry_pause_time
|
53
|
+
1
|
54
|
+
end
|
55
|
+
|
56
|
+
# Set this through 'retry_on_exceptions' on ExchangeHandler
|
57
|
+
# @return [Integer] Times to retry before raising exception. Default of 3
|
58
|
+
def retry_exception_limit
|
59
|
+
3
|
60
|
+
end
|
61
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Soaspec
|
2
4
|
# Models a request made to a REST API
|
3
5
|
class RestRequest
|
@@ -38,7 +40,7 @@ module Soaspec
|
|
38
40
|
# @param [String, Symbol] value Message to send to object retrieving a value
|
39
41
|
# @return [Object] Result of retrieving value
|
40
42
|
def [](value)
|
41
|
-
|
43
|
+
send(value)
|
42
44
|
end
|
43
45
|
|
44
46
|
# @return [String] Show inspection of all parameters
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Soaspec
|
2
4
|
# Models a request made to a SOAP API
|
3
5
|
class SoapRequest
|
@@ -28,7 +30,7 @@ module Soaspec
|
|
28
30
|
# @param [String, Symbol] value Message to send to object retrieving a value
|
29
31
|
# @return [Object] Result of retrieving value
|
30
32
|
def [](value)
|
31
|
-
|
33
|
+
send(value)
|
32
34
|
end
|
33
35
|
|
34
36
|
# @return [String] Show inspection of all parameters
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'exchange_handler'
|
2
4
|
require_relative 'rest_parameters'
|
3
5
|
require_relative 'rest_parameters_defaults'
|
@@ -75,7 +77,7 @@ module Soaspec
|
|
75
77
|
# Override this with 'after_response' within class definition to perform an action
|
76
78
|
# after response is retrieved
|
77
79
|
# @param [RestClient::Response] _response Response to interpret to perform after block
|
78
|
-
def after_response(_response, _self)
|
80
|
+
def after_response(_response, _self); end
|
79
81
|
|
80
82
|
# Used in together with Exchange request that passes such override parameters
|
81
83
|
# @param [Hash] override_parameters Params to characterize REST request
|
@@ -93,9 +95,9 @@ module Soaspec
|
|
93
95
|
test_values = interpret_parameters override_parameters
|
94
96
|
# In order for ERB to be calculated at correct time, the first time request is made, the resource should be created
|
95
97
|
@resource ||= RestClient::Resource.new(ERB.new(base_url_value).result(binding), @merged_options)
|
96
|
-
|
97
98
|
@resource_used = test_values[:suburl] ? @resource[test_values[:suburl]] : @resource
|
98
99
|
|
100
|
+
self.exception = nil # Remove any previously stored exception
|
99
101
|
begin
|
100
102
|
response = case test_values[:method]
|
101
103
|
when :post, :patch, :put
|
@@ -104,7 +106,10 @@ module Soaspec
|
|
104
106
|
else # :get, :delete
|
105
107
|
@resource_used.send(test_values[:method].to_s, test_values[:params])
|
106
108
|
end
|
107
|
-
rescue RestClient::
|
109
|
+
rescue RestClient::Exception => e
|
110
|
+
self.exception = e
|
111
|
+
raise e unless e.respond_to? :response
|
112
|
+
|
108
113
|
response = e.response
|
109
114
|
end
|
110
115
|
Soaspec::SpecLogger.info("response: \n headers: #{response&.headers}\n body: #{response}\n")
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Soaspec
|
2
4
|
# Methods to define parameters specific to REST handler
|
3
5
|
module RestParameters
|
@@ -79,6 +81,17 @@ module Soaspec
|
|
79
81
|
define_method('after_response') { |response, _self| yield response, self }
|
80
82
|
end
|
81
83
|
|
84
|
+
# @param [Array] exception_list List of exceptions to retry response on. Default is
|
85
|
+
# any REST exception
|
86
|
+
# @param [Integer] pause Time to wait before retrying
|
87
|
+
# @param [Integer] count Times to retry
|
88
|
+
def retry_on_exceptions(exception_list = [RestClient::RestHandler], pause: 1,
|
89
|
+
count: 3)
|
90
|
+
define_method('retry_on_exceptions') { exception_list }
|
91
|
+
define_method('retry_pause_time') { pause }
|
92
|
+
define_method('retry_exception_limit') { count }
|
93
|
+
end
|
94
|
+
|
82
95
|
private
|
83
96
|
|
84
97
|
# Load credentials hash from a YAML using Soaspec.credentials_folder if set, adding '.yml' if not set
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Soaspec
|
2
4
|
# Defaults for Soaspec RestParameters methods
|
3
5
|
module RestParametersDefaults
|
@@ -19,7 +21,7 @@ module Soaspec
|
|
19
21
|
# base_url "#{parent_url}/child_path"
|
20
22
|
# end
|
21
23
|
#
|
22
|
-
# Child.new.base_url_value
|
24
|
+
# Child.new.base_url_value # => 'parent/child_path'
|
23
25
|
# @return [String] Base url that can be accessed by a subclass.
|
24
26
|
def parent_url
|
25
27
|
raise 'This needs to be set through base_url method'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'exchange_handler'
|
2
4
|
require_relative '../core_ext/hash'
|
3
5
|
require_relative '../errors'
|
@@ -107,8 +109,8 @@ module Soaspec
|
|
107
109
|
# Call the SOAP operation with the request XML provided
|
108
110
|
request = request_parameters(request_parameters)
|
109
111
|
begin
|
110
|
-
client.call request.operation, request.body #request_body_params(request_parameters)
|
111
|
-
rescue Savon::HTTPError =>
|
112
|
+
client.call request.operation, request.body # request_body_params(request_parameters)
|
113
|
+
rescue Savon::HTTPError => e
|
112
114
|
soap_error
|
113
115
|
end
|
114
116
|
end
|
data/lib/soaspec/exe_helpers.rb
CHANGED
data/lib/soaspec/interpreter.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Help interpret the general type of a particular object
|
2
4
|
class Interpreter
|
3
5
|
class << self
|
@@ -52,16 +54,16 @@ class Interpreter
|
|
52
54
|
# @return [Boolean] Whether valid XML
|
53
55
|
def xml?
|
54
56
|
Nokogiri::XML(@response) { |config| config.options = Nokogiri::XML::ParseOptions::STRICT }
|
55
|
-
rescue Nokogiri::XML::SyntaxError =>
|
56
|
-
self.xml_errors =
|
57
|
+
rescue Nokogiri::XML::SyntaxError => e
|
58
|
+
self.xml_errors = e
|
57
59
|
false
|
58
60
|
end
|
59
61
|
|
60
62
|
# @return [Boolean] Whether valid JSON
|
61
63
|
def json?
|
62
64
|
JSON.parse(@response)
|
63
|
-
rescue JSON::ParserError=>
|
64
|
-
self.json_errors =
|
65
|
+
rescue JSON::ParserError => e
|
66
|
+
self.json_errors = e
|
65
67
|
false
|
66
68
|
end
|
67
69
|
end
|
data/lib/soaspec/matchers.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'core_ext/hash'
|
2
4
|
require_relative 'errors'
|
3
5
|
|
@@ -85,8 +87,8 @@ RSpec::Matchers.define :be_successful do
|
|
85
87
|
exchange.exchange_handler.expected_mandatory_elements.each do |mandatory_element_path|
|
86
88
|
begin
|
87
89
|
exchange[mandatory_element_path]
|
88
|
-
rescue NoElementAtPath =>
|
89
|
-
failure_list <<
|
90
|
+
rescue NoElementAtPath => e
|
91
|
+
failure_list << e.message
|
90
92
|
end
|
91
93
|
end
|
92
94
|
exchange.exchange_handler.expected_mandatory_xpath_values.each do |path, value|
|
@@ -102,6 +104,7 @@ RSpec::Matchers.define :be_successful do
|
|
102
104
|
exchange = exchange_from actual
|
103
105
|
failure_list = collect_errors exchange
|
104
106
|
raise failure_list.to_s unless failure_list.empty?
|
107
|
+
|
105
108
|
true
|
106
109
|
end
|
107
110
|
|
@@ -109,6 +112,7 @@ RSpec::Matchers.define :be_successful do
|
|
109
112
|
exchange = exchange_from actual
|
110
113
|
failure_list = collect_errors exchange
|
111
114
|
raise "Expected failure. Status code is #{exchange.status_code}" if failure_list.empty?
|
115
|
+
|
112
116
|
true
|
113
117
|
end
|
114
118
|
end
|
data/lib/soaspec/o_auth2.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'erb'
|
2
4
|
|
3
5
|
module Soaspec
|
@@ -98,12 +100,12 @@ module Soaspec
|
|
98
100
|
def response
|
99
101
|
Soaspec::SpecLogger.info "using oauth_params: #{params}" if debug_oauth?
|
100
102
|
response = RestClient.post(params[:token_url], payload, cache_control: 'no_cache', verify_ssl: false)
|
101
|
-
rescue RestClient::Exception =>
|
102
|
-
Soaspec::SpecLogger.info(["oauth_error: #{
|
103
|
+
rescue RestClient::Exception => e
|
104
|
+
Soaspec::SpecLogger.info(["oauth_error: #{e.message}", "oauth_response: #{e.response}"])
|
103
105
|
self.retry_count += 1
|
104
106
|
sleep 0.1 # Wait if a bit before retying obtaining access token
|
105
107
|
retry if retry_count < self.class.retry_limit
|
106
|
-
raise
|
108
|
+
raise e
|
107
109
|
else
|
108
110
|
Soaspec::SpecLogger.info(["response: \n headers: #{response&.headers}\n body: #{response}\n"]) if debug_oauth?
|
109
111
|
JSON.parse(response)
|
data/lib/soaspec/spec_logger.rb
CHANGED
data/lib/soaspec/version.rb
CHANGED
data/lib/soaspec/wait.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Soaspec
|
2
4
|
class TimeOutError < StandardError; end
|
3
5
|
# Class to enable waiting for an expected condition to return true
|
@@ -27,7 +29,7 @@ module Soaspec
|
|
27
29
|
begin
|
28
30
|
result = yield
|
29
31
|
return result if result
|
30
|
-
rescue *ignored =>
|
32
|
+
rescue *ignored => e
|
31
33
|
# swallowed
|
32
34
|
end
|
33
35
|
sleep interval
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Soaspec
|
2
4
|
# Produce test content from a WSDL
|
3
5
|
module WsdlGenerator
|
@@ -26,12 +28,10 @@ module Soaspec
|
|
26
28
|
@use_camel_case = false
|
27
29
|
puts 'Message params: ' + op_details.to_s
|
28
30
|
# From namespace identifier, find namespace, and for that find schemaLocation xsd and use that to build request
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
# TODO: If details is a Hash need to loop again
|
34
|
-
end
|
31
|
+
op_details[:parameters]&.each do |element, details|
|
32
|
+
@use_camel_case = true unless /[[:upper:]]/.match(element.to_s[0]).nil?
|
33
|
+
@content += " #{element.to_s.snakecase}: #{fill_in_field_from_type(details[:type])} # #{details[:type]} \n"
|
34
|
+
# TODO: If details is a Hash need to loop again
|
35
35
|
end
|
36
36
|
wsdl_to_yaml_for root_elements_for(op_details)
|
37
37
|
params = []
|
data/lib/soaspec.rb
CHANGED
data/soaspec.gemspec
CHANGED
data/test_wsdl.rb
CHANGED
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.2.
|
4
|
+
version: 0.2.30
|
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
|
+
date: 2019-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -481,6 +481,7 @@ files:
|
|
481
481
|
- lib/soaspec/exchange/request_builder.rb
|
482
482
|
- lib/soaspec/exchange/variable_storer.rb
|
483
483
|
- lib/soaspec/exchange_handlers/exchange_handler.rb
|
484
|
+
- lib/soaspec/exchange_handlers/exchange_handler_defaults.rb
|
484
485
|
- lib/soaspec/exchange_handlers/handler_accessors.rb
|
485
486
|
- lib/soaspec/exchange_handlers/request/rest_request.rb
|
486
487
|
- lib/soaspec/exchange_handlers/request/soap_request.rb
|