soaspec 0.0.72 → 0.0.73
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/lib/soaspec/exchange.rb +50 -24
- data/lib/soaspec/matchers.rb +6 -6
- data/lib/soaspec/soaspec_shared_examples.rb +3 -3
- data/lib/soaspec/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 560cab022af5b3297cf79ae3bfd3b71cb023ac3d
|
4
|
+
data.tar.gz: c178b241de61f0ff91001ab1c710dd196ec6e611
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4aad8d63361904d563c10534248dc90376d493712e579e6da2d1e8a787940664e51261531bcd2d37e038c28bfe19e300665f9df3a65b7c5841a968246ec9fcd7
|
7
|
+
data.tar.gz: 0e93c0c83266d50026b4c36488b63abbe26a31987006fa2f964487b9c94d3c74517c26c228ba0a927c3840716e4f2b9ace495ac6bb8d8bd3e7e3d36a6495c16b
|
data/ChangeLog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
Version 0.0.73
|
2
|
+
* Enhancements
|
3
|
+
* Added 'default_handler' method with which define an exchange_handler to be created when an exchange is initialized
|
4
|
+
* Refactoring
|
5
|
+
* Use `@exchange_handler` instead of `@api_class` which is more consistent
|
6
|
+
|
1
7
|
Version 0.0.72
|
2
8
|
* Enhancements
|
3
9
|
* Add ability to convert XML response to lower case for simpler xpath searching
|
data/lib/soaspec/exchange.rb
CHANGED
@@ -1,10 +1,26 @@
|
|
1
1
|
require_relative '../soaspec'
|
2
2
|
|
3
|
+
# Convenience methods to set Exchange specific properties
|
4
|
+
module ExchangeAccessors
|
5
|
+
|
6
|
+
# Set default exchange handler for this exchange
|
7
|
+
# This is helpful for when you need a new exchange handler created for each exchange
|
8
|
+
def default_handler(handler_class, name = handler_class.to_s, params = {})
|
9
|
+
define_method('default_handler_used') do
|
10
|
+
handler_class.new name, params
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
3
15
|
# This represents a request / response pair
|
16
|
+
# Essentially, params in the exchange that are set are related to the request
|
17
|
+
# What is returned is related to the response
|
4
18
|
class Exchange
|
5
19
|
|
6
|
-
|
7
|
-
|
20
|
+
extend ExchangeAccessors
|
21
|
+
|
22
|
+
# Class of Exchange Handler for which this exchange is made
|
23
|
+
attr_accessor :exchange_handler
|
8
24
|
# How many times to retry for a success
|
9
25
|
attr_accessor :retry_count
|
10
26
|
# Name used for displaying class
|
@@ -22,28 +38,38 @@ class Exchange
|
|
22
38
|
@retry_for_success
|
23
39
|
end
|
24
40
|
|
41
|
+
# @return [Boolean] Soaspec::ExchangeHandler used by this exchange
|
42
|
+
def default_handler_used
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
|
46
|
+
# @param [String] element Element to define methods for
|
47
|
+
def methods_for_element(element)
|
48
|
+
element_name = element.to_s.split('__custom_path_').last
|
49
|
+
define_singleton_method(element_name) do
|
50
|
+
exchange_handler.__send__(element, response) # Forward the call onto handler to retrieve the element for the response
|
51
|
+
end
|
52
|
+
define_singleton_method("#{element_name}?") do
|
53
|
+
begin
|
54
|
+
__send__ element_name
|
55
|
+
true
|
56
|
+
rescue NoElementAtPath
|
57
|
+
false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
25
62
|
# @param [Symbol, String] name Name shown in RSpec run
|
26
63
|
# @param [Hash] override_parameters Parameters to override for default params
|
27
64
|
def initialize(name = self.class.to_s, override_parameters = {})
|
28
65
|
self.test_name ||= name.to_s
|
29
|
-
|
66
|
+
# As a last resort this uses the global parameter. The handler should be set straight before an exchange is made to use this
|
67
|
+
@exchange_handler ||= default_handler_used || Soaspec.api_handler
|
68
|
+
raise '@exchange_handler not set. Set either with `Soaspec.api_handler = Handler.new` or within the exchange' unless @exchange_handler
|
30
69
|
@override_parameters = override_parameters
|
31
70
|
@retry_for_success = false
|
32
71
|
self.retry_count = 3
|
33
|
-
@
|
34
|
-
element_name = element.to_s.split('__custom_path_').last
|
35
|
-
define_singleton_method(element_name) do
|
36
|
-
@api_class.__send__(element, response) # Forward the call onto handler to retrieve the element for the response
|
37
|
-
end
|
38
|
-
define_singleton_method("#{element_name}?") do
|
39
|
-
begin
|
40
|
-
__send__ element_name
|
41
|
-
true
|
42
|
-
rescue NoElementAtPath
|
43
|
-
false
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
72
|
+
@exchange_handler.elements.each { |element| methods_for_element(element) }
|
47
73
|
end
|
48
74
|
|
49
75
|
# Specify a url to add onto the base_url of the ExchangeHandler used
|
@@ -65,9 +91,9 @@ class Exchange
|
|
65
91
|
Soaspec::SpecLogger.add_to 'Example ' + test_name
|
66
92
|
request_params = @override_parameters
|
67
93
|
retry_count.times do
|
68
|
-
response = @
|
94
|
+
response = @exchange_handler.make_request(request_params)
|
69
95
|
return response unless retry_for_success?
|
70
|
-
return response if (200..299).cover? @
|
96
|
+
return response if (200..299).cover? @exchange_handler.status_code_for(response)
|
71
97
|
response
|
72
98
|
end
|
73
99
|
end
|
@@ -76,7 +102,7 @@ class Exchange
|
|
76
102
|
# @param [Symbol] name Name of method to use to access this value within handler
|
77
103
|
# @param [String] value Path to value to store
|
78
104
|
def store(name, value)
|
79
|
-
@
|
105
|
+
@exchange_handler.store(name, self[value])
|
80
106
|
end
|
81
107
|
|
82
108
|
# Retrieve the stored value from the Api Handler
|
@@ -84,8 +110,8 @@ class Exchange
|
|
84
110
|
# @return [Object] value from the Api Handler stored previously
|
85
111
|
def retrieve(name)
|
86
112
|
method = '__stored_val__' + name.to_s
|
87
|
-
raise ArgumentError('Value not stored at ') unless
|
88
|
-
|
113
|
+
raise ArgumentError('Value not stored at ') unless exchange_handler.respond_to? method
|
114
|
+
exchange_handler.send(method)
|
89
115
|
end
|
90
116
|
|
91
117
|
# Name describing this class when used with `RSpec.describe`
|
@@ -108,7 +134,7 @@ class Exchange
|
|
108
134
|
# Get status code from api class. This is http response for Web Api
|
109
135
|
# @return [Integer] Status code from api class
|
110
136
|
def status_code
|
111
|
-
@
|
137
|
+
@exchange_handler.status_code_for(response)
|
112
138
|
end
|
113
139
|
|
114
140
|
# Dummy request used to make a request without verifying it and ignoring WSDL errors
|
@@ -134,7 +160,7 @@ class Exchange
|
|
134
160
|
# @param [Object] path Path to return element for api class E.g - for SOAP this is XPath string. For JSON, this is Hash dig Array
|
135
161
|
# @return [String] Value at path
|
136
162
|
def [](path)
|
137
|
-
@
|
163
|
+
@exchange_handler.value_from_path(response, path.to_s)
|
138
164
|
end
|
139
165
|
|
140
166
|
# Set a parameter request in the request body.
|
data/lib/soaspec/matchers.rb
CHANGED
@@ -5,22 +5,22 @@ require_relative 'not_found_errors'
|
|
5
5
|
# Whether response has any element with the provided value
|
6
6
|
RSpec::Matchers.define :contain_value do |expected|
|
7
7
|
match do |actual|
|
8
|
-
expect(actual.
|
8
|
+
expect(actual.exchange_handler.include_value?(actual.response, expected)).to be true
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |actual|
|
12
|
-
"expected that #{actual.
|
12
|
+
"expected that #{actual.exchange_handler.response_body(actual.response, format: :hash)} would contain value #{expected}"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
# Whether substring exists in body of response (more general than above)
|
17
17
|
RSpec::Matchers.define :include_in_body do |expected|
|
18
18
|
match do |actual|
|
19
|
-
expect(actual.
|
19
|
+
expect(actual.exchange_handler.include_in_body?(actual.response, expected)).to be true
|
20
20
|
end
|
21
21
|
|
22
22
|
failure_message do |actual|
|
23
|
-
"expected that #{actual.
|
23
|
+
"expected that #{actual.exchange_handler.response_body(actual.response, format: :raw)} would contain value #{expected}"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -32,7 +32,7 @@ RSpec::Matchers.define :have_element_at_path do |xpath|
|
|
32
32
|
|
33
33
|
# TODO: Would be better to print failure message
|
34
34
|
failure_message do |actual|
|
35
|
-
"expected that #{actual.
|
35
|
+
"expected that #{actual.exchange_handler.response_body(actual.response, format: :raw)} would have element at path '#{xpath}'"
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -56,7 +56,7 @@ end
|
|
56
56
|
RSpec::Matchers.define :be_found do
|
57
57
|
|
58
58
|
match do |exchange|
|
59
|
-
expect(exchange.
|
59
|
+
expect(exchange.exchange_handler.found?(exchange.response)).to be true
|
60
60
|
end
|
61
61
|
|
62
62
|
failure_message do |exchange|
|
@@ -5,18 +5,18 @@ shared_examples_for 'success scenario' do
|
|
5
5
|
expect(200..299).to cover described_class.status_code
|
6
6
|
end
|
7
7
|
context 'has expected mandatory elements' do
|
8
|
-
described_class.
|
8
|
+
described_class.exchange_handler.expected_mandatory_elements.each do |mandatory_element|
|
9
9
|
it mandatory_element do
|
10
10
|
expect(described_class).to contain_key mandatory_element
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
14
|
-
described_class.
|
14
|
+
described_class.exchange_handler.expected_mandatory_xpath_values.each do |xpath, value|
|
15
15
|
it "has xpath '#{xpath}' equal to '#{value}'" do
|
16
16
|
expect(described_class).to have_xpath_value(xpath => value)
|
17
17
|
end
|
18
18
|
end
|
19
|
-
described_class.
|
19
|
+
described_class.exchange_handler.expected_mandatory_json_values.each do |xpath, value|
|
20
20
|
it "has xpath '#{xpath}' equal to '#{value}'" do
|
21
21
|
expect(described_class).to have_xpath_value(xpath => value)
|
22
22
|
end
|
data/lib/soaspec/version.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.0.
|
4
|
+
version: 0.0.73
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SamuelGarrattIQA
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|