soaspec 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +15 -15
  3. data/.gitlab-ci.yml +48 -48
  4. data/.rspec +3 -3
  5. data/.rubocop.yml +2 -2
  6. data/CODE_OF_CONDUCT.md +74 -74
  7. data/ChangeLog +404 -400
  8. data/Gemfile +6 -6
  9. data/LICENSE.txt +21 -21
  10. data/README.md +113 -113
  11. data/Rakefile +24 -24
  12. data/Todo.md +6 -6
  13. data/exe/soaspec +109 -109
  14. data/exe/soaspec-virtual-server +156 -155
  15. data/exe/xml_to_yaml_file +60 -60
  16. data/lib/soaspec.rb +103 -103
  17. data/lib/soaspec/core_ext/hash.rb +83 -83
  18. data/lib/soaspec/exchange.rb +235 -235
  19. data/lib/soaspec/exchange_handlers/exchange_handler.rb +103 -103
  20. data/lib/soaspec/exchange_handlers/handler_accessors.rb +106 -106
  21. data/lib/soaspec/exchange_handlers/rest_accessors.rb +92 -92
  22. data/lib/soaspec/exchange_handlers/rest_handler.rb +314 -314
  23. data/lib/soaspec/exchange_handlers/rest_methods.rb +44 -44
  24. data/lib/soaspec/exchange_handlers/soap_handler.rb +236 -236
  25. data/lib/soaspec/exe_helpers.rb +60 -60
  26. data/lib/soaspec/generator/.rspec.erb +5 -5
  27. data/lib/soaspec/generator/.travis.yml.erb +5 -5
  28. data/lib/soaspec/generator/Gemfile.erb +8 -8
  29. data/lib/soaspec/generator/README.md.erb +29 -29
  30. data/lib/soaspec/generator/Rakefile.erb +19 -19
  31. data/lib/soaspec/generator/config/data/default.yml.erb +1 -1
  32. data/lib/soaspec/generator/lib/blz_service.rb.erb +26 -26
  33. data/lib/soaspec/generator/lib/dynamic_class_content.rb.erb +12 -12
  34. data/lib/soaspec/generator/lib/shared_example.rb.erb +8 -8
  35. data/lib/soaspec/generator/spec/dynamic_soap_spec.rb.erb +12 -12
  36. data/lib/soaspec/generator/spec/soap_spec.rb.erb +51 -51
  37. data/lib/soaspec/generator/spec/spec_helper.rb.erb +20 -20
  38. data/lib/soaspec/generator/template/soap_template.xml +6 -6
  39. data/lib/soaspec/interpreter.rb +40 -40
  40. data/lib/soaspec/matchers.rb +65 -65
  41. data/lib/soaspec/not_found_errors.rb +13 -13
  42. data/lib/soaspec/soaspec_shared_examples.rb +24 -24
  43. data/lib/soaspec/spec_logger.rb +27 -27
  44. data/lib/soaspec/test_server/bank.wsdl +90 -90
  45. data/lib/soaspec/test_server/get_bank.rb +160 -160
  46. data/lib/soaspec/test_server/id_manager.rb +31 -31
  47. data/lib/soaspec/test_server/invoices.rb +27 -27
  48. data/lib/soaspec/test_server/namespace.xml +14 -14
  49. data/lib/soaspec/test_server/note.xml +5 -5
  50. data/lib/soaspec/test_server/puppy_service.rb +20 -20
  51. data/lib/soaspec/test_server/test_attribute.rb +13 -13
  52. data/lib/soaspec/test_server/test_namespace.rb +12 -12
  53. data/lib/soaspec/version.rb +2 -2
  54. data/lib/soaspec/wsdl_generator.rb +144 -144
  55. data/soaspec.gemspec +46 -47
  56. data/test.wsdl +116 -116
  57. data/test.xml +10 -10
  58. data/test_wsdl.rb +43 -43
  59. metadata +6 -6
