soaspec 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
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