soaspec 0.1.9 → 0.1.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a77bc501e360feb0326d9e0453fd134f534488d9
4
- data.tar.gz: 0a5543099fdea5c919f5a6fcb10c15823f9d8889
3
+ metadata.gz: 9d48c8b910dd2bf87abcae57a3a7ef25f9bdd59d
4
+ data.tar.gz: 4c0d3566be81b05fa06878f7a01d0b54ccf776ca
5
5
  SHA512:
6
- metadata.gz: 737e926e4fd459e15f4174c22991dd792d2c891f60ba48b36b538f9bf6beda5c652b4e32f50ce1cfdf189841da7bec26920e3f0ea284ff26417424271375dfc2
7
- data.tar.gz: ad5987dbd6099d7887fc0186de8806821c973138f7e1229ec7a7aba179085a20ca6a011850e4c97f69006950bf63bba98d246ae16bac180b2a4ec9fce8d8617f
6
+ metadata.gz: ee025f3a394441a6ee3612befcaf94f36c3a0d3d5dc2901230f300f4d0798424f08315e6c82009b574d0ab98dce77f432579d265e445bf4ec15c8220f5b05824
7
+ data.tar.gz: 50abba523c74d01f098a9bd1e9b061ea9e6fbe66735c59cf5110e13174c5cb166537f1d0361c1fae9377f1889f2e2c6b048d81e358e3a6aac0f108c4b9644ab7
data/ChangeLog CHANGED
@@ -1,3 +1,10 @@
1
+ Version 0.1.10
2
+ * Enhancements
3
+ * Rename default template folder from to 'template' to 'templates'
4
+ * Use TemplateReader to simplify and add error handling to extracting templates
5
+ * Got convenience Rest Methods able to handle taking in template_name
6
+ * Started making a request method to access request of API actually sent
7
+
1
8
  Version 0.1.9
2
9
  * Enhancements
3
10
  * Finally move `soaspec-virtual-server` into same binary as `soaspec` utilising Thor
data/Todo.md CHANGED
@@ -1,5 +1,7 @@
1
1
  * Unit tests
2
2
  * OAuth class, etc
3
+ * Request method from within exchange
4
+ * Use this in tests
3
5
  * Basic service generator
4
6
  * Give examples and convenience methods for building classes for each SOAP or REST operation
5
7
  * For SOAP give example of basic_auth
@@ -10,6 +10,7 @@ require 'jsonpath'
10
10
 
11
11
  require 'soaspec/version'
12
12
  require 'soaspec/o_auth2'
13
+ require 'soaspec/template_reader'
13
14
  require 'soaspec/exchange_handlers/soap_handler'
14
15
  require 'soaspec/exchange_handlers/exchange_handler'
15
16
  require 'soaspec/exchange_handlers/rest_methods'
@@ -34,19 +35,25 @@ require 'soaspec/wsdl_generator'
34
35
  # Gem for handling SOAP and REST api tests
35
36
  module Soaspec
36
37
 
37
- @template_folder = 'template'
38
+ @template_folder = 'templates'
38
39
  @auto_oauth = true
39
40
 
40
41
  class << self
41
42
  # Specify whether to see params sent to and retrieved from oauth. This will put password in log file, only recommended for debugging
42
43
  attr_writer :debug_oauth
43
44
  # Folder used to store templates for API calls
44
- attr_accessor :template_folder
45
+ attr_reader :template_folder
45
46
  # Stores last exchange
46
47
  attr_accessor :last_exchange
47
48
  # Automatically add Authorization header to RestHandler where oauth2 credentials are specified
48
49
  attr_accessor :auto_oauth
49
50
 
51
+ # Folder used to store templates for API calls
52
+ # Converts folder / folders into an array depending upon string passed
53
+ def template_folder=(folder)
54
+ @template_folder = folder.include?('\\') ? folder.split('\\') : folder.split('/')
55
+ end
56
+
50
57
  # Folder used to store credentials
51
58
  # Used in auth2_file command
52
59
  # @param [String] folder
