soaspec 0.0.24 → 0.0.25

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: 4aaad0d9e089c5a7a5ed3f22e36ad11f74304065
4
- data.tar.gz: 3a6ace44416ff6c6997012171e7d3c6875971ad4
3
+ metadata.gz: 6c1bcd1af7218c1860476c8b8c71d8cb97236640
4
+ data.tar.gz: ac9d54164f634b5887a22eb87779eb8e34c366b0
5
5
  SHA512:
6
- metadata.gz: 587fae6e8d6a0d1ba507df5badb2030991302f5958cc0d8db5bfbb732bdb2283641dd5ad1fc59efd1cfba378f134f4d6a1b34a0ebddb7260a5ae0de8db11127d
7
- data.tar.gz: 0e3410d331d2d2fe0c5dd46eb666910291672a49e380bc76b5b1fc2eba03c124138e1b3465f66170cda7ea43ed38d2258d6e5b703a92f6cfc2ba397d4315b795
6
+ metadata.gz: 16d7b2d861828838632b0ae50645b7ec87a55a63bef9513d626cfa4434e1db3c2b04b35edb58e217c40e7673acdbfa89979da4c6d9e88586b9c46e76ef07a8b3
7
+ data.tar.gz: 3bcd6ae8198b0dc230dd4fe0a12ed219248a276a5e9a7f04b04a2317512cf838e2419ddbb11a749d72f4011655071ed7b5b06b68d7cfd495e71dbfa501041bfe
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ Version 0.0.25 / 2018-2-25
2
+ * Enhancements
3
+ * Updated rest_handler to convert JSON and XML into Hash and use it in 'contain_value'. This still needs work.
4
+ * Showed example of workflow using 'pet' url
5
+
1
6
  Version 0.0.24 / 2018-2-25
2
7
  * Enhancements
3
8
  * Added to soaspec-generate more types when creating YAML with data (int, boolean, double and custom enumeration).
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- soaspec (0.0.24)
4
+ soaspec (0.0.25)
5
5
  rest-client (>= 2.0)
6
6
  rspec (~> 3.0)
7
7
  rspec-its (>= 1.2.0)
data/Rakefile CHANGED
@@ -2,8 +2,10 @@ require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
  require 'rake/clean'
4
4
 
5
+ ENV['folder'] ||= ''
6
+
5
7
  RSpec::Core::RakeTask.new(:run_spec) do |t|
6
- t.pattern = "spec/*/*/*_spec.rb"
8
+ t.pattern = "spec/*/#{ENV['folder']}*/*_spec.rb"
7
9
  end
8
10
 
9
11
  desc 'Prepare log files'
@@ -1,3 +1,16 @@
1
1
  japan:
2
2
  city_name: 'Tokyo'
3
- country_name: 'Japan'
3
+ country_name: 'Japan'
4
+
5
+ pet:
6
+ id: '0'
7
+ category:
8
+ id: '1'
9
+ name: 'string'
10
+ name: 'test_rest'
11
+ photoUrls:
12
+ - 'string'
13
+ tags:
14
+ - id: '1'
15
+ name: 'string'
16
+ status: sold
data/lib/soaspec.rb CHANGED
@@ -22,10 +22,6 @@ require 'soaspec/rest_handler'
22
22
  # Gem for handling SOAP and REST api tests
23
23
  module Soaspec
24
24
 
25
- def self.hi
26
- puts 'Hello world!'
27
- end
28
-
29
25
  # Represents Environment parameters used in Soaspec tests
30
26
  module Environment
31
27
 
@@ -61,4 +57,34 @@ module Soaspec
61
57
  end
62
58
 
63
59
  end
60
+
61
+ # Contains commonly used REST methods
62
+ module RestMethods
63
+ # Make REST Post Exchange
64
+ # @param [String] name Name of test displayed
65
+ # @param [Hash] params Exchange parameters
66
+ # @return [Exchange] Instance of Exchange class. Assertions are made by default on the response body
67
+ def post(name, params = {})
68
+ Exchange.new(name, method: :post, **params)
69
+ end
70
+
71
+ # Make REST Get Exchange
72
+ # @param [String] name Name of test displayed
73
+ # @param [Hash] params Exchange parameters
74
+ # @return [Exchange] Instance of Exchange class. Assertions are made by default on the response body
75
+ def get(name, params = {})
76
+ Exchange.new(name, method: :get, **params)
77
+ end
78
+
79
+ # Make REST Delete Exchange
80
+ # @param [String] name Name of test displayed
81
+ # @param [Hash] params Exchange parameters
82
+ # @return [Exchange] Instance of Exchange class. Assertions are made by default on the response body
83
+ def delete(name, params = {})
84
+ Exchange.new(name, method: :delete, **params)
85
+ end
86
+ end
87
+
64
88
  end
