soaspec 0.2.32 → 0.2.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -15
  3. data/.gitlab-ci.yml +62 -62
  4. data/.rspec +3 -3
  5. data/.rubocop.yml +2 -2
  6. data/CODE_OF_CONDUCT.md +74 -74
  7. data/ChangeLog +632 -625
  8. data/Dockerfile +7 -7
  9. data/Gemfile +8 -8
  10. data/LICENSE.txt +21 -21
  11. data/README.md +231 -231
  12. data/Rakefile +52 -52
  13. data/Todo.md +16 -16
  14. data/exe/soaspec +138 -138
  15. data/exe/xml_to_yaml_file +43 -43
  16. data/lib/soaspec.rb +106 -105
  17. data/lib/soaspec/baseline.rb +23 -0
  18. data/lib/soaspec/core_ext/hash.rb +44 -44
  19. data/lib/soaspec/cucumber/generic_steps.rb +94 -94
  20. data/lib/soaspec/demo.rb +6 -6
  21. data/lib/soaspec/errors.rb +24 -22
  22. data/lib/soaspec/exchange/exchange.rb +129 -129
  23. data/lib/soaspec/exchange/exchange_extractor.rb +90 -90
  24. data/lib/soaspec/exchange/exchange_properties.rb +28 -28
  25. data/lib/soaspec/exchange/exchange_repeater.rb +21 -21
  26. data/lib/soaspec/exchange/request_builder.rb +70 -70
  27. data/lib/soaspec/exchange/variable_storer.rb +24 -24
  28. data/lib/soaspec/exchange_handlers/exchange_handler.rb +98 -98
  29. data/lib/soaspec/exchange_handlers/exchange_handler_defaults.rb +61 -61
  30. data/lib/soaspec/exchange_handlers/handler_accessors.rb +132 -132
  31. data/lib/soaspec/exchange_handlers/request/rest_request.rb +59 -51
  32. data/lib/soaspec/exchange_handlers/request/soap_request.rb +41 -41
  33. data/lib/soaspec/exchange_handlers/response_extractor.rb +84 -84
  34. data/lib/soaspec/exchange_handlers/rest_exchanger_factory.rb +111 -111
  35. data/lib/soaspec/exchange_handlers/rest_handler.rb +307 -298
  36. data/lib/soaspec/exchange_handlers/rest_methods.rb +65 -65
  37. data/lib/soaspec/exchange_handlers/rest_parameters.rb +112 -112
  38. data/lib/soaspec/exchange_handlers/rest_parameters_defaults.rb +42 -42
  39. data/lib/soaspec/exchange_handlers/soap_handler.rb +241 -241
  40. data/lib/soaspec/exe_helpers.rb +94 -94
  41. data/lib/soaspec/generate_server.rb +48 -48
  42. data/lib/soaspec/generator/.rspec.erb +5 -5
  43. data/lib/soaspec/generator/.travis.yml.erb +5 -5
  44. data/lib/soaspec/generator/Gemfile.erb +8 -8
  45. data/lib/soaspec/generator/README.md.erb +29 -29
  46. data/lib/soaspec/generator/Rakefile.erb +19 -19
  47. data/lib/soaspec/generator/config/data/default.yml.erb +2 -2
  48. data/lib/soaspec/generator/css/bootstrap.css +6833 -6833
  49. data/lib/soaspec/generator/features/support/env.rb.erb +3 -3
  50. data/lib/soaspec/generator/generate_exchange.html.erb +47 -47
  51. data/lib/soaspec/generator/lib/blz_service.rb.erb +26 -26
  52. data/lib/soaspec/generator/lib/dynamic_class_content.rb.erb +12 -12
  53. data/lib/soaspec/generator/lib/new_rest_service.rb.erb +56 -56
  54. data/lib/soaspec/generator/lib/new_soap_service.rb.erb +29 -29
  55. data/lib/soaspec/generator/lib/package_service.rb.erb +2 -2
  56. data/lib/soaspec/generator/lib/shared_example.rb.erb +8 -8
  57. data/lib/soaspec/generator/spec/dynamic_soap_spec.rb.erb +12 -12
  58. data/lib/soaspec/generator/spec/rest_spec.rb.erb +9 -9
  59. data/lib/soaspec/generator/spec/soap_spec.rb.erb +51 -51
  60. data/lib/soaspec/generator/spec/spec_helper.rb.erb +23 -23
  61. data/lib/soaspec/generator/template/soap_template.xml +6 -6
  62. data/lib/soaspec/indifferent_hash.rb +9 -9
  63. data/lib/soaspec/interpreter.rb +70 -70
  64. data/lib/soaspec/matchers.rb +140 -118
  65. data/lib/soaspec/o_auth2.rb +142 -142
  66. data/lib/soaspec/soaspec_shared_examples.rb +26 -26
  67. data/lib/soaspec/spec_logger.rb +143 -143
  68. data/lib/soaspec/template_reader.rb +30 -30
  69. data/lib/soaspec/test_server/bank.wsdl +90 -90
  70. data/lib/soaspec/test_server/get_bank.rb +166 -166
  71. data/lib/soaspec/test_server/id_manager.rb +41 -41
  72. data/lib/soaspec/test_server/invoices.rb +29 -29
  73. data/lib/soaspec/test_server/namespace.xml +14 -14
  74. data/lib/soaspec/test_server/note.xml +5 -5
  75. data/lib/soaspec/test_server/puppy_service.rb +21 -21
  76. data/lib/soaspec/test_server/test_attribute.rb +14 -14
  77. data/lib/soaspec/test_server/test_namespace.rb +14 -14
  78. data/lib/soaspec/version.rb +6 -6
  79. data/lib/soaspec/virtual_server.rb +190 -176
  80. data/lib/soaspec/wait.rb +43 -43
  81. data/lib/soaspec/wsdl_generator.rb +215 -215
  82. data/soaspec.gemspec +58 -58
  83. data/test.wsdl +116 -116
  84. data/test.xml +10 -10
  85. data/test_wsdl.rb +43 -43
  86. metadata +4 -3