@@ -86,11 +93,6 @@ module Soaspec
86
93
  @debug_oauth || false
87
94
  end
88
95
 
89
- # @return [String] Folder used to store templates for API calls
90
- # def template_folder
91
- # @template_folder || 'template'
92
- # end
93
-
94
96
  # Whether to log all API traffic
95
97
  def log_api_traffic=(set)
96
98
  @log_api_traffic = set
@@ -144,9 +144,9 @@ class Exchange
144
144
  end
145
145
 
146
146
  # Returns response object from Api. Will make the request if not made and then cache it for later on
147
- # For example for SOAP it will be a Savon response
148
- # response.body (body of response as Hash)
149
- # response.header (head of response as Hash)
147
+ # @example For SOAP it will be a Savon response
148
+ # response.body (body of response as Hash)
149
+ # response.header (head of response as Hash)
150
150
  def response
151
151
  Soaspec.last_exchange = self
152
152
  @response ||= make_request
@@ -154,6 +154,11 @@ class Exchange
154
154
 
155
155
  alias call response
156
156
 
157
+ # Request of API call. Either intended request or actual request
158
+ def request
159
+ exchange_handler.request(@response)
160
+ end
161
+
157
162
  # Get status code from api class. This is http response for Web Api
158
163
  # @return [Integer] Status code from api class
159
164
  def status_code
@@ -100,5 +100,11 @@ module Soaspec
100
100
  false
101
101
  end
102
102
 
103
+ # Request of API call. Either intended request or actual request
104
+ def request(response)
105
+ return "Request not yet sent Request option is #{@request_option}" unless response
106
+ 'Specific API handler should implement this'
107
+ end
108
+
103
109
  end
104
110
  end
@@ -272,19 +272,26 @@ module Soaspec
272
272
  end
273
273
  end
274
274
 
275
+ # Request of API call. Either intended request or actual request
276
+ def request(response)
277
+ return 'Request not yet sent' if response.nil?
278
+ response.request
279
+ end
280
+
275
281
  private
276
282
 
277
283
  # Work out data to send based upon payload, template_name
278
284
  # @return [String] Payload to send in REST request
279
285
  def post_data(test_values)
280
- if test_values[:body]
281
- test_values[:payload] = JSON.generate(hash_used_in_request(test_values[:body])).to_s
282
- elsif @request_option == :template
283
- request_body = File.read(File.join(Soaspec.template_folder, template_name))
284
- ERB.new(request_body).result(binding)
285
- else
286
- test_values[:payload]
287
- end
286
+ data = if test_values[:body]
287
+ test_values[:payload] = JSON.generate(hash_used_in_request(test_values[:body])).to_s
288
+ elsif @request_option == :template
289
+ Soaspec::TemplateReader.new.render_body(template_name, binding)
290
+ else
291
+ test_values[:payload]
292
+ end
293
+ # Soaspec::SpecLogger.info "Request Empty for '#{@request_option}'" if data.strip.empty?
294
+ data
288
295
  end
289
296
 
290
297
  # @return [Hash] Hash used in REST request based on data conversion
@@ -307,9 +314,13 @@ module Soaspec
307
314
  # @param [Hash] params Exchange parameters
308
315
  # @return [Exchange] Instance of Exchange class. Assertions are made by default on the response body
309
316
  define_method(rest_method) do |params = {}|
310
- # params ||= {}
311
317
  params[:name] ||= rest_method
312
- new(params[:name])
318
+ exchange_params = { name: params[:name] }
319
+ if params[:template_name]
320
+ exchange_params[:template_name] = params[:template_name]
321
+ params.delete :template_name
322
+ end
323
+ new(exchange_params)
313
324
  Exchange.new(params[:name], method: rest_method.to_sym, **params)
314
325
  end
315
326
  end
@@ -99,16 +99,15 @@ module Soaspec
99
99
  # @param [Hash] request_parameters Parameters used to overwrite defaults in request
100
100
  def make_request(request_parameters)
101
101
  test_values = request_body_params request_parameters