89
+
90
+ RestClient.log = Soaspec::SpecLogger.create
@@ -132,5 +132,10 @@ module Soaspec
132
132
  xpath_value_for(exchange: exchange, xpath: path)
133
133
  end
134
134
 
135
+ # Whether any of the keys of the Body Hash include value
136
+ def include_value?(response, expected_value)
137
+ response.body.include_value?(expected_value)
138
+ end
139
+
135
140
  end
136
141
  end
@@ -7,7 +7,7 @@ require_relative 'xpath_not_found'
7
7
  # Whether response has any element with the provided value
8
8
  RSpec::Matchers.define :contain_value do |expected|
9
9
  match do |actual|
10
- expect(actual.response.body.include_value?(expected)).to be true
10
+ expect(actual.api_class.include_value?(actual.response, expected)).to be true
11
11
  end
12
12
 
13
13
  failure_message do |actual|
@@ -2,6 +2,8 @@
2
2
  require_relative 'tester'
3
3
  require_relative 'hash_methods'
4
4
  require_relative 'xpath_not_found'
5
+ require 'json'
6
+ require 'nori'
5
7
 
6
8
  module Soaspec
7
9
  # Wraps around Savon client defining default values dependent on the soap request
@@ -18,7 +20,7 @@ module Soaspec
18
20
  }
19
21
  end
20
22
 
21
- # Default Savon options. See http://savonrb.com/version2/globals.html for details
23
+ # Default Savon options. See https://github.com/rest-client/rest-client for details
22
24
  # @return [Hash] Default Savon options for all BasicSoapHandler
23
25
  def default_options
