inferno_core 0.3.3 → 0.3.6
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/lib/inferno/apps/web/controllers/test_runs/create.rb +8 -4
- data/lib/inferno/apps/web/controllers/test_sessions/create.rb +6 -3
- data/lib/inferno/apps/web/router.rb +5 -0
- data/lib/inferno/apps/web/serializers/input.rb +6 -2
- data/lib/inferno/apps/web/serializers/suite_option.rb +13 -0
- data/lib/inferno/apps/web/serializers/test.rb +4 -1
- data/lib/inferno/apps/web/serializers/test_group.rb +12 -3
- data/lib/inferno/apps/web/serializers/test_session.rb +5 -3
- data/lib/inferno/apps/web/serializers/test_suite.rb +10 -2
- data/lib/inferno/config/boot/db.rb +1 -1
- data/lib/inferno/config/boot/presets.rb +1 -1
- data/lib/inferno/config/boot.rb +1 -1
- data/lib/inferno/db/migrations/007_add_suite_options.rb +5 -0
- data/lib/inferno/db/schema.rb +1 -0
- data/lib/inferno/dsl/configurable.rb +1 -1
- data/lib/inferno/dsl/fhir_client.rb +22 -10
- data/lib/inferno/dsl/fhir_validation.rb +35 -12
- data/lib/inferno/dsl/http_client.rb +57 -35
- data/lib/inferno/dsl/http_client_builder.rb +6 -1
- data/lib/inferno/dsl/input_output_handling.rb +56 -42
- data/lib/inferno/dsl/runnable.rb +36 -10
- data/lib/inferno/dsl/suite_option.rb +40 -0
- data/lib/inferno/dsl/tcp_exception_handler.rb +11 -0
- data/lib/inferno/entities/input.rb +2 -1
- data/lib/inferno/entities/test.rb +7 -3
- data/lib/inferno/entities/test_group.rb +4 -4
- data/lib/inferno/entities/test_session.rb +40 -1
- data/lib/inferno/entities/test_suite.rb +18 -14
- data/lib/inferno/public/bundle.js +15 -15
- data/lib/inferno/repositories/presets.rb +10 -1
- data/lib/inferno/repositories/test_sessions.rb +24 -0
- data/lib/inferno/test_runner.rb +9 -3
- data/lib/inferno/version.rb +1 -1
- data/spec/support/factory_bot.rb +6 -0
- metadata +34 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f0cad7d368810c89ee2571e1f8aa6705d6b74b1ad058b8f179269a7705c2df7
|
4
|
+
data.tar.gz: 7f1ab19849ca3454f536b06963df78abc91c5dc7cbde24e796338836cd081e10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7ff909be62d859f3a0755f787fb8d893edaadffd16cc70dd18f47cfe0184b2ec82330a7f51a02617c4b8afb6710e3282492a9a2f23cf82e37650548cbd9dd4b
|
7
|
+
data.tar.gz: 5832f7eb12e90626ebd9ca84e945a3afc631e5d63d024381548ed7c3fc373ff85ca9ea34533a79eefedb7e8ab8d80d65229d2fffd180c7d289586528b29dfb03
|
@@ -11,8 +11,8 @@ module Inferno
|
|
11
11
|
|
12
12
|
PARAMS = [:test_session_id, :test_suite_id, :test_group_id, :test_id].freeze
|
13
13
|
|
14
|
-
def verify_runnable(runnable, inputs)
|
15
|
-
missing_inputs = runnable&.missing_inputs(inputs)
|
14
|
+
def verify_runnable(runnable, inputs, selected_suite_options)
|
15
|
+
missing_inputs = runnable&.missing_inputs(inputs, selected_suite_options)
|
16
16
|
user_runnable = runnable&.user_runnable?
|
17
17
|
raise Inferno::Exceptions::RequiredInputsNotFound, missing_inputs if missing_inputs&.any?
|
18
18
|
raise Inferno::Exceptions::NotUserRunnableException unless user_runnable
|
@@ -26,7 +26,7 @@ module Inferno
|
|
26
26
|
&.last
|
27
27
|
|
28
28
|
if input.nil?
|
29
|
-
Inferno::Application['logger'].
|
29
|
+
Inferno::Application['logger'].warn(
|
30
30
|
"Unknown input `#{input_params[:name]}` for #{test_run.runnable.id}: #{test_run.runnable.title}"
|
31
31
|
)
|
32
32
|
next
|
@@ -51,7 +51,11 @@ module Inferno
|
|
51
51
|
return
|
52
52
|
end
|
53
53
|
|
54
|
-
verify_runnable(
|
54
|
+
verify_runnable(
|
55
|
+
repo.build_entity(create_params(params)).runnable,
|
56
|
+
params[:inputs],
|
57
|
+
test_session.suite_options
|
58
|
+
)
|
55
59
|
|
56
60
|
test_run = repo.create(create_params(params).merge(status: 'queued'))
|
57
61
|
|
@@ -3,9 +3,12 @@ module Inferno
|
|
3
3
|
module Controllers
|
4
4
|
module TestSessions
|
5
5
|
class Create < Controller
|
6
|
-
PARAMS = [:test_suite_id].freeze
|
6
|
+
PARAMS = [:test_suite_id, :suite_options].freeze
|
7
|
+
|
8
|
+
def call(raw_params)
|
9
|
+
params = raw_params.to_h
|
10
|
+
params.merge!(JSON.parse(request.body.string).symbolize_keys) unless request.body.string.blank?
|
7
11
|
|
8
|
-
def call(params)
|
9
12
|
session = repo.create(create_params(params))
|
10
13
|
|
11
14
|
repo.apply_preset(session.id, params[:preset_id]) if params[:preset_id].present?
|
@@ -21,7 +24,7 @@ module Inferno
|
|
21
24
|
end
|
22
25
|
|
23
26
|
def create_params(params)
|
24
|
-
params.
|
27
|
+
params.slice(*PARAMS)
|
25
28
|
end
|
26
29
|
end
|
27
30
|
end
|
@@ -51,6 +51,11 @@ module Inferno
|
|
51
51
|
send(route[:method], path, to: route[:handler])
|
52
52
|
end
|
53
53
|
end
|
54
|
+
|
55
|
+
Inferno::Repositories::TestSuites.all.map { |suite| "/#{suite.id}" }.each do |suite_path|
|
56
|
+
Application['logger'].info("Registering suite route: #{suite_path}")
|
57
|
+
get suite_path, to: ->(_env) { [200, {}, [client_page]] }
|
58
|
+
end
|
54
59
|
end
|
55
60
|
end
|
56
61
|
end
|
@@ -6,9 +6,13 @@ module Inferno
|
|
6
6
|
class Input < Serializer
|
7
7
|
identifier :name
|
8
8
|
|
9
|
-
field :
|
9
|
+
field :title, if: :field_present?
|
10
10
|
field :description, if: :field_present?
|
11
|
-
field :
|
11
|
+
field :type, if: :field_present?
|
12
|
+
field :default, if: :field_present?
|
13
|
+
field :optional, if: :field_present?
|
14
|
+
field :options, if: :field_present?
|
15
|
+
field :locked, if: :field_present?
|
12
16
|
field :value, if: :field_present?
|
13
17
|
end
|
14
18
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Inferno
|
2
|
+
module Web
|
3
|
+
module Serializers
|
4
|
+
class SuiteOption < Serializer
|
5
|
+
identifier :id
|
6
|
+
field :title, if: :field_present?
|
7
|
+
field :description, if: :field_present?
|
8
|
+
field :list_options, if: :field_present?
|
9
|
+
field :value, if: :field_present?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -7,7 +7,10 @@ module Inferno
|
|
7
7
|
field :short_id
|
8
8
|
field :title
|
9
9
|
field :short_title
|
10
|
-
field :
|
10
|
+
field :inputs do |test, options|
|
11
|
+
suite_options = options[:suite_options]
|
12
|
+
Input.render_as_hash(test.available_inputs(suite_options).values)
|
13
|
+
end
|
11
14
|
field :output_definitions, name: :outputs, extractor: HashValueExtractor
|
12
15
|
field :description
|
13
16
|
field :short_description
|
@@ -15,9 +15,18 @@ module Inferno
|
|
15
15
|
field :user_runnable?, name: :user_runnable
|
16
16
|
field :optional?, name: :optional
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
field :test_groups do |group, options|
|
19
|
+
suite_options = options[:suite_options]
|
20
|
+
TestGroup.render_as_hash(group.groups(suite_options), suite_options: suite_options)
|
21
|
+
end
|
22
|
+
field :tests do |group, options|
|
23
|
+
suite_options = options[:suite_options]
|
24
|
+
Test.render_as_hash(group.tests(suite_options), suite_options: suite_options)
|
25
|
+
end
|
26
|
+
field :inputs do |group, options|
|
27
|
+
suite_options = options[:suite_options]
|
28
|
+
Input.render_as_hash(group.available_inputs(suite_options).values)
|
29
|
+
end
|
21
30
|
field :output_definitions, name: :outputs, extractor: HashValueExtractor
|
22
31
|
end
|
23
32
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative 'suite_option'
|
1
2
|
require_relative 'test_suite'
|
2
3
|
|
3
4
|
module Inferno
|
@@ -7,10 +8,11 @@ module Inferno
|
|
7
8
|
identifier :id
|
8
9
|
|
9
10
|
field :test_suite_id
|
11
|
+
association :suite_options, blueprint: SuiteOption
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
field :test_suite do |session, _options|
|
14
|
+
TestSuite.render_as_hash(session.test_suite, view: :full, suite_options: session.suite_options)
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
@@ -11,14 +11,22 @@ module Inferno
|
|
11
11
|
field :input_instructions
|
12
12
|
field :test_count
|
13
13
|
field :version
|
14
|
+
field :links
|
15
|
+
association :suite_options, blueprint: SuiteOption
|
14
16
|
association :presets, view: :summary, blueprint: Preset
|
15
17
|
end
|
16
18
|
|
17
19
|
view :full do
|
18
20
|
include_view :summary
|
19
|
-
|
21
|
+
field :test_groups do |suite, options|
|
22
|
+
suite_options = options[:suite_options]
|
23
|
+
TestGroup.render_as_hash(suite.groups(suite_options), suite_options: suite_options)
|
24
|
+
end
|
20
25
|
field :configuration_messages
|
21
|
-
field :
|
26
|
+
field :inputs do |suite, options|
|
27
|
+
suite_options = options[:suite_options]
|
28
|
+
Input.render_as_hash(suite.available_inputs(suite_options).values)
|
29
|
+
end
|
22
30
|
end
|
23
31
|
end
|
24
32
|
end
|
@@ -11,7 +11,7 @@ Inferno::Application.boot(:db) do
|
|
11
11
|
|
12
12
|
config_path = File.expand_path('database.yml', File.join(Dir.pwd, 'config'))
|
13
13
|
config_contents = ERB.new(File.read(config_path)).result
|
14
|
-
config = YAML.safe_load(config_contents)[ENV
|
14
|
+
config = YAML.safe_load(config_contents)[ENV.fetch('APP_ENV', nil)]
|
15
15
|
.merge(logger: Inferno::Application['logger'])
|
16
16
|
connection_attempts_remaining = ENV.fetch('MAX_DB_CONNECTION_ATTEMPTS', '10').to_i
|
17
17
|
connection_retry_delay = ENV.fetch('DB_CONNECTION_RETRY_DELAY', '5').to_i
|
@@ -4,7 +4,7 @@ Inferno::Application.boot(:presets) do
|
|
4
4
|
init do
|
5
5
|
use :suites
|
6
6
|
|
7
|
-
files_to_load = Dir.glob(
|
7
|
+
files_to_load = Dir.glob(['config/presets/*.json', 'config/presets/*.json.erb'])
|
8
8
|
files_to_load.map! { |path| File.realpath(path) }
|
9
9
|
presets_repo = Inferno::Repositories::Presets.new
|
10
10
|
|
data/lib/inferno/config/boot.rb
CHANGED
data/lib/inferno/db/schema.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'request_storage'
|
2
|
+
require_relative 'tcp_exception_handler'
|
2
3
|
|
3
4
|
module Inferno
|
4
5
|
module DSL
|
@@ -40,6 +41,7 @@ module Inferno
|
|
40
41
|
klass.extend ClassMethods
|
41
42
|
klass.extend Forwardable
|
42
43
|
klass.include RequestStorage
|
44
|
+
klass.include TCPExceptionHandler
|
43
45
|
|
44
46
|
klass.def_delegators 'self.class', :profile_url, :validator_url
|
45
47
|
end
|
@@ -73,11 +75,13 @@ module Inferno
|
|
73
75
|
# @return [Inferno::Entities::Request]
|
74
76
|
def fhir_operation(path, body: nil, client: :default, name: nil, headers: {})
|
75
77
|
store_request_and_refresh_token(fhir_client(client), name) do
|
76
|
-
|
77
|
-
|
78
|
-
|
78
|
+
tcp_exception_handler do
|
79
|
+
operation_headers = fhir_client(client).fhir_headers
|
80
|
+
operation_headers.merge!('Content-Type' => 'application/fhir+json') if body.present?
|
81
|
+
operation_headers.merge!(headers) if headers.present?
|
79
82
|
|
80
|
-
|
83
|
+
fhir_client(client).send(:post, path, body, operation_headers)
|
84
|
+
end
|
81
85
|
end
|
82
86
|
end
|
83
87
|
|
@@ -89,8 +93,10 @@ module Inferno
|
|
89
93
|
# @return [Inferno::Entities::Request]
|
90
94
|
def fhir_get_capability_statement(client: :default, name: nil)
|
91
95
|
store_request_and_refresh_token(fhir_client(client), name) do
|
92
|
-
|
93
|
-
|
96
|
+
tcp_exception_handler do
|
97
|
+
fhir_client(client).conformance_statement
|
98
|
+
fhir_client(client).reply
|
99
|
+
end
|
94
100
|
end
|
95
101
|
end
|
96
102
|
|
@@ -104,7 +110,9 @@ module Inferno
|
|
104
110
|
# @return [Inferno::Entities::Request]
|
105
111
|
def fhir_read(resource_type, id, client: :default, name: nil)
|
106
112
|
store_request_and_refresh_token(fhir_client(client), name) do
|
107
|
-
|
113
|
+
tcp_exception_handler do
|
114
|
+
fhir_client(client).read(fhir_class_from_resource_type(resource_type), id)
|
115
|
+
end
|
108
116
|
end
|
109
117
|
end
|
110
118
|
|
@@ -126,8 +134,10 @@ module Inferno
|
|
126
134
|
end
|
127
135
|
|
128
136
|
store_request_and_refresh_token(fhir_client(client), name) do
|
129
|
-
|
130
|
-
|
137
|
+
tcp_exception_handler do
|
138
|
+
fhir_client(client)
|
139
|
+
.search(fhir_class_from_resource_type(resource_type), { search: search })
|
140
|
+
end
|
131
141
|
end
|
132
142
|
end
|
133
143
|
|
@@ -141,7 +151,9 @@ module Inferno
|
|
141
151
|
# @return [Inferno::Entities::Request]
|
142
152
|
def fhir_delete(resource_type, id, client: :default, name: nil)
|
143
153
|
store_request('outgoing', name) do
|
144
|
-
|
154
|
+
tcp_exception_handler do
|
155
|
+
fhir_client(client).destroy(fhir_class_from_resource_type(resource_type), id)
|
156
|
+
end
|
145
157
|
end
|
146
158
|
end
|
147
159
|
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require_relative '../ext/fhir_models'
|
2
|
-
|
3
2
|
module Inferno
|
4
3
|
module DSL
|
5
4
|
# This module contains the methods needed to configure a validator to
|
@@ -39,13 +38,16 @@ module Inferno
|
|
39
38
|
# Find a particular validator. Looks through a runnable's parents up to
|
40
39
|
# the suite to find a validator with a particular name
|
41
40
|
def find_validator(validator_name)
|
42
|
-
self.class.find_validator(validator_name)
|
41
|
+
self.class.find_validator(validator_name, suite_options)
|
43
42
|
end
|
44
43
|
|
45
44
|
class Validator
|
45
|
+
attr_reader :requirements
|
46
|
+
|
46
47
|
# @private
|
47
|
-
def initialize(&block)
|
48
|
+
def initialize(requirements = nil, &block)
|
48
49
|
instance_eval(&block)
|
50
|
+
@requirements = requirements
|
49
51
|
end
|
50
52
|
|
51
53
|
# @private
|
@@ -115,7 +117,7 @@ module Inferno
|
|
115
117
|
|
116
118
|
outcome = FHIR::OperationOutcome.new(JSON.parse(validate(resource, profile_url)))
|
117
119
|
|
118
|
-
message_hashes = outcome.issue&.map { |issue| message_hash_from_issue(issue) } || []
|
120
|
+
message_hashes = outcome.issue&.map { |issue| message_hash_from_issue(issue, resource) } || []
|
119
121
|
|
120
122
|
message_hashes.concat(additional_validation_messages(resource, profile_url))
|
121
123
|
|
@@ -132,10 +134,10 @@ module Inferno
|
|
132
134
|
end
|
133
135
|
|
134
136
|
# @private
|
135
|
-
def message_hash_from_issue(issue)
|
137
|
+
def message_hash_from_issue(issue, resource)
|
136
138
|
{
|
137
139
|
type: issue_severity(issue),
|
138
|
-
message: issue_message(issue)
|
140
|
+
message: issue_message(issue, resource)
|
139
141
|
}
|
140
142
|
end
|
141
143
|
|
@@ -152,14 +154,16 @@ module Inferno
|
|
152
154
|
end
|
153
155
|
|
154
156
|
# @private
|
155
|
-
def issue_message(issue)
|
157
|
+
def issue_message(issue, resource)
|
156
158
|
location = if issue.respond_to?(:expression)
|
157
159
|
issue.expression&.join(', ')
|
158
160
|
else
|
159
161
|
issue.location&.join(', ')
|
160
162
|
end
|
161
163
|
|
162
|
-
"#{
|
164
|
+
location_prefix = resource.id ? "#{resource.resourceType}/#{resource.id}" : resource.resourceType
|
165
|
+
|
166
|
+
"#{location_prefix}: #{location}: #{issue&.details&.text}"
|
163
167
|
end
|
164
168
|
|
165
169
|
# Post a resource to the validation service for validating.
|
@@ -198,14 +202,33 @@ module Inferno
|
|
198
202
|
#
|
199
203
|
# @param name [Symbol] the name of the validator, only needed if you are
|
200
204
|
# using multiple validators
|
201
|
-
|
202
|
-
|
205
|
+
# @param required_suite_options [Hash] suite options that must be
|
206
|
+
# selected in order to use this validator
|
207
|
+
def validator(name = :default, required_suite_options: nil, &block)
|
208
|
+
current_validators = fhir_validators[name] || []
|
209
|
+
|
210
|
+
new_validator = Inferno::DSL::FHIRValidation::Validator.new(required_suite_options, &block)
|
211
|
+
|
212
|
+
current_validators.reject! { |validator| validator.requirements == required_suite_options }
|
213
|
+
current_validators << new_validator
|
214
|
+
|
215
|
+
fhir_validators[name] = current_validators
|
203
216
|
end
|
204
217
|
|
205
218
|
# Find a particular validator. Looks through a runnable's parents up to
|
206
219
|
# the suite to find a validator with a particular name
|
207
|
-
def find_validator(validator_name)
|
208
|
-
|
220
|
+
def find_validator(validator_name, selected_suite_options = nil)
|
221
|
+
validators = fhir_validators[validator_name] ||
|
222
|
+
Array.wrap(parent&.find_validator(validator_name, selected_suite_options))
|
223
|
+
|
224
|
+
validator =
|
225
|
+
if selected_suite_options.present?
|
226
|
+
validators.find do |possible_validator|
|
227
|
+
possible_validator.requirements.nil? || selected_suite_options >= possible_validator.requirements
|
228
|
+
end
|
229
|
+
else
|
230
|
+
validators.first
|
231
|
+
end
|
209
232
|
|
210
233
|
raise Exceptions::ValidatorNotFoundException, validator_name if validator.nil?
|
211
234
|
|
@@ -1,4 +1,7 @@
|
|
1
|
+
require 'faraday_middleware'
|
2
|
+
|
1
3
|
require_relative 'request_storage'
|
4
|
+
require_relative 'tcp_exception_handler'
|
2
5
|
|
3
6
|
module Inferno
|
4
7
|
module DSL
|
@@ -31,6 +34,7 @@ module Inferno
|
|
31
34
|
def self.included(klass)
|
32
35
|
klass.extend ClassMethods
|
33
36
|
klass.include RequestStorage
|
37
|
+
klass.include TCPExceptionHandler
|
34
38
|
end
|
35
39
|
|
36
40
|
# Return a previously defined HTTP client
|
@@ -44,7 +48,9 @@ module Inferno
|
|
44
48
|
definition = self.class.http_client_definitions[client]
|
45
49
|
return nil if definition.nil?
|
46
50
|
|
47
|
-
|
51
|
+
tcp_exception_handler do
|
52
|
+
http_clients[client] = HTTPClientBuilder.new.build(self, definition)
|
53
|
+
end
|
48
54
|
end
|
49
55
|
|
50
56
|
# @private
|
@@ -65,18 +71,28 @@ module Inferno
|
|
65
71
|
# @return [Inferno::Entities::Request]
|
66
72
|
def get(url = '', client: :default, name: nil, **options)
|
67
73
|
store_request('outgoing', name) do
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
client
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
74
|
+
tcp_exception_handler do
|
75
|
+
client = http_client(client)
|
76
|
+
|
77
|
+
if client
|
78
|
+
client.get(url, nil, options[:headers])
|
79
|
+
elsif url.match?(%r{\Ahttps?://})
|
80
|
+
connection.get(url, nil, options[:headers])
|
81
|
+
else
|
82
|
+
raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
|
83
|
+
end
|
76
84
|
end
|
77
85
|
end
|
78
86
|
end
|
79
87
|
|
88
|
+
# @private
|
89
|
+
def connection
|
90
|
+
Faraday.new do |f|
|
91
|
+
f.request :url_encoded
|
92
|
+
f.use FaradayMiddleware::FollowRedirects
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
80
96
|
# Perform an HTTP POST request
|
81
97
|
#
|
82
98
|
# @param url [String] if this request is using a defined client, this will
|
@@ -91,14 +107,16 @@ module Inferno
|
|
91
107
|
# @return [Inferno::Entities::Request]
|
92
108
|
def post(url = '', body: nil, client: :default, name: nil, **options)
|
93
109
|
store_request('outgoing', name) do
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
client
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
110
|
+
tcp_exception_handler do
|
111
|
+
client = http_client(client)
|
112
|
+
|
113
|
+
if client
|
114
|
+
client.post(url, body, options[:headers])
|
115
|
+
elsif url.match?(%r{\Ahttps?://})
|
116
|
+
connection.post(url, body, options[:headers])
|
117
|
+
else
|
118
|
+
raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
|
119
|
+
end
|
102
120
|
end
|
103
121
|
end
|
104
122
|
end
|
@@ -114,14 +132,16 @@ module Inferno
|
|
114
132
|
# @return [Inferno::Entities::Request]
|
115
133
|
def delete(url = '', client: :default, name: :nil, **options)
|
116
134
|
store_request('outgoing', name) do
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
client
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
135
|
+
tcp_exception_handler do
|
136
|
+
client = http_client(client)
|
137
|
+
|
138
|
+
if client
|
139
|
+
client.delete(url, nil, options[:headers])
|
140
|
+
elsif url.match?(%r{\Ahttps?://})
|
141
|
+
connection.delete(url, nil, options[:headers])
|
142
|
+
else
|
143
|
+
raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
|
144
|
+
end
|
125
145
|
end
|
126
146
|
end
|
127
147
|
end
|
@@ -151,17 +171,19 @@ module Inferno
|
|
151
171
|
end
|
152
172
|
|
153
173
|
store_request('outgoing', name) do
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
174
|
+
tcp_exception_handler do
|
175
|
+
client = http_client(client)
|
176
|
+
|
177
|
+
if client
|
178
|
+
response = client.get(url, nil, options[:headers]) { |req| req.options.on_data = collector }
|
179
|
+
elsif url.match?(%r{\Ahttps?://})
|
180
|
+
response = connection.get(url, nil, options[:headers]) { |req| req.options.on_data = collector }
|
181
|
+
else
|
182
|
+
raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
|
183
|
+
end
|
184
|
+
response.env.body = streamed.join
|
185
|
+
response
|
162
186
|
end
|
163
|
-
response.env.body = streamed.join
|
164
|
-
response
|
165
187
|
end
|
166
188
|
end
|
167
189
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'faraday_middleware'
|
2
|
+
|
1
3
|
module Inferno
|
2
4
|
module DSL
|
3
5
|
# This module contains the HTTP DSL available to test writers.
|
@@ -12,7 +14,10 @@ module Inferno
|
|
12
14
|
params = { url: url }
|
13
15
|
params.merge!(headers: headers) if headers
|
14
16
|
|
15
|
-
Faraday.new(params)
|
17
|
+
Faraday.new(params) do |f|
|
18
|
+
f.request :url_encoded
|
19
|
+
f.use FaradayMiddleware::FollowRedirects
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
# Define the base url for an HTTP client. A string or symbol can be
|