soaspec 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +17 -0
- data/ChangeLog +5 -0
- data/README.md +32 -4
- data/lib/soaspec.rb +9 -0
- data/lib/soaspec/exchange_handlers/rest_handler.rb +7 -4
- data/lib/soaspec/exchange_handlers/soap_handler.rb +1 -1
- data/lib/soaspec/not_found_errors.rb +1 -2
- 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: 1c1e38e1213ce6461e1bca9a181d6be4130295a4
|
4
|
+
data.tar.gz: 9e2170b74242c21f8c9ac3fe51fccf5676a4db49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c41202a31e2e2740688628efada58bb0631cd91b5f1b60f624219d0f254c1cb5e823f00d2ea2451f16890b8059594fe8add22c9db4cb4d4db3acca8f06dcd90
|
7
|
+
data.tar.gz: 76bbf2ad8ba5a5e1333cb33653ba45220c9dcca5d8257b7e5c235dc849dfd85ea0b5783d3e1100ee7b606c3072a9cf95c5e4e362e91ba2b4f3c1a8586ccb0d05
|
data/.gitlab-ci.yml
CHANGED
@@ -18,6 +18,23 @@ cucumber:
|
|
18
18
|
script:
|
19
19
|
- bundle exec cucumber
|
20
20
|
|
21
|
+
code_quality:
|
22
|
+
image: docker:stable
|
23
|
+
variables:
|
24
|
+
DOCKER_DRIVER: overlay2
|
25
|
+
allow_failure: true
|
26
|
+
services:
|
27
|
+
- docker:stable-dind
|
28
|
+
script:
|
29
|
+
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
|
30
|
+
- docker run
|
31
|
+
--env SOURCE_CODE="$PWD"
|
32
|
+
--volume "$PWD":/code
|
33
|
+
--volume /var/run/docker.sock:/var/run/docker.sock
|
34
|
+
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
|
35
|
+
artifacts:
|
36
|
+
paths: [gl-code-quality-report.json]
|
37
|
+
|
21
38
|
pages:
|
22
39
|
stage: deploy
|
23
40
|
dependencies:
|
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -24,7 +24,7 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Getting Started
|
26
26
|
|
27
|
-
To create a new test suite using this you can use the 'soaspec
|
27
|
+
To create a new test suite using this you can use the 'soaspec' binary.
|
28
28
|
|
29
29
|
Example:
|
30
30
|
|
@@ -51,10 +51,38 @@ for such defaults. When describing an API override this in 'savon_options' metho
|
|
51
51
|
|
52
52
|
See specs for example of usage. This will be added to later.
|
53
53
|
|
54
|
-
|
54
|
+
Basically you create a class inheriting from a ‘Handler’ class for each web service that’s tested.
|
55
|
+
In this class you define the common parameters used for testing this class.
|
56
|
+
|
57
|
+
For example:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
class PuppyService < Soaspec::RestHandler
|
61
|
+
|
62
|
+
headers accept: 'application/json', content_type: 'application/json'
|
63
|
+
|
64
|
+
base_url 'http://petstore.swagger.io/v2/pet'
|
65
|
+
|
66
|
+
element :id, :id
|
67
|
+
element :category_id, '$..category.id'
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
Then you reference this class in creating `Exchange`’s (representing a request / response pair).
|
72
|
+
Upon initialization of the Exchange object or later on through setters, parameters specific to this request are set
|
73
|
+
All getters of the Exchange are on the response & will implicitly trigger the API request to be made.
|
74
|
+
|
75
|
+
For example:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
context PuppyService.new('Order Puppies') do
|
79
|
+
describe post(:create_pet, body: { status: 'sold' }) do # Post with status as sold in request
|
80
|
+
its(['status']) { is_expected.to eq 'sold' } # Check responses status is sold
|
81
|
+
end
|
82
|
+
end
|
83
|
+
```
|
55
84
|
|
56
|
-
|
57
|
-
that class. See 'weather_web_service.rb' class in spec/soaspec/soap folder for example.
|
85
|
+
### Recommended
|
58
86
|
|
59
87
|
If you find having a large backtrace on errors or RSpec shared examples such as 'success scenarios' this can shorten the
|
60
88
|
backtrace.
|
data/lib/soaspec.rb
CHANGED
@@ -32,9 +32,13 @@ require 'soaspec/wsdl_generator'
|
|
32
32
|
# Gem for handling SOAP and REST api tests
|
33
33
|
module Soaspec
|
34
34
|
|
35
|
+
@template_folder = 'template'
|
36
|
+
|
35
37
|
class << self
|
36
38
|
# Specify whether to see params sent to and retrieved from oauth. This will put password in log file, only recommended for debugging
|
37
39
|
attr_writer :debug_oauth
|
40
|
+
# Folder used to store templates for API calls
|
41
|
+
attr_accessor :template_folder
|
38
42
|
|
39
43
|
# Folder used to store credentials
|
40
44
|
# Used in auth2_file command
|
@@ -75,6 +79,11 @@ module Soaspec
|
|
75
79
|
@debug_oauth || false
|
76
80
|
end
|
77
81
|
|
82
|
+
# @return [String] Folder used to store templates for API calls
|
83
|
+
# def template_folder
|
84
|
+
# @template_folder || 'template'
|
85
|
+
# end
|
86
|
+
|
78
87
|
# Whether to log all API traffic
|
79
88
|
def log_api_traffic=(set)
|
80
89
|
@log_api_traffic = set
|
@@ -229,9 +229,12 @@ module Soaspec
|
|
229
229
|
return result.inner_text if attribute.nil?
|
230
230
|
return result.attributes[attribute].inner_text
|
231
231
|
when :json
|
232
|
-
|
233
|
-
|
234
|
-
|
232
|
+
paths_to_check = path.split(',')
|
233
|
+
matching_values = paths_to_check.collect do |path_to_check|
|
234
|
+
json_path_values_for(response, path_to_check, attribute: attribute)
|
235
|
+
end.reject(&:empty?)
|
236
|
+
raise NoElementAtPath, "Path '#{path}' not found in '#{response.body}'" if matching_values.empty?
|
237
|
+
matching_values.first.first
|
235
238
|
when :hash
|
236
239
|
response.dig(path.split('.')) # Use path as Hash dig expression separating params via '.' TODO: Unit test
|
237
240
|
else
|
@@ -273,7 +276,7 @@ module Soaspec
|
|
273
276
|
if test_values[:body]
|
274
277
|
test_values[:payload] = JSON.generate(hash_used_in_request(test_values[:body])).to_s
|
275
278
|
elsif @request_option == :template
|
276
|
-
request_body = File.read(
|
279
|
+
request_body = File.read(File.join(Soaspec.template_folder, template_name))
|
277
280
|
ERB.new(request_body).result(binding)
|
278
281
|
else
|
279
282
|
test_values[:payload]
|
@@ -101,7 +101,7 @@ module Soaspec
|
|
101
101
|
test_values = request_body_params request_parameters
|
102
102
|
begin
|
103
103
|
if @request_option == :template
|
104
|
-
request_body = File.read(
|
104
|
+
request_body = File.read(File.join(Soaspec.template_folder, template_name))
|
105
105
|
render_body = ERB.new(request_body).result(binding)
|
106
106
|
client.call(operation, xml: render_body) # Call the SOAP operation with the request XML provided
|
107
107
|
elsif @request_option == :hash
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
# Raised to represent when there's no element at an Xpath
|
3
2
|
class NoElementAtPath < StandardError
|
4
3
|
def initialize(msg = 'No element at path found')
|
@@ -11,4 +10,4 @@ class NoElementInHash < StandardError
|
|
11
10
|
def initialize(msg = 'No element in Hash found')
|
12
11
|
super
|
13
12
|
end
|
14
|
-
end
|
13
|
+
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.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SamuelGarrattIQA
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|