102
+ # Call the SOAP operation with the request XML provided
102
103
  begin
103
104
  if @request_option == :template
104
- request_body = File.read(File.join(Soaspec.template_folder, template_name))
105
- render_body = ERB.new(request_body).result(binding)
106
- client.call(operation, xml: render_body) # Call the SOAP operation with the request XML provided
105
+ client.call(operation, xml: Soaspec::TemplateReader.new.render_body(template_name, binding))
107
106
  elsif @request_option == :hash
108
107
  client.call(operation, message: @default_hash.merge(test_values), attributes: request_root_attributes)
109
108
  end
110
- rescue Savon::HTTPError => e
111
- e
109
+ rescue Savon::HTTPError => soap_error
110
+ soap_error
112
111
  end
113
112
  end
114
113
 
@@ -0,0 +1,27 @@
1
+ require 'erb'
2
+
3
+ module Soaspec
4
+ # Handles reading templates for tests
5
+ class TemplateReader
6
+ # Name of file where template is stored
7
+ attr_accessor :template_name
8
+
9
+ # @return [String] Path to where template file is stored
10
+ def file_location
11
+ File.join(*Soaspec.template_folder, template_name)
12
+ end
13
+
14
+ # @param [String] template_name File where template is stored
15
+ # @return [String] Body of template after determining test_values
16
+ def render_body(template_name, binding)
17
+ self.template_name = template_name
18
+ unless File.exist? file_location
19
+ raise "Cannot see file at #{file_location}. "\
20
+ "Global folder is '#{Soaspec.template_folder}' and filename is '#{template_name}'"
21
+ end
22
+ request_body = File.read file_location
23
+ raise "Template at #{file_location} not parsed correctly" if request_body.strip.empty?
24
+ ERB.new(request_body).result(binding)
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module Soaspec
2
- VERSION = '0.1.9'.freeze
2
+ VERSION = '0.1.10'.freeze
3
3
  end
@@ -0,0 +1,22 @@
1
+ {
2
+ "glossary": {
3
+ "title": "example glossary",
4
+ "GlossDiv": {
5
+ "title": "<%= test_values[:gloss_title] || 'Gloss' %>",
6
+ "GlossList": {
7
+ "GlossEntry": {
8
+ "ID": "SGML",
9
+ "SortAs": "SGML",
10
+ "GlossTerm": "Standard Generalized Markup Language",
11
+ "Acronym": "SGML",
12
+ "Abbrev": "ISO 8879:1986",
13
+ "GlossDef": {
14
+ "para": "A meta-markup language, used to create markup languages such as DocBook.",
15
+ "GlossSeeAlso": ["GML", "XML"]
16
+ },
17
+ "GlossSee": "markup"
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,7 @@
1
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://thomas-bayer.com/blz/" xmlns:env="http://www.w3.org/2003/05/soap-envelope">
2
+ <env:Body>
3
+ <tns:getBank>
4
+ <tns:blz><%= test_values[:blz] || '70070010' %></tns:blz>
5
+ </tns:getBank>
6
+ </env:Body>
7
+ </env:Envelope>
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.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - SamuelGarrattIQA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-08 00:00:00.000000000 Z
11
+ date: 2018-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -356,6 +356,7 @@ files:
356
356
  - lib/soaspec/o_auth2.rb
357
357
  - lib/soaspec/soaspec_shared_examples.rb
358
358
  - lib/soaspec/spec_logger.rb
359
+ - lib/soaspec/template_reader.rb
359
360
  - lib/soaspec/test_server/bank.wsdl
360
361
  - lib/soaspec/test_server/get_bank.rb
361
362
  - lib/soaspec/test_server/id_manager.rb
@@ -369,6 +370,8 @@ files:
369
370
  - lib/soaspec/virtual_server.rb
370
371
  - lib/soaspec/wsdl_generator.rb
371
372
  - soaspec.gemspec
373
+ - templates/rest_template.json
374
+ - templates/soap_template.xml
372
375
  - test.wsdl
373
376
  - test.xml
374
377
  - test_wsdl.rb