@@ -1,41 +1,41 @@
1
- # frozen_string_literal: true
2
-
3
- module Soaspec
4
- module TestServer
5
- # Handles returning ids dependent on a number of factors
6
- # Made to demonstrate creating testing a list of ids where a few return false
7
- # when not developed and checking each value in the list can find the false value
8
- class IdManager
9
- # @return [Boolean] Whether to simulate a fully developed state where everything is done
10
- @developed = false
11
- class << self
12
- attr_accessor :developed
13
-
14
- # Once developed is set, everything will return true. A 'false' value represents something
15
- # not developed
16
- # @param [String] num Number representing tester or test number
17
- # @param [String] id Id used in test
18
- # @return Result depending on num, id and whether '@developed' is set
19
- def result_for(num, id)
20
- result = undeveloped_id(num, id) unless @developed
21
- result || 'true'
22
- end
23
-
24
- # Idea is that this will return false for a particular id for different test numbers
25
- # @param [String] num Number representing tester or test number
26
- # @param [String] id Id used in test
27
- # @return [String] true of false depending on num and id
28
- def undeveloped_id(num, id)
29
- case num
30
- when '1', '4', '10' then 'false' if id == '40'
31
- when '3', '11', '9' then 'false' if id == '74'
32
- when '2', '6', '8' then 'false' if id == '80'
33
- when '7', '5', '12' then 'false' if id == '64'
34
- else
35
- 'true'
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Soaspec
4
+ module TestServer
5
+ # Handles returning ids dependent on a number of factors
6
+ # Made to demonstrate creating testing a list of ids where a few return false
7
+ # when not developed and checking each value in the list can find the false value
8
+ class IdManager
9
+ # @return [Boolean] Whether to simulate a fully developed state where everything is done
10
+ @developed = false
11
+ class << self
12
+ attr_accessor :developed
13
+
14
+ # Once developed is set, everything will return true. A 'false' value represents something
15
+ # not developed
16
+ # @param [String] num Number representing tester or test number
17
+ # @param [String] id Id used in test
18
+ # @return Result depending on num, id and whether '@developed' is set
19
+ def result_for(num, id)
20
+ result = undeveloped_id(num, id) unless @developed
21
+ result || 'true'
22
+ end
23
+
24
+ # Idea is that this will return false for a particular id for different test numbers
25
+ # @param [String] num Number representing tester or test number
26
+ # @param [String] id Id used in test
27
+ # @return [String] true of false depending on num and id
28
+ def undeveloped_id(num, id)
29
+ case num
30
+ when '1', '4', '10' then 'false' if id == '40'
31
+ when '3', '11', '9' then 'false' if id == '74'
32
+ when '2', '6', '8' then 'false' if id == '80'
33
+ when '7', '5', '12' then 'false' if id == '64'
34
+ else
35
+ 'true'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
-
3
- module Soaspec
4
- module TestServer
5
- # Used to simulate requests requiring oauth authentication
6
- class Invoices
7
- @user_used = nil
8
-
9
- class << self
10
- attr_accessor :user_used
11
-
12
- def oauth_headers
13
- {
14
- 'Content-Type' => 'application/json;charset=UTF-8'
15
- }
16
- end
17
-
18
- def oauth_body
19
- {
20
- access_token: 'TEST_TOKENiIsImtpZCI6IlRFU1QifQ.AAAABBBBRfaWQiOiJhYWQ5MjY3SIMULATE_LARGE_TOKEN3MmM5OGQ5NGE2YTU5YSIsImV4cCI6MTUyNzU3MTY4Mywic2NvcGUiOltdfQ.3OmCdW7fLZMUST_BE_ABLE_TO_HANDLEgAGaJB0lFYyhaw',
21
- token_type: 'Bearer',
22
- expires_in: '86399',
23
- instance_url: %w[http://this_is_my_instance http://this_is_second_instance].sample
24
- }
25
- end
26
- end
27
- end
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Soaspec
4
+ module TestServer
5
+ # Used to simulate requests requiring oauth authentication
6
+ class Invoices
7
+ @user_used = nil
8
+
9
+ class << self
10
+ attr_accessor :user_used
11
+
12
+ def oauth_headers
13
+ {
14
+ 'Content-Type' => 'application/json;charset=UTF-8'
15
+ }
16
+ end
17
+
18
+ def oauth_body
19
+ {
20
+ access_token: 'TEST_TOKENiIsImtpZCI6IlRFU1QifQ.AAAABBBBRfaWQiOiJhYWQ5MjY3SIMULATE_LARGE_TOKEN3MmM5OGQ5NGE2YTU5YSIsImV4cCI6MTUyNzU3MTY4Mywic2NvcGUiOltdfQ.3OmCdW7fLZMUST_BE_ABLE_TO_HANDLEgAGaJB0lFYyhaw',
21
+ token_type: 'Bearer',
22
+ expires_in: '86399',
23
+ instance_url: %w[http://this_is_my_instance http://this_is_second_instance].sample
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,15 +1,15 @@
1
- <root>
2
- <h:table xmlns:h="http://www.w3.org/TR/html4/">
3
- <h:tr>
4
- <h:td>Apples</h:td>
5
- <h:td>Bananas</h:td>
6
- </h:tr>
7
- </h:table>
8
-
9
- <f:table xmlns:f="https://www.w3schools.com/furniture">
10
- <f:td>Wood</f:td>
11
- <f:name>African Coffee Table</f:name>
12
- <f:width>80</f:width>
13
- <f:length>120</f:length>
14
- </f:table>
1
+ <root>
2
+ <h:table xmlns:h="http://www.w3.org/TR/html4/">
3
+ <h:tr>
4
+ <h:td>Apples</h:td>
5
+ <h:td>Bananas</h:td>
6
+ </h:tr>
7
+ </h:table>
8
+
9
+ <f:table xmlns:f="https://www.w3schools.com/furniture">
10
+ <f:td>Wood</f:td>
11
+ <f:name>African Coffee Table</f:name>
12
+ <f:width>80</f:width>
13
+ <f:length>120</f:length>
14
+ </f:table>
15
15
  </root>
@@ -1,6 +1,6 @@
1
- <note date="2008-01-10">
2
- <to>Tove</to>
3
- <from>Jani</from>
4
- <comment_line>First comment</comment_line>
5
- <comment_line>Second comment</comment_line>
1
+ <note date="2008-01-10">
2
+ <to>Tove</to>
3
+ <from>Jani</from>
4
+ <comment_line>First comment</comment_line>
5
+ <comment_line>Second comment</comment_line>
6
6
  </note>
@@ -1,21 +1,21 @@
1
- # frozen_string_literal: true
2
-
3
- module Soaspec
4
- module TestServer
5
- # Simulates ordering a new puppy. Used for testing REST storing, retrieving and updating data
6
- class PuppyService
7
- @data = {}
8
- @current_id = 1
9
- class << self
10
- attr_accessor :data
11
-
12
- def new_id
13
- @data[@current_id] = {}
14
- @data[@current_id][:Id] = @current_id
15
- @current_id += 1
16
- @current_id - 1
17
- end
18
- end
19
- end
20
- end
21
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Soaspec
4
+ module TestServer
5
+ # Simulates ordering a new puppy. Used for testing REST storing, retrieving and updating data
6
+ class PuppyService
7
+ @data = {}
8
+ @current_id = 1
9
+ class << self
10
+ attr_accessor :data
11
+
12
+ def new_id
13
+ @data[@current_id] = {}
14
+ @data[@current_id][:Id] = @current_id
15
+ @current_id += 1
16
+ @current_id - 1
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,14 +1,14 @@
1
- # frozen_string_literal: true
2
-
3
- module Soaspec
4
- module TestServer
5
- # Helps tests attribute methods
6
- class TestAttribute
7
- class << self
8
- def note
9
- File.read(File.join(File.dirname(__FILE__), 'note.xml'))
10
- end
11
- end
12
- end
13
- end
14
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Soaspec
4
+ module TestServer
5
+ # Helps tests attribute methods
6
+ class TestAttribute
7
+ class << self
8
+ def note
9
+ File.read(File.join(File.dirname(__FILE__), 'note.xml'))
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,14 +1,14 @@
1
- # frozen_string_literal: true
2
-
3
- module Soaspec
4
- module TestServer
5
- # Helps tests attribute methods
6
- class TestNamespace
7
- class << self
8
- def food
9
- File.read(File.join(File.dirname(__FILE__), 'namespace.xml'))
10
- end
11
- end
12
- end
13
- end
14
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Soaspec
4
+ module TestServer
5
+ # Helps tests attribute methods
6
+ class TestNamespace
7
+ class << self
8
+ def food
9
+ File.read(File.join(File.dirname(__FILE__), 'namespace.xml'))
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- module Soaspec
4
- # @return [String] Version of the gem
5
- VERSION = '0.2.32'
6
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Soaspec
4
+ # @return [String] Version of the gem
5
+ VERSION = '0.2.33'
6
+ end
@@ -1,176 +1,190 @@
1
- # frozen_string_literal: true
2
-
3
- require 'soaspec'
4
- require 'sinatra'
5
- require 'sinatra/basic_auth'
6
- require 'docdsl'
7
- require 'nokogiri'
8
- require 'erb'
9
- require 'json'
10
- require 'faker'
11
- require 'soaspec/test_server/get_bank'
12
- require 'soaspec/test_server/test_attribute'
13
- require 'soaspec/test_server/puppy_service'
14
- require 'soaspec/test_server/invoices'
15
- require 'soaspec/test_server/test_namespace'
16
- require 'soaspec/test_server/id_manager'
17
-
18
- module Soaspec
19
- # Used to run virtual web service on localhost. This makes tests more reliable and faster
20
- # First argument overrides the default port
21
- class VirtualServer < Sinatra::Application
22
- set :bind, '0.0.0.0'
23
- set :port, (ENV['port'] || 4999).to_i
24
-
25
- register Sinatra::DocDsl
26
-
27
- page do
28
- title 'Soaspec Virtual Services'
29
- header 'Perform efficient API testing with Ruby'
30
- introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
31
- end
32
-
33
- documentation 'Nothing under /. Go look at /docs' do
34
- response 'redirects to the documentation page'
35
- status 302
36
- end
37
- get '/' do
38
- redirect '/docs'
39
- end
40
-
41
- doc_endpoint '/docs'
42
-
43
- documentation 'Simulate server error' do
44
- status 500
45
- end
46
- get '/server_error' do
47
- [500, {}, 'Internal Server Error']
48
- end
49
-
50
- documentation 'Used to verify extract from text response' do
51
- response 'Plain text with a pattern to match in it'
52
- end
53
- get '/text_response' do
54
- 'This is some text. In here it says ID=12345 to indicate value to obtain'
55
- end
56
-
57
- documentation 'Used to test attributes' do
58
- response 'A simple Note XML with a date attribute'
59
- end
60
- get '/test_attribute' do
61
- Soaspec::TestServer::TestAttribute.note
62
- end
63
-
64
- documentation 'Used to test namespaces' do
65
- response 'XML with 2 namespaces and same elements inside it'
66
- end
67
- get '/namespace' do
68
- Soaspec::TestServer::TestNamespace.food
69
- end
70
-
71
- documentation 'Used for showing a simple difference in value depending on the id used' do
72
- param :num, 'Number of tester'
73
- param :id, 'Test parameter'
74
- response 'JSON with success or true or false and the id sent
75
- Idea is for tester to find the id that causes a failure (the fake "defect")
76
- '
77
- end
78
- get '/packages/:num/:id' do |num, id|
79
- JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
80
- end
81
-
82
- documentation 'Sets status as developed'
83
- post '/packages/developed' do
84
- Soaspec::TestServer::IdManager.developed = request.body.include?('true')
85
- Soaspec::TestServer::IdManager.developed.to_s
86
- end
87
-
88
- # Used for simple testing of posing
89
- documentation 'Simply sends the response body back'
90
- post '/echoer' do
91
- request.body
92
- end
93
-
94
- documentation "Simulate retrieving an ouath token Passed to '/invoices'"
95
- post '/as/token.oauth2' do
96
- Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
97
- [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
98
- end
99
-
100
- documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
101
- get '/invoice/:id' do |id|
102
- JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
103
- end
104
-
105
- documentation 'This is returned when a query for the WSDL is made' do
106
- response 'WSDL containing SCHEMA information'
107
- end
108
- get '/BLZService' do
109
- [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
110
- end
111
-
112
- authorize do |username, password|
113
- username == 'admin' && password == 'secret'
114
- end
115
-
116
- protect do
117
- documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
118
- response 'Secret text'
119
- end
120
- get '/basic_secrets' do
121
- 'Secret data'
122
- end
123
-
124
- documentation 'This is the basic service being hit by SOAP actions'
125
- post '/BLZService' do
126
- Soaspec::TestServer::GetBank.response_for request
127
- end
128
- end
129
-
130
- documentation 'Used for testing storage of data' do
131
- payload 'Puppy JSON',
132
- Name: 'Test', Failure_Type__c: 'Fail'
133
- end
134
- post '/test/puppy' do
135
- request_hash = JSON.parse(request.body.string)
136
- id = Soaspec::TestServer::PuppyService.new_id
137
- Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
138
- Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
139
- response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
140
- JSON.generate response_hash
141
- end
142
-
143
- documentation 'Used for testing retrieving storage of data'
144
- get '/test/puppy/:id' do |id|
145
- result = Soaspec::TestServer::PuppyService.data[id.to_i]
146
- JSON.generate result
147
- end
148
-
149
- documentation 'Used for testing updating data'
150
- patch '/test/puppy/:id' do |id|
151
- request_hash = JSON.parse(request.body.string)
152
- Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
153
- response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
154
- JSON.generate response_hash
155
- end
156
-
157
- documentation 'Used for testing the handling of JSON path' do
158
- response 'JSON with multiple elements of the same name at different nested levels'
159
- end
160
- get '/test/multiple_json' do
161
- <<-BOOKS
162
- {"store":
163
- {"bicycle":
164
- {"price":19.95, "color":"red"},
165
- "book":[
166
- {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
167
- {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
168
- {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
169
- {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
170
- ]
171
- }
172
- }
173
- BOOKS
174
- end
175
- end
176
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'soaspec'
4
+ require 'sinatra'
5
+ require 'sinatra/basic_auth'
6
+ require 'docdsl'
7
+ require 'nokogiri'
8
+ require 'erb'
9
+ require 'json'
10
+ require 'faker'
11
+ require 'soaspec/test_server/get_bank'
12
+ require 'soaspec/test_server/test_attribute'
13
+ require 'soaspec/test_server/puppy_service'
14
+ require 'soaspec/test_server/invoices'
15
+ require 'soaspec/test_server/test_namespace'
16
+ require 'soaspec/test_server/id_manager'
17
+
18
+ module Soaspec
19
+ # Used to run virtual web service on localhost. This makes tests more reliable and faster
20
+ # First argument overrides the default port
21
+ class VirtualServer < Sinatra::Application
22
+ set :bind, '0.0.0.0'
23
+ set :port, (ENV['port'] || 4999).to_i
24
+
25
+ register Sinatra::DocDsl
26
+
27
+ page do
28
+ title 'Soaspec Virtual Services'
29
+ header 'Perform efficient API testing with Ruby'
30
+ introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
31
+ end
32
+
33
+ documentation 'Nothing under /. Go look at /docs' do
34
+ response 'redirects to the documentation page'
35
+ status 302
36
+ end
37
+ get '/' do
38
+ redirect '/docs'
39
+ end
40
+
41
+ doc_endpoint '/docs'
42
+
43
+ documentation 'Simulate server error' do
44
+ status 500
45
+ end
46
+ get '/server_error' do
47
+ [500, {}, 'Internal Server Error']
48
+ end
49
+
50
+ documentation 'Used to verify extract from text response' do
51
+ response 'Plain text with a pattern to match in it'
52
+ end
53
+ get '/text_response' do
54
+ 'This is some text. In here it says ID=12345 to indicate value to obtain'
55
+ end
56
+
57
+ documentation 'Used to demonstrate a multi layered path' do
58
+ response 'Simple xml'
59
+ end
60
+ get '/this/is/a/long/path' do
61
+ '<long><path>Text from drilling down to a long path</path></long>'
62
+ end
63
+
64
+ documentation 'Used to demonstrate response that could be baselined' do
65
+ response 'JSON varying according to request params'
66
+ end
67
+ get '/baseline/:sub1/:sub2' do
68
+ JSON.generate(success: true, params: params)
69
+ end
70
+
71
+ documentation 'Used to test attributes' do
72
+ response 'A simple Note XML with a date attribute'
73
+ end
74
+ get '/test_attribute' do
75
+ Soaspec::TestServer::TestAttribute.note
76
+ end
77
+
78
+ documentation 'Used to test namespaces' do
79
+ response 'XML with 2 namespaces and same elements inside it'
80
+ end
81
+ get '/namespace' do
82
+ Soaspec::TestServer::TestNamespace.food
83
+ end
84
+
85
+ documentation 'Used for showing a simple difference in value depending on the id used' do
86
+ param :num, 'Number of tester'
87
+ param :id, 'Test parameter'
88
+ response 'JSON with success or true or false and the id sent
89
+ Idea is for tester to find the id that causes a failure (the fake "defect")
90
+ '
91
+ end
92
+ get '/packages/:num/:id' do |num, id|
93
+ JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
94
+ end
95
+
96
+ documentation 'Sets status as developed'
97
+ post '/packages/developed' do
98
+ Soaspec::TestServer::IdManager.developed = request.body.include?('true')
99
+ Soaspec::TestServer::IdManager.developed.to_s
100
+ end
101
+
102
+ # Used for simple testing of posing
103
+ documentation 'Simply sends the response body back'
104
+ post '/echoer' do
105
+ request.body
106
+ end
107
+
108
+ documentation "Simulate retrieving an ouath token Passed to '/invoices'"
109
+ post '/as/token.oauth2' do
110
+ Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
111
+ [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
112
+ end
113
+
114
+ documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
115
+ get '/invoice/:id' do |id|
116
+ JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
117
+ end
118
+
119
+ documentation 'This is returned when a query for the WSDL is made' do
120
+ response 'WSDL containing SCHEMA information'
121
+ end
122
+ get '/BLZService' do
123
+ [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
124
+ end
125
+
126
+ authorize do |username, password|
127
+ username == 'admin' && password == 'secret'
128
+ end
129
+
130
+ protect do
131
+ documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
132
+ response 'Secret text'
133
+ end
134
+ get '/basic_secrets' do
135
+ 'Secret data'
136
+ end
137
+
138
+ documentation 'This is the basic service being hit by SOAP actions'
139
+ post '/BLZService' do
140
+ Soaspec::TestServer::GetBank.response_for request
141
+ end
142
+ end
143
+
144
+ documentation 'Used for testing storage of data' do
145
+ payload 'Puppy JSON',
146
+ Name: 'Test', Failure_Type__c: 'Fail'
147
+ end
148
+ post '/test/puppy' do
149
+ request_hash = JSON.parse(request.body.string)
150
+ id = Soaspec::TestServer::PuppyService.new_id
151
+ Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
152
+ Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
153
+ response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
154
+ JSON.generate response_hash
155
+ end
156
+
157
+ documentation 'Used for testing retrieving storage of data'
158
+ get '/test/puppy/:id' do |id|
159
+ result = Soaspec::TestServer::PuppyService.data[id.to_i]
160
+ JSON.generate result
161
+ end
162
+
163
+ documentation 'Used for testing updating data'
164
+ patch '/test/puppy/:id' do |id|
165
+ request_hash = JSON.parse(request.body.string)
166
+ Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
167
+ response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
168
+ JSON.generate response_hash
169
+ end
170
+
171
+ documentation 'Used for testing the handling of JSON path' do
172
+ response 'JSON with multiple elements of the same name at different nested levels'
173
+ end
174
+ get '/test/multiple_json' do
175
+ <<-BOOKS
176
+ {"store":
177
+ {"bicycle":
178
+ {"price":19.95, "color":"red"},
179
+ "book":[
180
+ {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
181
+ {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
182
+ {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
183
+ {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
184
+ ]
185
+ }
186
+ }
187
+ BOOKS
188
+ end
189
+ end
190
+ end