soaspec 0.2.19 → 0.2.20

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
- SHA1:
3
- metadata.gz: 5da773f49629a9a8f3ed81294f5b313aef067daa
4
- data.tar.gz: fd38e2b4f35b1cd9a8335f7a509f8335f807b2c8
2
+ SHA256:
3
+ metadata.gz: 0f031c3b5588049808871e6fcda16d9381811b18df3cf383f9a777cb82a6fa23
4
+ data.tar.gz: 5ea7c6cff5d06ed935e43d53f32289c13430a9da8047a946dc84c30ec18994b9
5
5
  SHA512:
6
- metadata.gz: 6d71b1fc1203a76e112e870482e135dee823cdb55bf17bf38d03c9ec9e834d9cfe65a8de17dd2d86fabe7eb069c122d241918bc5e71324123309db8f19562547
7
- data.tar.gz: 1893f9a21d68191ae5e087b9b22eaedd65bdc2a2a0739803211545e8a984f4f22f08e73792aa920e63663663dfbabcec19e87246d39964aa00ee7ccca159f548
6
+ metadata.gz: 0cd0f0bdc1b1938cdf67e6e3f5c04ec69a9a58d734fd2e815cb8ab9b1cad051618f6a33acc021161ba26715a167ae8b8358bea70889bf5d328c168aed1119251
7
+ data.tar.gz: 0d3a7087204edf457af446cecc5347f4a7045e3c56d57c1856ab2876ec96570397a2f7fa9b8ef2445c2417c38d409134d0644653cce54b7f699ca1eef2728871
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ Version 0.2.20
2
+ * Enhancement
3
+ * 'soaspec pry' command to open pry, loading test API classes
4
+
1
5
  Version 0.2.19
2
6
  * Enhancement
3
7
  * Create 'soaspec generate' (without wsdl) as a way to create an ExchangeHandler from a Web Page
@@ -4,6 +4,8 @@ require 'thor'
4
4
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
5
5
  require 'savon'
6
6
  require 'soaspec'
7
+ require 'soaspec/virtual_server'
8
+ require 'soaspec/wsdl_generator'
7
9
 
8
10
  module Soaspec
9
11
  # Common executable for Soaspec
@@ -86,7 +88,6 @@ module Soaspec
86
88
  require 'launchy'
87
89
  require 'soaspec/generate_server'
88
90
  Soaspec::GenerateServer.run! do
89
- sleep 2
90
91
  Launchy.open 'http://localhost:8999' if options[:open_browser] == 'true'
91
92
  end
92
93
  end
@@ -101,6 +102,21 @@ module Soaspec
101
102
  require 'soaspec/virtual_server'
102
103
  Soaspec::VirtualServer.run!(Port: port)
103
104
  end
105
+
106
+ long_desc <<-LONGDESC
107
+ Run pry with Soaspec and other relevant libraries loaded. Pass either the relative path to files desired with a
108
+ '.rb' extension or the path to the folder to be loaded with 'require_all'
109
+ LONGDESC
110
+ desc 'pry [required_files]', 'Run pry with Soaspec and other relevant libraries loaded'
111
+ def pry(required_files = nil)
112
+ require 'soaspec'
113
+
114
+ require 'require_all'
115
+ require_all required_files if required_files
116
+
117
+ require 'pry'
118
+ Pry.start
119
+ end
104
120
  end
105
121
  end
106
122
 
@@ -25,13 +25,6 @@ require 'soaspec/exchange_handlers/rest_handler'
25
25
  require 'soaspec/exchange_handlers/handler_accessors'
26
26
  require 'soaspec/interpreter'
27
27
  require 'soaspec/not_found_errors'
28
- require 'soaspec/test_server/get_bank'
29
- require 'soaspec/test_server/test_attribute'
30
- require 'soaspec/test_server/puppy_service'
31
- require 'soaspec/test_server/invoices'
32
- require 'soaspec/test_server/test_namespace'
33
- require 'soaspec/test_server/id_manager'
34
- require 'soaspec/wsdl_generator'
35
28
  require 'soaspec/wait'
36
29
 
37
30
  # Gem for handling SOAP and REST api tests
@@ -83,7 +83,8 @@ class Exchange
83
83
  test_name
84
84
  end
85
85
 
86
- # Returns response object from Api. Will make the request if not made and then cache it for later on
86
+ # @return [RestClient::Response,Savon::Response] Returns response object from Api.
87
+ # Will make the request if not made and then cache it for later on
87
88
  # @example For SOAP it will be a Savon response
88
89
  # response.body (body of response as Hash)
89
90
  # response.header (head of response as Hash)
@@ -95,5 +96,10 @@ class Exchange
95
96
  @response
96
97
  end
97
98
 
98
- alias call response
99
+ # @return [ResponseObject] Currently returning response object. This will change (in 0.3) to be itself to
100
+ # allow easy method chaining
101
+ def call
102
+ warn 'This method will be changed to return "Exchange" object in 0.3. Use "response" method if you want the response object'
103
+ response
104
+ end
99
105
  end
@@ -45,18 +45,25 @@ module Soaspec
45
45
  # @param [String] filename Name of the file to create
46
46
  # @param [String] content Content to place inside file
47
47
  # @param [Boolean] ignore_if_present Don't complain if file is present
48
+ # @return [String] String describing if file created or not
48
49
  def create_file(filename: nil, content: nil, ignore_if_present: false, erb: true)
49
50
  raise 'Need to pass filename' unless filename
50
51
 
51
52
  content ||= retrieve_contents(filename, erb)
52
53
  create_folder File.split(filename).first
53
- if File.exist? filename
54
- old_content = File.read(filename)
55
- warn "!! #{filename} already exists and differs from template" if old_content != content && !ignore_if_present
56
- else
57
- File.open(filename, 'w') { |f| f.puts content }
58
- puts 'Created: ' + filename
59
- end
54
+ msg = if File.exist? filename
55
+ old_content = File.read(filename)
56
+ if old_content != content && !ignore_if_present
57
+ "!! #{filename} already exists and differs from template"
58
+ else
59
+ "#{filename} already exists"
60
+ end
61
+ else
62
+ File.open(filename, 'w') { |f| f.puts content }
63
+ "Created: #{filename}"
64
+ end
65
+ puts msg
66
+ msg
60
67
  end
61
68
 
62
69
  # Create folder if there's not a file already there.
@@ -6,6 +6,7 @@ module Soaspec
6
6
  include Soaspec::ExeHelpers
7
7
 
8
8
  class << self
9
+ # @return [Hash] Parameters used when creating handler
9
10
  attr_accessor :create_params
10
11
  end
11
12
 
@@ -22,17 +23,15 @@ module Soaspec
22
23
  end
23
24
 
24
25
  post '/generate' do
25
- File.write 'test', params.to_s
26
- type = :rest
26
+ type = :rest # SOAP will be added to later
27
27
  @name = params['className']
28
28
  @base_url = params['baseUrl']
29
29
  filename = File.join('lib', "#{params['className'].snakecase}.rb")
30
- create_file filename: filename,
31
- content: retrieve_contents(File.join('lib', "new_#{type}_service.rb"))
30
+ feedback = create_file filename: filename,
31
+ content: retrieve_contents(File.join('lib', "new_#{type}_service.rb"))
32
32
  GenerateServer.create_params = params
33
- GenerateServer.create_params['feedback'] = "Created file at '#{filename}'"
33
+ GenerateServer.create_params['feedback'] = feedback
34
34
  redirect '/'
35
- # params.to_s
36
35
  end
37
36
  end
38
- end
37
+ end
@@ -1,24 +1,33 @@
1
1
  module Soaspec
2
2
  module TestServer
3
3
  # Handles returning ids dependent on a number of factors
4
- # Made to demonstrate creating testing a list of ids
4
+ # Made to demonstrate creating testing a list of ids where a few return false
5
+ # when not developed and checking each value in the list can find the false value
5
6
  class IdManager
7
+ # @return [Boolean] Whether to simulate a fully developed state where everything is done
6
8
  @developed = false
7
9
  class << self
8
10
  attr_accessor :developed
9
11
 
12
+ # Once developed is set, everything will return true. A 'false' value represents something
13
+ # not developed
14
+ # @param [String] num Number representing tester or test number
15
+ # @param [String] id Id used in test
10
16
  # @return Result depending on num, id and whether '@developed' is set
11
17
  def result_for(num, id)
12
18
  result = undeveloped_id(num, id) unless @developed
13
19
  result || 'true'
14
20
  end
15
21
 
22
+ # Idea is that this will return false for a particular id for different test numbers
23
+ # @param [String] num Number representing tester or test number
24
+ # @param [String] id Id used in test
16
25
  # @return [String] true of false depending on num and id
17
26
  def undeveloped_id(num, id)
18
27
  case num
19
28
  when '1', '4', '10' then 'false' if id == '40'
20
29
  when '3', '11', '9' then 'false' if id == '74'
21
- when '8', '6', '8' then 'false' if id == '80'
30
+ when '2', '6', '8' then 'false' if id == '80'
22
31
  when '7', '5', '12' then 'false' if id == '64'
23
32
  else
24
33
  'true'
@@ -1,3 +1,3 @@
1
1
  module Soaspec
2
- VERSION = '0.2.19'.freeze
2
+ VERSION = '0.2.20'.freeze
3
3
  end
@@ -6,6 +6,12 @@ require 'nokogiri'
6
6
  require 'erb'
7
7
  require 'json'
8
8
  require 'faker'
9
+ require 'soaspec/test_server/get_bank'
10
+ require 'soaspec/test_server/test_attribute'
11
+ require 'soaspec/test_server/puppy_service'
12
+ require 'soaspec/test_server/invoices'
13
+ require 'soaspec/test_server/test_namespace'
14
+ require 'soaspec/test_server/id_manager'
9
15
 
10
16
  module Soaspec
11
17
  # Used to run virtual web service on localhost. This makes tests more reliable and faster
@@ -1,16 +1,18 @@
1
1
  module Soaspec
2
2
  # Produce test content from a WSDL
3
3
  module WsdlGenerator
4
+ include ExeHelpers
5
+
4
6
  # Generate from WSDL
5
7
  def generate_from_wsdl(options)
6
- enter_auth_details if options[:auth] == 'basic'
8
+ auth_name, auth_password = enter_auth_details if options[:auth] == 'basic'
7
9
  @virtual = false
8
10
  savon_options = { wsdl: options[:wsdl] }
9
- savon_options[:basic_auth] = [@auth_name, @auth_password] if options[:auth] == 'basic'
10
-
11
- @wsdl_doc = Savon.client(**savon_options).wsdl
12
- @wsdl_schemas = @wsdl_doc.parser.schemas
11
+ savon_options[:basic_auth] = [auth_name, auth_password] if options[:auth] == 'basic'
13
12
 
13
+ wsdl_doc = Savon.client(**savon_options).wsdl
14
+ @wsdl_schemas = wsdl_doc.parser.schemas
15
+ # Create basic project files
14
16
  create_files %w[Rakefile Gemfile README.md spec/spec_helper.rb], ignore_if_present: true
15
17
  create_file(filename: '.rspec')
16
18
  create_file(filename: '.travis.yml') if options[:ci] == 'travis'
@@ -18,7 +20,7 @@ module Soaspec
18
20
  create_file filename: "lib/#{options[:name].snakecase}.rb", content: class_content
19
21
 
20
22
  # Files according to WSDL
21
- @wsdl_doc.operations.each do |operation, op_details|
23
+ wsdl_doc.operations.each do |operation, op_details|
22
24
  puts "Creating files for operation: #{operation}"
23
25
  @content = "default:\n"
24
26
  @use_camel_case = false
@@ -176,20 +178,22 @@ module Soaspec
176
178
  end
177
179
 
178
180
  # Prompt user to enter basic auth details
181
+ # @return [Array] Array with Basic auth username and password entered
179
182
  def enter_auth_details
180
183
  prompt = <<-AUTH_PROMPT
181
184
  User Name:
182
185
  AUTH_PROMPT
183
186
  print prompt.chop
184
- @auth_name = $stdin.gets.strip
187
+ auth_name = $stdin.gets.strip
185
188
  puts
186
189
 
187
190
  prompt = <<-PASSWORD
188
191
  User Password:
189
192
  PASSWORD
190
193
  print prompt.chop
191
- @auth_password = $stdin.gets.strip
194
+ auth_password = $stdin.gets.strip
192
195
  puts
196
+ [auth_name, auth_password]
193
197
  end
194
198
  end
195
199
  end
@@ -29,7 +29,6 @@ the same configuration. Examples designed for RSpec and Cucumber."
29
29
  spec.add_development_dependency 'rack'
30
30
  spec.add_development_dependency 'rack-test'
31
31
  spec.add_development_dependency 'rake', '~> 12.0'
32
- spec.add_development_dependency 'require_all', '1.5.0'
33
32
  spec.add_development_dependency 'rspec', '~> 3.0'
34
33
  spec.add_development_dependency 'simplecov'
35
34
  spec.add_development_dependency 'yard-cucumber'
@@ -40,13 +39,13 @@ the same configuration. Examples designed for RSpec and Cucumber."
40
39
  spec.add_dependency 'jsonpath'
41
40
  spec.add_dependency 'launchy'
42
41
  spec.add_dependency 'nokogiri'
42
+ spec.add_dependency 'pry'
43
+ spec.add_dependency 'require_all', '>= 1.5.0'
43
44
  spec.add_dependency 'rest-client', '>= 2.0' # REST
44
45
  spec.add_dependency 'rspec', '~> 3.0' # This framework is designed to work with RSpec
45
46
  spec.add_dependency 'rspec-its'
46
47
  spec.add_dependency 'savon', '>= 2' # SOAP
47
- # https://github.com/sinatra/sinatra/issues/1514 in 2.0.5 version of Sinatra breaks '?wsdl' a param with no
48
- # Only affects Ruby < 2.4
49
- spec.add_dependency 'sinatra', '2.0.4'
48
+ spec.add_dependency 'sinatra', '>= 2.0.4'
50
49
  spec.add_dependency 'sinatra-basic-auth'
51
50
  spec.add_dependency 'sinatra-docdsl'
52
51
  spec.add_dependency 'thor'
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.2.19
4
+ version: 0.2.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - SamuelGarrattIQA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-10 00:00:00.000000000 Z
11
+ date: 2019-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '12.0'
125
- - !ruby/object:Gem::Dependency
126
- name: require_all
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - '='
130
- - !ruby/object:Gem::Version
131
- version: 1.5.0
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - '='
137
- - !ruby/object:Gem::Version
138
- version: 1.5.0
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: rspec
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -276,6 +262,34 @@ dependencies:
276
262
  - - ">="
277
263
  - !ruby/object:Gem::Version
278
264
  version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: pry
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: require_all
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: 1.5.0
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: 1.5.0
279
293
  - !ruby/object:Gem::Dependency
280
294
  name: rest-client
281
295
  requirement: !ruby/object:Gem::Requirement
@@ -336,14 +350,14 @@ dependencies:
336
350
  name: sinatra
337
351
  requirement: !ruby/object:Gem::Requirement
338
352
  requirements:
339
- - - '='
353
+ - - ">="
340
354
  - !ruby/object:Gem::Version
341
355
  version: 2.0.4
342
356
  type: :runtime
343
357
  prerelease: false
344
358
  version_requirements: !ruby/object:Gem::Requirement
345
359
  requirements:
346
- - - '='
360
+ - - ">="
347
361
  - !ruby/object:Gem::Version
348
362
  version: 2.0.4
349
363
  - !ruby/object:Gem::Dependency
@@ -522,7 +536,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
522
536
  version: '0'
523
537
  requirements: []
524
538
  rubyforge_project:
525
- rubygems_version: 2.6.14
539
+ rubygems_version: 2.7.3
526
540
  signing_key:
527
541
  specification_version: 4
528
542
  summary: Helps to create tests for 'SOAP' or 'REST' apis