lib/soaspec/virtual_server.rb in soaspec-0.2.23 vs lib/soaspec/virtual_server.rb in soaspec-0.2.24
- old
+ new
@@ -1,174 +1,174 @@
-require 'soaspec'
-require 'sinatra'
-require 'sinatra/basic_auth'
-require 'docdsl'
-require 'nokogiri'
-require 'erb'
-require 'json'
-require 'faker'
-require 'soaspec/test_server/get_bank'
-require 'soaspec/test_server/test_attribute'
-require 'soaspec/test_server/puppy_service'
-require 'soaspec/test_server/invoices'
-require 'soaspec/test_server/test_namespace'
-require 'soaspec/test_server/id_manager'
-
-module Soaspec
- # Used to run virtual web service on localhost. This makes tests more reliable and faster
- # First argument overrides the default port
- class VirtualServer < Sinatra::Application
- set :bind, '0.0.0.0'
- set :port, (ENV['port'] || 4999).to_i
-
- register Sinatra::DocDsl
-
- page do
- title 'Soaspec Virtual Services'
- header 'Perform efficient API testing with Ruby'
- introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
- end
-
- documentation 'Nothing under /. Go look at /docs' do
- response 'redirects to the documentation page'
- status 302
- end
- get '/' do
- redirect '/docs'
- end
-
- doc_endpoint '/docs'
-
- documentation 'Simulate server error' do
- status 500
- end
- get '/server_error' do
- [500, {}, 'Internal Server Error']
- end
-
- documentation 'Used to verify extract from text response' do
- response 'Plain text with a pattern to match in it'
- end
- get '/text_response' do
- 'This is some text. In here it says ID=12345 to indicate value to obtain'
- end
-
- documentation 'Used to test attributes' do
- response 'A simple Note XML with a date attribute'
- end
- get '/test_attribute' do
- Soaspec::TestServer::TestAttribute.note
- end
-
- documentation 'Used to test namespaces' do
- response 'XML with 2 namespaces and same elements inside it'
- end
- get '/namespace' do
- Soaspec::TestServer::TestNamespace.food
- end
-
- documentation 'Used for showing a simple difference in value depending on the id used' do
- param :num, 'Number of tester'
- param :id, 'Test parameter'
- response 'JSON with success or true or false and the id sent
- Idea is for tester to find the id that causes a failure (the fake "defect")
- '
- end
- get '/packages/:num/:id' do |num, id|
- JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
- end
-
- documentation 'Sets status as developed'
- post '/packages/developed' do
- Soaspec::TestServer::IdManager.developed = request.body.include?('true')
- Soaspec::TestServer::IdManager.developed.to_s
- end
-
- # Used for simple testing of posing
- documentation 'Simply sends the response body back'
- post '/echoer' do
- request.body
- end
-
- documentation "Simulate retrieving an ouath token Passed to '/invoices'"
- post '/as/token.oauth2' do
- Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
- [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
- end
-
- documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
- get '/invoice/:id' do |id|
- JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
- end
-
- documentation 'This is returned when a query for the WSDL is made' do
- response 'WSDL containing SCHEMA information'
- end
- get '/BLZService' do
- [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
- end
-
- authorize do |username, password|
- username == 'admin' && password == 'secret'
- end
-
- protect do
- documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
- response 'Secret text'
- end
- get '/basic_secrets' do
- 'Secret data'
- end
-
- documentation 'This is the basic service being hit by SOAP actions'
- post '/BLZService' do
- Soaspec::TestServer::GetBank.response_for request
- end
- end
-
- documentation 'Used for testing storage of data' do
- payload 'Puppy JSON',
- Name: 'Test', Failure_Type__c: 'Fail'
- end
- post '/test/puppy' do
- request_hash = JSON.parse(request.body.string)
- id = Soaspec::TestServer::PuppyService.new_id
- Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
- Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
- response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
- JSON.generate response_hash
- end
-
- documentation 'Used for testing retrieving storage of data'
- get '/test/puppy/:id' do |id|
- result = Soaspec::TestServer::PuppyService.data[id.to_i]
- JSON.generate result
- end
-
- documentation 'Used for testing updating data'
- patch '/test/puppy/:id' do |id|
- request_hash = JSON.parse(request.body.string)
- Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
- response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
- JSON.generate response_hash
- end
-
- documentation 'Used for testing the handling of JSON path' do
- response 'JSON with multiple elements of the same name at different nested levels'
- end
- get '/test/multiple_json' do
- <<-BOOKS
- {"store":
- {"bicycle":
- {"price":19.95, "color":"red"},
- "book":[
- {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
- {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
- {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
- {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
- ]
- }
- }
- BOOKS
- end
- end
-end
+require 'soaspec'
+require 'sinatra'
+require 'sinatra/basic_auth'
+require 'docdsl'
+require 'nokogiri'
+require 'erb'
+require 'json'
+require 'faker'
+require 'soaspec/test_server/get_bank'
+require 'soaspec/test_server/test_attribute'
+require 'soaspec/test_server/puppy_service'
+require 'soaspec/test_server/invoices'
+require 'soaspec/test_server/test_namespace'
+require 'soaspec/test_server/id_manager'
+
+module Soaspec
+ # Used to run virtual web service on localhost. This makes tests more reliable and faster
+ # First argument overrides the default port
+ class VirtualServer < Sinatra::Application
+ set :bind, '0.0.0.0'
+ set :port, (ENV['port'] || 4999).to_i
+
+ register Sinatra::DocDsl
+
+ page do
+ title 'Soaspec Virtual Services'
+ header 'Perform efficient API testing with Ruby'
+ introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
+ end
+
+ documentation 'Nothing under /. Go look at /docs' do
+ response 'redirects to the documentation page'
+ status 302
+ end
+ get '/' do
+ redirect '/docs'
+ end
+
+ doc_endpoint '/docs'
+
+ documentation 'Simulate server error' do
+ status 500
+ end
+ get '/server_error' do
+ [500, {}, 'Internal Server Error']
+ end
+
+ documentation 'Used to verify extract from text response' do
+ response 'Plain text with a pattern to match in it'
+ end
+ get '/text_response' do
+ 'This is some text. In here it says ID=12345 to indicate value to obtain'
+ end
+
+ documentation 'Used to test attributes' do
+ response 'A simple Note XML with a date attribute'
+ end
+ get '/test_attribute' do
+ Soaspec::TestServer::TestAttribute.note
+ end
+
+ documentation 'Used to test namespaces' do
+ response 'XML with 2 namespaces and same elements inside it'
+ end
+ get '/namespace' do
+ Soaspec::TestServer::TestNamespace.food
+ end
+
+ documentation 'Used for showing a simple difference in value depending on the id used' do
+ param :num, 'Number of tester'
+ param :id, 'Test parameter'
+ response 'JSON with success or true or false and the id sent
+ Idea is for tester to find the id that causes a failure (the fake "defect")
+ '
+ end
+ get '/packages/:num/:id' do |num, id|
+ JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
+ end
+
+ documentation 'Sets status as developed'
+ post '/packages/developed' do
+ Soaspec::TestServer::IdManager.developed = request.body.include?('true')
+ Soaspec::TestServer::IdManager.developed.to_s
+ end
+
+ # Used for simple testing of posing
+ documentation 'Simply sends the response body back'
+ post '/echoer' do
+ request.body
+ end
+
+ documentation "Simulate retrieving an ouath token Passed to '/invoices'"
+ post '/as/token.oauth2' do
+ Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
+ [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
+ end
+
+ documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
+ get '/invoice/:id' do |id|
+ JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
+ end
+
+ documentation 'This is returned when a query for the WSDL is made' do
+ response 'WSDL containing SCHEMA information'
+ end
+ get '/BLZService' do
+ [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
+ end
+
+ authorize do |username, password|
+ username == 'admin' && password == 'secret'
+ end
+
+ protect do
+ documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
+ response 'Secret text'
+ end
+ get '/basic_secrets' do
+ 'Secret data'
+ end
+
+ documentation 'This is the basic service being hit by SOAP actions'
+ post '/BLZService' do
+ Soaspec::TestServer::GetBank.response_for request
+ end
+ end
+
+ documentation 'Used for testing storage of data' do
+ payload 'Puppy JSON',
+ Name: 'Test', Failure_Type__c: 'Fail'
+ end
+ post '/test/puppy' do
+ request_hash = JSON.parse(request.body.string)
+ id = Soaspec::TestServer::PuppyService.new_id
+ Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
+ Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
+ response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
+ JSON.generate response_hash
+ end
+
+ documentation 'Used for testing retrieving storage of data'
+ get '/test/puppy/:id' do |id|
+ result = Soaspec::TestServer::PuppyService.data[id.to_i]
+ JSON.generate result
+ end
+
+ documentation 'Used for testing updating data'
+ patch '/test/puppy/:id' do |id|
+ request_hash = JSON.parse(request.body.string)
+ Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
+ response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
+ JSON.generate response_hash
+ end
+
+ documentation 'Used for testing the handling of JSON path' do
+ response 'JSON with multiple elements of the same name at different nested levels'
+ end
+ get '/test/multiple_json' do
+ <<-BOOKS
+ {"store":
+ {"bicycle":
+ {"price":19.95, "color":"red"},
+ "book":[
+ {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
+ {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
+ {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
+ {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
+ ]
+ }
+ }
+ BOOKS
+ end
+ end
+end