@@ -1,155 +1,156 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
- require 'soaspec'
5
- require 'sinatra'
6
- require 'sinatra/basic_auth'
7
- require 'docdsl'
8
- require 'nokogiri'
9
- require 'erb'
10
- require 'json'
11
- require 'faker'
12
-
13
- # Used to run virtual web service on localhost. This makes tests more reliable and faster
14
- class SoaspecVirtualServer < Sinatra::Application
15
- set :port, 4999
16
-
17
- register Sinatra::DocDsl
18
-
19
- page do
20
- title 'Soaspec Virtual Services'
21
- header 'Perform efficient API testing with Ruby'
22
- introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
23
- end
24
-
25
- documentation 'Nothing under /. Go look at /docs' do
26
- response 'redirects to the documentation page'
27
- status 303
28
- end
29
- get '/' do
30
- redirect '/docs'
31
- end
32
-
33
- doc_endpoint '/docs'
34
-
35
- documentation 'Used to test attributes' do
36
- response 'A simple Note XML with a date attribute'
37
- end
38
- get '/test_attribute' do
39
- Soaspec::TestServer::TestAttribute.note
40
- end
41
-
42
- documentation 'Used to test namespaces' do
43
- response 'XML with 2 namespaces and same elements inside it'
44
- end
45
- get '/namespace' do
46
- Soaspec::TestServer::TestNamespace.food
47
- end
48
-
49
- documentation 'Used for showing a simple difference in value depending on the id used' do
50
- param :num, 'Number of tester'
51
- param :id, 'Test parameter'
52
- response 'JSON with success or true or false and the id sent
53
- Idea is for tester to find the id that causes a failure (the fake "defect")
54
- '
55
- end
56
- get '/packages/:num/:id' do |num, id|
57
- JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
58
- end
59
-
60
- post '/packages/developed' do
61
- Soaspec::TestServer::IdManager.developed = request.body.include?('true')
62
- Soaspec::TestServer::IdManager.developed.to_s
63
- end
64
-
65
- # Used for simple testing of posing
66
- documentation 'Simply sends the response body back'
67
- post '/echoer' do
68
- request.body
69
- end
70
-
71
- documentation "Simulate retrieving an ouath token Passed to '/invoices'"
72
- post '/as/token.oauth2' do
73
- Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
74
- [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
75
- end
76
-
77
- documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
78
- get '/invoice/:id' do |id|
79
- JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
80
- end
81
-
82
- documentation 'This is returned when a query for the WSDL is made' do
83
- response 'WSDL containing SCHEMA information'
84
- end
85
- get '/BLZService' do
86
- [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
87
- end
88
-
89
- authorize do |username, password|
90
- username == 'admin' && password == 'secret'
91
- end
92
-
93
- protect do
94
- documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
95
- response 'Secret text'
96
- end
97
- get '/basic_secrets' do
98
- 'Secret data'
99
- end
100
-
101
- documentation 'This is the basic service being hit by SOAP actions'
102
- post '/BLZService' do
103
- Soaspec::TestServer::GetBank.response_for request
104
- end
105
- end
106
-
107
- documentation 'Used for testing storage of data' do
108
- payload 'Puppy JSON',
109
- Name: 'Test', Failure_Type__c: 'Fail'
110
- end
111
- post '/test/puppy' do
112
- request_hash = JSON.parse(request.body.string)
113
- id = Soaspec::TestServer::PuppyService.new_id
114
- Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
115
- Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
116
- response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
117
- JSON.generate response_hash
118
- end
119
-
120
- documentation 'Used for testing retrieving storage of data'
121
- get '/test/puppy/:id' do |id|
122
- result = Soaspec::TestServer::PuppyService.data[id.to_i]
123
- JSON.generate result
124
- end
125
-
126
- documentation 'Used for testing updating data'
127
- patch '/test/puppy/:id' do |id|
128
- request_hash = JSON.parse(request.body.string)
129
- Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
130
- response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
131
- JSON.generate response_hash
132
- end
133
-
134
- documentation 'Used for testing the handling of JSON path' do
135
- response 'JSON with multiple elements of the same name at different nested levels'
136
- end
137
- get '/test/multiple_json' do
138
- <<-BOOKS
139
- {"store":
140
- {"bicycle":
141
- {"price":19.95, "color":"red"},
142
- "book":[
143
- {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
144
- {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
145
- {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
146
- {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
147
- ]
148
- }
149
- }
150
- BOOKS
151
- end
152
-
153
- end
154
-
155
- SoaspecVirtualServer.run!
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require 'soaspec'
5
+ require 'sinatra'
6
+ require 'sinatra/basic_auth'
7
+ require 'docdsl'
8
+ require 'nokogiri'
9
+ require 'erb'
10
+ require 'json'
11
+ require 'faker'
12
+
13
+ # Used to run virtual web service on localhost. This makes tests more reliable and faster
14
+ # First argument overrides the default port
15
+ class SoaspecVirtualServer < Sinatra::Application
16
+ set :bind, '0.0.0.0'
17
+ set :port, (ARGV[0] || 4999).to_i
18
+
19
+ register Sinatra::DocDsl
20
+
21
+ page do
22
+ title 'Soaspec Virtual Services'
23
+ header 'Perform efficient API testing with Ruby'
24
+ introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
25
+ end
26
+
27
+ documentation 'Nothing under /. Go look at /docs' do
28
+ response 'redirects to the documentation page'
29
+ status 303
30
+ end
31
+ get '/' do
32
+ redirect '/docs'
33
+ end
34
+
35
+ doc_endpoint '/docs'
36
+
37
+ documentation 'Used to test attributes' do
38
+ response 'A simple Note XML with a date attribute'
39
+ end
40
+ get '/test_attribute' do
41
+ Soaspec::TestServer::TestAttribute.note
42
+ end
43
+
44
+ documentation 'Used to test namespaces' do
45
+ response 'XML with 2 namespaces and same elements inside it'
46
+ end
47
+ get '/namespace' do
48
+ Soaspec::TestServer::TestNamespace.food
49
+ end
50
+
51
+ documentation 'Used for showing a simple difference in value depending on the id used' do
52
+ param :num, 'Number of tester'
53
+ param :id, 'Test parameter'
54
+ response 'JSON with success or true or false and the id sent
55
+ Idea is for tester to find the id that causes a failure (the fake "defect")
56
+ '
57
+ end
58
+ get '/packages/:num/:id' do |num, id|
59
+ JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
60
+ end
61
+
62
+ post '/packages/developed' do
63
+ Soaspec::TestServer::IdManager.developed = request.body.include?('true')
64
+ Soaspec::TestServer::IdManager.developed.to_s
65
+ end
66
+
67
+ # Used for simple testing of posing
68
+ documentation 'Simply sends the response body back'
69
+ post '/echoer' do
70
+ request.body
71
+ end
72
+
73
+ documentation "Simulate retrieving an ouath token Passed to '/invoices'"
74
+ post '/as/token.oauth2' do
75
+ Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
76
+ [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
77
+ end
78
+
79
+ documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
80
+ get '/invoice/:id' do |id|
81
+ JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
82
+ end
83
+
84
+ documentation 'This is returned when a query for the WSDL is made' do
85
+ response 'WSDL containing SCHEMA information'
86
+ end
87
+ get '/BLZService' do
88
+ [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
89
+ end
90
+
91
+ authorize do |username, password|
92
+ username == 'admin' && password == 'secret'
93
+ end
94
+
95
+ protect do
96
+ documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
97
+ response 'Secret text'
98
+ end
99
+ get '/basic_secrets' do
100
+ 'Secret data'
101
+ end
102
+
103
+ documentation 'This is the basic service being hit by SOAP actions'
104
+ post '/BLZService' do
105
+ Soaspec::TestServer::GetBank.response_for request
106
+ end
107
+ end
108
+
109
+ documentation 'Used for testing storage of data' do
110
+ payload 'Puppy JSON',
111
+ Name: 'Test', Failure_Type__c: 'Fail'
112
+ end
113
+ post '/test/puppy' do
114
+ request_hash = JSON.parse(request.body.string)
115
+ id = Soaspec::TestServer::PuppyService.new_id
116
+ Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
117
+ Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
118
+ response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
119
+ JSON.generate response_hash
120
+ end
121
+
122
+ documentation 'Used for testing retrieving storage of data'
123
+ get '/test/puppy/:id' do |id|
124
+ result = Soaspec::TestServer::PuppyService.data[id.to_i]
125
+ JSON.generate result
126
+ end
127
+
128
+ documentation 'Used for testing updating data'
129
+ patch '/test/puppy/:id' do |id|
130
+ request_hash = JSON.parse(request.body.string)
131
+ Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
132
+ response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
133
+ JSON.generate response_hash
134
+ end
135
+
136
+ documentation 'Used for testing the handling of JSON path' do
137
+ response 'JSON with multiple elements of the same name at different nested levels'
138
+ end
139
+ get '/test/multiple_json' do
140
+ <<-BOOKS
141
+ {"store":
142
+ {"bicycle":
143
+ {"price":19.95, "color":"red"},
144
+ "book":[
145
+ {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
146
+ {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
147
+ {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
148
+ {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
149
+ ]
150
+ }
151
+ }
152
+ BOOKS
153
+ end
154
+ end
155
+
156
+ SoaspecVirtualServer.run!
@@ -1,61 +1,61 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'xmlsimple'
4
- require 'yaml'
5
- require 'fileutils'
6
-
7
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
8
-
9
- require 'soaspec'
10
-
11
- include Soaspec::ExeHelpers
12
-
13
- default_output_file = 'output.yml'
14
-
15
- # Create file if not present. If present but different give warning
16
- def create_file(options)
17
- filename = options[:filename]
18
- raise 'Need to pass filename' unless filename
19
- content = options[:content]
20
- raise 'Need to pass contents to insert into file' unless content
21
- if File.exist? filename
22
- old_content = File.read(filename)
23
- if old_content != content
24
- warn "!! #{filename} already exists and differs from template"
25
- end
26
- else
27
- File.open(filename, 'w') do |f|
28
- f.puts content
29
- end
30
- puts 'Created: ' + filename
31
- end
32
- end
33
-
34
- # For all keys in a Hash, convert Camelcase to underscore separated
35
- def convert_hash_keys(value)
36
- case value
37
- when Array
38
- value.map { |v| convert_hash_keys(v) }
39
- when Hash
40
- Hash[value.map { |k, v| [k.snakecase, convert_hash_keys(v)] }]
41
- else
42
- value
43
- end
44
- end
45
-
46
- # Remove arrays created as another string
47
- def clean_up_yaml(yaml_string)
48
- yaml_string = yaml_string.gsub(/\R+(\s*)-/, '').gsub(/{}/, "''") # Remove arrays, {} -> ''
49
- # Insert new line where there are 2 ':' on 1 line. Issue from first gsub
50
- yaml_string.gsub(/:(\s)(\w*):/){|s| s.insert(1, "\n")}
51
- end
52
-
53
- if ARGV[0]
54
- warn "Using '#{default_output_file}' as default output file since no 2nd argument passed" unless ARGV[1]
55
- hash = XmlSimple.xml_in(ARGV[0])
56
- converted = convert_hash_keys hash
57
- yaml_file = clean_up_yaml(converted.to_yaml)
58
- create_file(filename: ARGV[1] || default_output_file, content: yaml_file)
59
- else
60
- puts 'usage: xml_to_yaml_file [input.xml] [output.yml] '
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'xmlsimple'
4
+ require 'yaml'
5
+ require 'fileutils'
6
+
7
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
8
+
9
+ require 'soaspec'
10
+
11
+ include Soaspec::ExeHelpers
12
+
13
+ default_output_file = 'output.yml'
14
+
15
+ # Create file if not present. If present but different give warning
16
+ def create_file(options)
17
+ filename = options[:filename]
18
+ raise 'Need to pass filename' unless filename
19
+ content = options[:content]
20
+ raise 'Need to pass contents to insert into file' unless content
21
+ if File.exist? filename
22
+ old_content = File.read(filename)
23
+ if old_content != content
24
+ warn "!! #{filename} already exists and differs from template"
25
+ end
26
+ else
27
+ File.open(filename, 'w') do |f|
28
+ f.puts content
29
+ end
30
+ puts 'Created: ' + filename
31
+ end
32
+ end
33
+
34
+ # For all keys in a Hash, convert Camelcase to underscore separated
35
+ def convert_hash_keys(value)
36
+ case value
37
+ when Array
38
+ value.map { |v| convert_hash_keys(v) }
39
+ when Hash
40
+ Hash[value.map { |k, v| [k.snakecase, convert_hash_keys(v)] }]
41
+ else
42
+ value
43
+ end
44
+ end
45
+
46
+ # Remove arrays created as another string
47
+ def clean_up_yaml(yaml_string)
48
+ yaml_string = yaml_string.gsub(/\R+(\s*)-/, '').gsub(/{}/, "''") # Remove arrays, {} -> ''
49
+ # Insert new line where there are 2 ':' on 1 line. Issue from first gsub
50
+ yaml_string.gsub(/:(\s)(\w*):/){|s| s.insert(1, "\n")}
51
+ end
52
+
53
+ if ARGV[0]
54
+ warn "Using '#{default_output_file}' as default output file since no 2nd argument passed" unless ARGV[1]
55
+ hash = XmlSimple.xml_in(ARGV[0])
56
+ converted = convert_hash_keys hash
57
+ yaml_file = clean_up_yaml(converted.to_yaml)
58
+ create_file(filename: ARGV[1] || default_output_file, content: yaml_file)
59
+ else
60
+ puts 'usage: xml_to_yaml_file [input.xml] [output.yml] '
61
61
  end
@@ -1,103 +1,103 @@
1
- require 'rest-client' # REST
2
- require 'erb' # Embedded ruby
3
- require 'yaml' # Reading yaml
4
- require 'rspec' # Testing framework
5
- require 'rspec/its'
6
- require 'savon' # SOAP
7
- require 'nokogiri' # XPath
8
- require 'date'
9
- require 'jsonpath'
10
-
11
- require 'soaspec/version'
12
- require 'soaspec/exchange_handlers/soap_handler'
13
- require 'soaspec/exchange_handlers/exchange_handler'
14
- require 'soaspec/exchange_handlers/rest_methods'
15
- require 'soaspec/exchange'
16
- require 'soaspec/matchers'
17
- require 'soaspec/soaspec_shared_examples'
18
- require 'soaspec/core_ext/hash'
19
- require 'soaspec/spec_logger'
20
- require 'soaspec/exe_helpers'
21
- require 'soaspec/exchange_handlers/rest_handler'
22
- require 'soaspec/exchange_handlers/handler_accessors'
23
- require 'soaspec/interpreter'
24
- require 'soaspec/not_found_errors'
25
- require 'soaspec/test_server/get_bank'
26
- require 'soaspec/test_server/test_attribute'
27
- require 'soaspec/test_server/puppy_service'
28
- require 'soaspec/test_server/invoices'
29
- require 'soaspec/test_server/test_namespace'
30
- require 'soaspec/test_server/id_manager'
31
- require 'soaspec/wsdl_generator'
32
-
33
- # Gem for handling SOAP and REST api tests
34
- module Soaspec
35
-
36
- @template_folder = 'template'
37
-
38
- class << self
39
- # Specify whether to see params sent to and retrieved from oauth. This will put password in log file, only recommended for debugging
40
- attr_writer :debug_oauth
41
- # Folder used to store templates for API calls
42
- attr_accessor :template_folder
43
- # Stores last exchange
44
- attr_accessor :last_exchange
45
-
46
- # Folder used to store credentials
47
- # Used in auth2_file command
48
- # @param [String] folder
49
- def credentials_folder=(folder)
50
- @credentials_folder = folder
51
- end
52
-
53
- # Credentials folder used to store secret data (not in source control) E.g passwords
54
- def credentials_folder
55
- @credentials_folder
56
- end
57
-
58
- # Used so that exchange class knows what context it's in
59
- # @param [ExchangeHandler] handler A class inheriting from Soaspec::ExchangeHandler. Exchange class uses this
60
- def api_handler=(handler)
61
- @api_handler = handler
62
- end
63
-
64
- # Exchange Handler class currently being used
65
- def api_handler
66
- @api_handler
67
- end
68
-
69
- # Set whether to transform strings to keys in request automatically
70
- # @param [Boolean] use_keys
71
- def always_use_keys=(use_keys)
72
- @always_use_keys = use_keys
73
- end
74
-
75
- # @return [Boolean] Whether to transform strings to keys in request automatically
76
- def always_use_keys?
77
- @always_use_keys || true
78
- end
79
-
80
- # @return [Boolean] Whether to see params sent to & received from oauth URL
81
- def debug_oauth?
82
- @debug_oauth || false
83
- end
84
-
85
- # @return [String] Folder used to store templates for API calls
86
- # def template_folder
87
- # @template_folder || 'template'
88
- # end
89
-
90
- # Whether to log all API traffic
91
- def log_api_traffic=(set)
92
- @log_api_traffic = set
93
- RestClient.log = nil unless set
94
- end
95
-
96
- # @return [Boolean] Whether to log all API traffic
97
- def log_api_traffic?
98
- @log_api_traffic.nil? ? true : @log_api_traffic
99
- end
100
- end
101
- end
102
-
103
- RestClient.log = Soaspec::SpecLogger.create
1
+ require 'rest-client' # REST
2
+ require 'erb' # Embedded ruby
3
+ require 'yaml' # Reading yaml
4
+ require 'rspec' # Testing framework
5
+ require 'rspec/its'
6
+ require 'savon' # SOAP
7
+ require 'nokogiri' # XPath
8
+ require 'date'
9
+ require 'jsonpath'
10
+
11
+ require 'soaspec/version'
12
+ require 'soaspec/exchange_handlers/soap_handler'
13
+ require 'soaspec/exchange_handlers/exchange_handler'
14
+ require 'soaspec/exchange_handlers/rest_methods'
15
+ require 'soaspec/exchange'
16
+ require 'soaspec/matchers'
17
+ require 'soaspec/soaspec_shared_examples'
18
+ require 'soaspec/core_ext/hash'
19
+ require 'soaspec/spec_logger'
20
+ require 'soaspec/exe_helpers'
21
+ require 'soaspec/exchange_handlers/rest_handler'
22
+ require 'soaspec/exchange_handlers/handler_accessors'
23
+ require 'soaspec/interpreter'
24
+ require 'soaspec/not_found_errors'
25
+ require 'soaspec/test_server/get_bank'
26
+ require 'soaspec/test_server/test_attribute'
27
+ require 'soaspec/test_server/puppy_service'
28
+ require 'soaspec/test_server/invoices'
29
+ require 'soaspec/test_server/test_namespace'
30
+ require 'soaspec/test_server/id_manager'
31
+ require 'soaspec/wsdl_generator'
32
+
33
+ # Gem for handling SOAP and REST api tests
34
+ module Soaspec
35
+
36
+ @template_folder = 'template'
37
+
38
+ class << self
39
+ # Specify whether to see params sent to and retrieved from oauth. This will put password in log file, only recommended for debugging
40
+ attr_writer :debug_oauth
41
+ # Folder used to store templates for API calls
42
+ attr_accessor :template_folder
43
+ # Stores last exchange
44
+ attr_accessor :last_exchange
45
+
46
+ # Folder used to store credentials
47
+ # Used in auth2_file command
48
+ # @param [String] folder
49
+ def credentials_folder=(folder)
50
+ @credentials_folder = folder
51
+ end
52
+
53
+ # Credentials folder used to store secret data (not in source control) E.g passwords
54
+ def credentials_folder
55
+ @credentials_folder
56
+ end
57
+
58
+ # Used so that exchange class knows what context it's in
59
+ # @param [ExchangeHandler] handler A class inheriting from Soaspec::ExchangeHandler. Exchange class uses this
60
+ def api_handler=(handler)
61
+ @api_handler = handler
62
+ end
63
+
64
+ # Exchange Handler class currently being used
65
+ def api_handler
66
+ @api_handler
67
+ end
68
+
69
+ # Set whether to transform strings to keys in request automatically
70
+ # @param [Boolean] use_keys
71
+ def always_use_keys=(use_keys)
72
+ @always_use_keys = use_keys
73
+ end
74
+
75
+ # @return [Boolean] Whether to transform strings to keys in request automatically
76
+ def always_use_keys?
77
+ @always_use_keys || true
78
+ end
79
+
80
+ # @return [Boolean] Whether to see params sent to & received from oauth URL
81
+ def debug_oauth?
82
+ @debug_oauth || false
83
+ end
84
+
85
+ # @return [String] Folder used to store templates for API calls
86
+ # def template_folder
87
+ # @template_folder || 'template'
88
+ # end
89
+
90
+ # Whether to log all API traffic
91
+ def log_api_traffic=(set)
92
+ @log_api_traffic = set
93
+ RestClient.log = nil unless set
94
+ end
95
+
96
+ # @return [Boolean] Whether to log all API traffic
97
+ def log_api_traffic?
98
+ @log_api_traffic.nil? ? true : @log_api_traffic
99
+ end
100
+ end
101
+ end
102
+
103
+ RestClient.log = Soaspec::SpecLogger.create