24
26
  {
@@ -41,12 +43,12 @@ module Soaspec
41
43
  end
42
44
 
43
45
  # Setup object to handle communicating with a particular SOAP WSDL
44
- # @param [Hash] specific_options Options defining SOAP request. WSDL, authentication, see http://savonrb.com/version2/globals.html for list of options
46
+ # @param [Hash] specific_options Options defining SOAP request. WSDL, authentication
45
47
  def initialize(name, specific_options = {})
46
48
  options = default_options.merge logging_options
47
49
  options.merge! rest_resource_options
48
50
  options.merge!(specific_options)
49
- @resource = RestClient::Resource.new(base_url, options: options) # @resource[url_extension].get
51
+ @resource = RestClient::Resource.new(base_url, options) # @resource[url_extension].get
50
52
  super
51
53
  end
52
54
 
@@ -65,14 +67,57 @@ module Soaspec
65
67
  def make_request(override_parameters)
66
68
  test_values = override_parameters
67
69
  test_values[:params] ||= {}
68
-
69
- @resource[test_values[:suburl]].send(test_values[:method].to_s, test_values[:params])
70
+ test_values[:suburl] = test_values[:suburl].to_s if test_values[:suburl]
71
+
72
+ response = case test_values[:method]
73
+ when :post
74
+ if test_values[:suburl]
75
+ @resource[test_values[:suburl]].send(test_values[:method].to_s, test_values[:payload], test_values[:params])
76
+ else
77
+ @resource.send(test_values[:method].to_s, test_values[:payload], test_values[:params])
78
+ end
79
+ else
80
+ if test_values[:suburl]
81
+ @resource[test_values[:suburl]].send(test_values[:method].to_s, test_values[:params])
82
+ else
83
+ @resource.send(test_values[:method].to_s, test_values[:params])
84
+ end
85
+ end
86
+ Soaspec::SpecLogger.add_to(response)
87
+ response
70
88
  end
71
89
 
72
90
  def include_in_body?(response, expected)
73
91
  response.body.include? expected
74
92
  end
75
93
 
94
+ # Convert XML or JSON response into a Hash
95
+ def extract_hash(response)
96
+ raise "Empty Body. Can't assert on it" if response.body.empty?
97
+ type = case response.body[0]
98
+ when '<'
99
+ :xml
100
+ when '{'
101
+ :json
102
+ else
103
+ :unknown
104
+ end
105
+
106
+ case type
107
+ when :json
108
+ JSON.parse(response.body).transform_keys_to_symbols
109
+ when :xml
110
+ parser = Nori.new(:convert_tags_to => lambda { |tag| tag.snakecase.to_sym })
111
+ parser.parse(response.body)
112
+ else
113
+ raise "Neither XML nor JSON detected. It is #{type}. Don't know how to parse It is #{response.body}"
114
+ end
115
+ end
116
+
117
+ def include_value?(response, expected)
118
+ extract_hash(response).include_value? expected
119
+ end
120
+
76
121
  def status_code_for(response)
77
122
  response.code
78
123
  end
@@ -1,3 +1,3 @@
1
1
  module Soaspec
2
- VERSION = '0.0.24'
2
+ VERSION = '0.0.25'
3
3
  end
data/test_rest.rb CHANGED
@@ -1,11 +1,13 @@
1
1
 
2
2
  require 'rest-client'
3
+ require 'json'
4
+ require 'data_magic'
3
5
 
4
6
  options = {
5
7
  headers: {
6
8
  # accept: "application/xml",
7
- accept: "application/json"
8
- # content_type: "application/json",
9
+ accept: "application/json",
10
+ content_type: "application/json"
9
11
  # log: Logger.new('logs/traffic.log')
10
12
  }
11
13
  }
@@ -16,43 +18,59 @@ data_string = <<-EOF
16
18
  {
17
19
  "id": 1,
18
20
  "category": {
19
- "id": 0,
21
+ "id": 1,
20
22
  "name": "string"
21
23
  },
22
- "name": "doggie",
24
+ "name": "test_rest",
23
25
  "photoUrls": [
24
26
  "string"
25
27
  ],
26
28
  "tags": [
27
29
  {
28
- "id": 0,
30
+ "id": 1,
29
31
  "name": "string"
30
32
  }
31
33
  ],
32
- "status": "available"
34
+ "status": "sold"
33
35
  }
34
36
  EOF
35
37
 
36
38
 
37
39
  data = {
38
- id: '1',
39
- category: {
40
- id: '1',
41
- name: "test"
40
+ 'id' => '1',
41
+ 'category' => {
42
+ 'id' => '1',
43
+ 'name' => "string"
42
44
  },
43
- name: "cat",
44
- photoUrls: [
45
+ 'name' => "test_rest",
46
+ 'photoUrls' => [
45
47
  "string"
46
48
  ],
47
- tags: [
49
+ 'tags' => [
48
50
  {
49
- id: '2',
50
- name: "cute"
51
+ 'id' => '1',
52
+ 'name' => "string"
51
53
  }
52
54
  ],
53
- status: "closed"
55
+ 'status' => "sold"
54
56
  }
55
57
 
58
+ # puts data.to_s
59
+ #
60
+
61
+ include DataMagic
62
+
63
+ id = '1'
64
+ default = data_for 'default/pet'
65
+ merged_result = default.merge({ 'id' => id })
66
+
67
+ #converted_data = JSON.generate(data).to_s
68
+ converted_data = JSON.generate(merged_result).to_s
69
+
70
+ puts converted_data
71
+ # puts 'data'
72
+ # puts data_string
73
+
56
74
  resource = RestClient::Resource.new('http://petstore.swagger.io/v2', options)
57
75
  # begin
58
76
  # response = resource['pet'].post(data)
@@ -64,13 +82,17 @@ begin
64
82
  #response = resource['store/order/1'].get
65
83
  #response = resource['store/inventory'].get
66
84
  #
67
- response = resource['pet/findByStatus?status=sold'].get(accept: 'application/xml')
68
- #response = resource['pet'].post(data_string, additional_headers: { accept: "application/json"})
85
+ #response = resource['pet/findByStatus?status=sold'].get(accept: 'application/xml')
86
+
87
+
88
+ #response = resource['pet'].post(data_string)
89
+ #response = resource['pet'].post(converted_data)
90
+ response = resource['pet/' + id].get
91
+ #response = resource['pet/' + id].delete
69
92
  rescue RestClient::ExceptionWithResponse => e
70
93
  puts e.response
71
94
  end
72
95
 
73
- #puts response.to_s
74
96
  puts response.body
75
97
  puts response.code
76
98
  puts response.request
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.24
4
+ version: 0.0.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - SamuelGarrattIQA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-25 00:00:00.000000000 Z
11
+ date: 2018-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler