soaspec 0.2.18 → 0.2.19
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 +4 -4
- data/ChangeLog +4 -0
- data/Rakefile +4 -0
- data/demo/css/bootstrap-theme.css +587 -0
- data/demo/css/bootstrap.css +6834 -0
- data/demo/index.html +19 -4
- data/demo/json_extract.html +34 -20
- data/demo/xml_extract.html +31 -19
- data/demo/xml_extract.json +3 -3
- data/exe/soaspec +12 -36
- data/lib/soaspec/generate_server.rb +38 -0
- data/lib/soaspec/generator/css/bootstrap.css +6834 -0
- data/lib/soaspec/generator/generate_exchange.html.erb +36 -0
- data/lib/soaspec/generator/lib/new_rest_service.rb.erb +4 -2
- data/lib/soaspec/test_server/get_bank.rb +3 -0
- data/lib/soaspec/version.rb +1 -1
- data/lib/soaspec/wsdl_generator.rb +41 -0
- data/soaspec.gemspec +2 -0
- metadata +35 -2
@@ -0,0 +1,36 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>REST Exchange generator</title>
|
4
|
+
<link rel="stylesheet" href="css/bootstrap.css" type="text/css" charset="utf-8" />
|
5
|
+
</head>
|
6
|
+
<body>
|
7
|
+
<main class="container-fluid">
|
8
|
+
<h1>REST Exchange generator</h1>
|
9
|
+
<h2>Handler creator <small><%= GenerateServer.create_params['feedback'] %></small></h2>
|
10
|
+
<form class="form-horizontal" method="POST" action="/generate">
|
11
|
+
<div class="form-group">
|
12
|
+
<label class="col-sm-2 control-label" for="className">Class Name</label>
|
13
|
+
<div class="col-sm-10">
|
14
|
+
<input id="className" class="form-control" type="text" name="className"
|
15
|
+
placeholder="ApiUnderTest" value="<%= GenerateServer.create_params['className'] %>">
|
16
|
+
<p class="help-block">This is what you will refer to the API in your test code. Use Pascal Case</p>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
<div class="form-group">
|
20
|
+
<label class="col-sm-2 control-label" for="baseUrl">Base URL</label>
|
21
|
+
<div class="col-sm-10">
|
22
|
+
<input id="baseUrl" class="form-control" type="text" name="baseUrl"
|
23
|
+
placeholder="https://url/which/api/starts_with" value="<%= GenerateServer.create_params['baseUrl'] %>">
|
24
|
+
<p class="help-block">Url with which all REST requests using this class will start with.
|
25
|
+
Exchanges creating using this class can append to this with the 'suburl' parameter.</p>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
<div class="form-group">
|
29
|
+
<div class="col-sm-offset-2 col-sm-10">
|
30
|
+
<input type="submit" value="Generate handler" class="btn btn-primary">
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</form>
|
34
|
+
</main>
|
35
|
+
</body>
|
36
|
+
</html>
|
@@ -2,10 +2,12 @@
|
|
2
2
|
class <%= @name %> < Soaspec::RestHandler
|
3
3
|
## Defining request
|
4
4
|
|
5
|
-
# All requests to <%= @name %> will start with this url
|
5
|
+
# All requests to <%= @name %> will start with this url <% if @base_url %>
|
6
|
+
base_url '<%= @base_url %>'
|
7
|
+
<% else %>
|
6
8
|
# TODO: Change this mandatory base_url to the url that all requests to this service start with
|
7
9
|
# base_url "https://my_host/api/<%= ENV['environment'] %>/api_name" # ERB can be used to make this dynamic based on environment
|
8
|
-
|
10
|
+
<% end %>
|
9
11
|
# Headers that will be sent by default using this Handler
|
10
12
|
# If symbol is used, they'll be converted to standard HTTP headers
|
11
13
|
# headers accept: 'application/json', content_type: 'application/json'
|
@@ -5,11 +5,13 @@ module Soaspec
|
|
5
5
|
# Representing a GetBank SOAP service
|
6
6
|
class GetBank
|
7
7
|
class << self
|
8
|
+
# This is retrieved by Savon
|
8
9
|
# @return [String] WSDL of mock web service
|
9
10
|
def test_wsdl
|
10
11
|
ERB.new(File.read(File.join(File.dirname(__FILE__), 'bank.wsdl'))).result(binding)
|
11
12
|
end
|
12
13
|
|
14
|
+
# @return [String] XML of success SOAP Response
|
13
15
|
def success_response_template
|
14
16
|
<<-EOF
|
15
17
|
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
|
@@ -31,6 +33,7 @@ module Soaspec
|
|
31
33
|
EOF
|
32
34
|
end
|
33
35
|
|
36
|
+
# @return [String] XML of failure SOAP Response simulating bank not found
|
34
37
|
def bank_not_found
|
35
38
|
<<-EOF
|
36
39
|
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
|
data/lib/soaspec/version.rb
CHANGED
@@ -1,6 +1,47 @@
|
|
1
1
|
module Soaspec
|
2
2
|
# Produce test content from a WSDL
|
3
3
|
module WsdlGenerator
|
4
|
+
# Generate from WSDL
|
5
|
+
def generate_from_wsdl(options)
|
6
|
+
enter_auth_details if options[:auth] == 'basic'
|
7
|
+
@virtual = false
|
8
|
+
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
|
13
|
+
|
14
|
+
create_files %w[Rakefile Gemfile README.md spec/spec_helper.rb], ignore_if_present: true
|
15
|
+
create_file(filename: '.rspec')
|
16
|
+
create_file(filename: '.travis.yml') if options[:ci] == 'travis'
|
17
|
+
create_folder 'logs'
|
18
|
+
create_file filename: "lib/#{options[:name].snakecase}.rb", content: class_content
|
19
|
+
|
20
|
+
# Files according to WSDL
|
21
|
+
@wsdl_doc.operations.each do |operation, op_details|
|
22
|
+
puts "Creating files for operation: #{operation}"
|
23
|
+
@content = "default:\n"
|
24
|
+
@use_camel_case = false
|
25
|
+
puts 'Message params: ' + op_details.to_s
|
26
|
+
# From namespace identifier, find namespace, and for that find schemaLocation xsd and use that to build request
|
27
|
+
if op_details[:parameters]
|
28
|
+
op_details[:parameters].each do |element, details|
|
29
|
+
@use_camel_case = true unless /[[:upper:]]/.match(element.to_s[0]).nil?
|
30
|
+
@content += " #{element.to_s.snakecase}: #{fill_in_field_from_type(details[:type])} # #{details[:type]} \n"
|
31
|
+
# TODO: If details is a Hash need to loop again
|
32
|
+
end
|
33
|
+
end
|
34
|
+
wsdl_to_yaml_for root_elements_for(op_details)
|
35
|
+
params = []
|
36
|
+
params << 'convert_request_keys_to: :camelcase' if @use_camel_case
|
37
|
+
params_string = params == [] ? '' : ', ' + params.join(', ')
|
38
|
+
@class_params = "'#{camel_case(operation)}'#{params_string}"
|
39
|
+
|
40
|
+
create_file(filename: "config/data/#{operation}.yml", content: @content)
|
41
|
+
create_file(filename: "spec/#{operation}_spec.rb", content: generated_soap_spec_for(operation))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
4
45
|
# Attempt to calculate values of enumeration by looking up type in Schema
|
5
46
|
# @param [String] type Try out filling enumeration for type. Return Custom Type if can't be done
|
6
47
|
def try_enum_for(type)
|
data/soaspec.gemspec
CHANGED
@@ -25,6 +25,7 @@ the same configuration. Examples designed for RSpec and Cucumber."
|
|
25
25
|
spec.add_development_dependency 'cucumber'
|
26
26
|
spec.add_development_dependency 'data_magic'
|
27
27
|
spec.add_development_dependency 'factory_bot'
|
28
|
+
spec.add_development_dependency 'parallel_tests'
|
28
29
|
spec.add_development_dependency 'rack'
|
29
30
|
spec.add_development_dependency 'rack-test'
|
30
31
|
spec.add_development_dependency 'rake', '~> 12.0'
|
@@ -37,6 +38,7 @@ the same configuration. Examples designed for RSpec and Cucumber."
|
|
37
38
|
spec.add_dependency 'faker'
|
38
39
|
spec.add_dependency 'hashie'
|
39
40
|
spec.add_dependency 'jsonpath'
|
41
|
+
spec.add_dependency 'launchy'
|
40
42
|
spec.add_dependency 'nokogiri'
|
41
43
|
spec.add_dependency 'rest-client', '>= 2.0' # REST
|
42
44
|
spec.add_dependency 'rspec', '~> 3.0' # This framework is designed to work with RSpec
|
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.
|
4
|
+
version: 0.2.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SamuelGarrattIQA
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: parallel_tests
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rack
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,6 +248,20 @@ dependencies:
|
|
234
248
|
- - ">="
|
235
249
|
- !ruby/object:Gem::Version
|
236
250
|
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: launchy
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :runtime
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
237
265
|
- !ruby/object:Gem::Dependency
|
238
266
|
name: nokogiri
|
239
267
|
requirement: !ruby/object:Gem::Requirement
|
@@ -396,6 +424,8 @@ files:
|
|
396
424
|
- README.md
|
397
425
|
- Rakefile
|
398
426
|
- Todo.md
|
427
|
+
- demo/css/bootstrap-theme.css
|
428
|
+
- demo/css/bootstrap.css
|
399
429
|
- demo/index.html
|
400
430
|
- demo/js/angular.min.js
|
401
431
|
- demo/json_extract.html
|
@@ -425,12 +455,15 @@ files:
|
|
425
455
|
- lib/soaspec/exchange_handlers/rest_parameters_defaults.rb
|
426
456
|
- lib/soaspec/exchange_handlers/soap_handler.rb
|
427
457
|
- lib/soaspec/exe_helpers.rb
|
458
|
+
- lib/soaspec/generate_server.rb
|
428
459
|
- lib/soaspec/generator/.rspec.erb
|
429
460
|
- lib/soaspec/generator/.travis.yml.erb
|
430
461
|
- lib/soaspec/generator/Gemfile.erb
|
431
462
|
- lib/soaspec/generator/README.md.erb
|
432
463
|
- lib/soaspec/generator/Rakefile.erb
|
433
464
|
- lib/soaspec/generator/config/data/default.yml.erb
|
465
|
+
- lib/soaspec/generator/css/bootstrap.css
|
466
|
+
- lib/soaspec/generator/generate_exchange.html.erb
|
434
467
|
- lib/soaspec/generator/lib/blz_service.rb.erb
|
435
468
|
- lib/soaspec/generator/lib/dynamic_class_content.rb.erb
|
436
469
|
- lib/soaspec/generator/lib/new_rest_service.rb.erb
|