soaspec 0.2.29 → 0.2.30
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/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
|