inferno_core 0.0.5 → 0.0.8.pre2
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/bin/inferno +7 -0
- data/lib/inferno/apps/cli/console.rb +12 -0
- data/lib/inferno/apps/cli/main.rb +18 -0
- data/lib/inferno/apps/cli/migration.rb +14 -0
- data/lib/inferno/apps/cli.rb +8 -0
- data/lib/inferno/apps/web/controllers/test_runs/create.rb +15 -2
- data/lib/inferno/apps/web/index.html.erb +1 -0
- data/lib/inferno/apps/web/serializers/hash_value_extractor.rb +11 -0
- data/lib/inferno/apps/web/serializers/test.rb +3 -4
- data/lib/inferno/apps/web/serializers/test_group.rb +4 -6
- data/lib/inferno/config/application.rb +4 -0
- data/lib/inferno/config/boot/db.rb +1 -9
- data/lib/inferno/config/boot/logging.rb +2 -0
- data/lib/inferno/config/boot/suites.rb +4 -6
- data/lib/inferno/db/migrations/001_create_initial_structure.rb +1 -1
- data/lib/inferno/db/schema.rb +1 -1
- data/lib/inferno/dsl/assertions.rb +85 -0
- data/lib/inferno/dsl/configurable.rb +126 -0
- data/lib/inferno/dsl/fhir_client.rb +22 -16
- data/lib/inferno/dsl/fhir_client_builder.rb +3 -3
- data/lib/inferno/dsl/fhir_validation.rb +105 -1
- data/lib/inferno/dsl/http_client.rb +14 -12
- data/lib/inferno/dsl/http_client_builder.rb +3 -3
- data/lib/inferno/dsl/request_storage.rb +26 -17
- data/lib/inferno/dsl/results.rb +1 -1
- data/lib/inferno/dsl/resume_test_route.rb +10 -10
- data/lib/inferno/dsl/runnable.rb +104 -38
- data/lib/inferno/entities/header.rb +14 -7
- data/lib/inferno/entities/message.rb +16 -8
- data/lib/inferno/entities/request.rb +34 -21
- data/lib/inferno/entities/result.rb +36 -29
- data/lib/inferno/entities/session_data.rb +12 -6
- data/lib/inferno/entities/test.rb +29 -2
- data/lib/inferno/entities/test_group.rb +8 -0
- data/lib/inferno/entities/test_run.rb +29 -6
- data/lib/inferno/entities/test_session.rb +16 -10
- data/lib/inferno/exceptions.rb +12 -0
- data/lib/inferno/public/217.bundle.js +1 -1
- data/lib/inferno/public/bundle.js +154 -1
- data/lib/inferno/public/bundle.js.LICENSE.txt +15 -0
- data/lib/inferno/repositories/in_memory_repository.rb +1 -1
- data/lib/inferno/repositories/results.rb +1 -1
- data/lib/inferno/repositories/test_runs.rb +15 -0
- data/lib/inferno/spec_support.rb +1 -1
- data/lib/inferno/test_runner.rb +21 -19
- data/lib/inferno/utils/markdown_formatter.rb +15 -0
- data/lib/inferno/utils/middleware/request_logger.rb +9 -3
- data/lib/inferno/utils/migration.rb +17 -0
- data/lib/inferno/version.rb +1 -1
- data/lib/inferno.rb +0 -4
- data/spec/factories/request.rb +14 -7
- metadata +46 -10
- data/bin/inferno-console +0 -8
data/lib/inferno/dsl/runnable.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
require_relative 'configurable'
|
1
2
|
require_relative 'resume_test_route'
|
3
|
+
require_relative '../utils/markdown_formatter'
|
2
4
|
|
3
5
|
module Inferno
|
4
6
|
module DSL
|
@@ -7,14 +9,17 @@ module Inferno
|
|
7
9
|
module Runnable
|
8
10
|
attr_accessor :parent
|
9
11
|
|
12
|
+
include Inferno::Utils::MarkdownFormatter
|
13
|
+
|
10
14
|
# When a class (e.g. TestSuite/TestGroup) uses this module, set it up
|
11
15
|
# so that subclassing it works correctly.
|
12
16
|
# - add the subclass to the relevant repository when it is created
|
13
17
|
# - copy the class instance variables from the superclass
|
14
18
|
# - add a hook to the subclass so that its subclasses do the same
|
15
|
-
# @
|
19
|
+
# @private
|
16
20
|
def self.extended(extending_class)
|
17
21
|
super
|
22
|
+
extending_class.extend Configurable
|
18
23
|
|
19
24
|
extending_class.define_singleton_method(:inherited) do |subclass|
|
20
25
|
copy_instance_variables(subclass)
|
@@ -36,14 +41,16 @@ module Inferno
|
|
36
41
|
# classes. When inheriting from a Runnable class, these class instance
|
37
42
|
# variables need to be copied. Any child Runnable classes will themselves
|
38
43
|
# need to be subclassed so that their parent can be updated.
|
39
|
-
# @
|
44
|
+
# @private
|
40
45
|
def copy_instance_variables(subclass)
|
41
46
|
instance_variables.each do |variable|
|
42
|
-
next if [:@id, :@groups, :@tests, :@parent, :@children, :@test_count].include?(variable)
|
47
|
+
next if [:@id, :@groups, :@tests, :@parent, :@children, :@test_count, :@config].include?(variable)
|
43
48
|
|
44
49
|
subclass.instance_variable_set(variable, instance_variable_get(variable).dup)
|
45
50
|
end
|
46
51
|
|
52
|
+
subclass.config(config)
|
53
|
+
|
47
54
|
child_types.each do |child_type|
|
48
55
|
new_children = send(child_type).map do |child|
|
49
56
|
Class.new(child).tap do |subclass_child|
|
@@ -56,12 +63,13 @@ module Inferno
|
|
56
63
|
end
|
57
64
|
end
|
58
65
|
|
59
|
-
# @
|
66
|
+
# @private
|
60
67
|
def add_self_to_repository
|
61
68
|
repository.insert(self)
|
62
69
|
end
|
63
70
|
|
64
71
|
# An instance of the repository for the class using this module
|
72
|
+
# @private
|
65
73
|
def repository
|
66
74
|
nil
|
67
75
|
end
|
@@ -69,7 +77,7 @@ module Inferno
|
|
69
77
|
# This method defines a child entity. Classes using this module should
|
70
78
|
# alias the method name they wish to use to define child entities to this
|
71
79
|
# method.
|
72
|
-
# @
|
80
|
+
# @private
|
73
81
|
def define_child(*args, &block)
|
74
82
|
hash_args = process_args(args)
|
75
83
|
|
@@ -89,7 +97,7 @@ module Inferno
|
|
89
97
|
klass
|
90
98
|
end
|
91
99
|
|
92
|
-
# @
|
100
|
+
# @private
|
93
101
|
def process_args(args)
|
94
102
|
hash_args =
|
95
103
|
if args[0].is_a? Hash
|
@@ -105,13 +113,13 @@ module Inferno
|
|
105
113
|
hash_args
|
106
114
|
end
|
107
115
|
|
108
|
-
# @
|
116
|
+
# @private
|
109
117
|
def child_metadata(metadata = nil)
|
110
118
|
@child_metadata = metadata if metadata
|
111
119
|
@child_metadata
|
112
120
|
end
|
113
121
|
|
114
|
-
# @
|
122
|
+
# @private
|
115
123
|
def create_child_class(hash_args)
|
116
124
|
superclass_id = hash_args.delete :from
|
117
125
|
|
@@ -124,18 +132,18 @@ module Inferno
|
|
124
132
|
Class.new(superclass)
|
125
133
|
end
|
126
134
|
|
127
|
-
# @
|
135
|
+
# @private
|
128
136
|
def configure_child_class(klass, hash_args) # rubocop:disable Metrics/CyclomaticComplexity
|
129
|
-
inputs.each do |
|
130
|
-
next if klass.inputs.any? { |
|
137
|
+
inputs.each do |name|
|
138
|
+
next if klass.inputs.any? { |klass_input_name| klass_input_name == name }
|
131
139
|
|
132
|
-
klass.input
|
140
|
+
klass.input name
|
133
141
|
end
|
134
142
|
|
135
|
-
outputs.each do |
|
136
|
-
next if klass.outputs.include?
|
143
|
+
outputs.each do |output_name|
|
144
|
+
next if klass.outputs.include? output_name
|
137
145
|
|
138
|
-
klass.output
|
146
|
+
klass.output output_name
|
139
147
|
end
|
140
148
|
|
141
149
|
new_fhir_client_definitions = klass.instance_variable_get(:@fhir_client_definitions) || {}
|
@@ -154,8 +162,14 @@ module Inferno
|
|
154
162
|
end
|
155
163
|
klass.instance_variable_set(:@http_client_definitions, new_http_client_definitions)
|
156
164
|
|
165
|
+
klass.config(config)
|
166
|
+
|
157
167
|
hash_args.each do |key, value|
|
158
|
-
|
168
|
+
if value.is_a? Array
|
169
|
+
klass.send(key, *value)
|
170
|
+
else
|
171
|
+
klass.send(key, value)
|
172
|
+
end
|
159
173
|
end
|
160
174
|
|
161
175
|
klass.children.each do |child_class|
|
@@ -164,11 +178,15 @@ module Inferno
|
|
164
178
|
end
|
165
179
|
end
|
166
180
|
|
167
|
-
# @
|
181
|
+
# @private
|
168
182
|
def handle_child_definition_block(klass, &block)
|
169
183
|
klass.class_eval(&block) if block_given?
|
170
184
|
end
|
171
185
|
|
186
|
+
# Set/Get a runnable's id
|
187
|
+
#
|
188
|
+
# @param new_id [String,Symbol]
|
189
|
+
# @return [String,Symbol] the id
|
172
190
|
def id(new_id = nil)
|
173
191
|
return @id if new_id.nil? && @id.present?
|
174
192
|
|
@@ -184,70 +202,93 @@ module Inferno
|
|
184
202
|
@id = "#{prefix}#{@base_id}"
|
185
203
|
end
|
186
204
|
|
205
|
+
# Set/Get a runnable's title
|
206
|
+
#
|
207
|
+
# @param new_title [String]
|
208
|
+
# @return [String] the title
|
187
209
|
def title(new_title = nil)
|
188
210
|
return @title if new_title.nil?
|
189
211
|
|
190
212
|
@title = new_title
|
191
213
|
end
|
192
214
|
|
215
|
+
# Set/Get a runnable's description
|
216
|
+
#
|
217
|
+
# @param new_description [String]
|
218
|
+
# @return [String] the description
|
193
219
|
def description(new_description = nil)
|
194
220
|
return @description if new_description.nil?
|
195
221
|
|
196
|
-
@description = new_description
|
222
|
+
@description = format_markdown(new_description)
|
197
223
|
end
|
198
224
|
|
199
225
|
# Define inputs
|
200
226
|
#
|
201
|
-
# @param
|
202
|
-
# @param
|
227
|
+
# @param identifier [Symbol] identifier for the input
|
228
|
+
# @param other_identifiers [Symbol] array of symbols if specifying multiple inputs
|
203
229
|
# @param input_definition [Hash] options for input such as type, description, or title
|
204
230
|
# @option input_definition [String] :title Human readable title for input
|
205
231
|
# @option input_definition [String] :description Description for the input
|
206
232
|
# @option input_definition [String] :type text | textarea
|
207
233
|
# @option input_definition [String] :default The default value for the input
|
234
|
+
# @option input_definition [Boolean] :optional Set to true to not require input for test execution
|
208
235
|
# @return [void]
|
209
236
|
# @example
|
210
237
|
# input :patientid, title: 'Patient ID', description: 'The ID of the patient being searched for',
|
211
238
|
# default: 'default_patient_id'
|
212
239
|
# @example
|
213
|
-
# input :textarea, title: 'Textarea Input Example', type: 'textarea'
|
214
|
-
def input(
|
215
|
-
if
|
216
|
-
[
|
217
|
-
inputs
|
240
|
+
# input :textarea, title: 'Textarea Input Example', type: 'textarea', optional: true
|
241
|
+
def input(identifier, *other_identifiers, **input_definition)
|
242
|
+
if other_identifiers.present?
|
243
|
+
[identifier, *other_identifiers].compact.each do |input_identifier|
|
244
|
+
inputs << input_identifier
|
245
|
+
config.add_input(input_identifier)
|
218
246
|
end
|
219
247
|
else
|
220
|
-
|
221
|
-
|
248
|
+
inputs << identifier
|
249
|
+
config.add_input(identifier, input_definition)
|
222
250
|
end
|
223
251
|
end
|
224
252
|
|
225
253
|
# Define outputs
|
226
254
|
#
|
227
|
-
# @param
|
255
|
+
# @param output_list [Symbol]
|
228
256
|
# @return [void]
|
229
257
|
# @example
|
230
258
|
# output :patient_id, :bearer_token
|
231
|
-
def output(*
|
232
|
-
|
259
|
+
def output(*output_list)
|
260
|
+
output_list.each do |output_identifier|
|
261
|
+
outputs << output_identifier
|
262
|
+
config.add_output(output_identifier)
|
263
|
+
end
|
233
264
|
end
|
234
265
|
|
235
|
-
# @
|
266
|
+
# @private
|
236
267
|
def default_id
|
237
268
|
to_s
|
238
269
|
end
|
239
270
|
|
240
|
-
# @
|
271
|
+
# @private
|
241
272
|
def inputs
|
242
273
|
@inputs ||= []
|
243
274
|
end
|
244
275
|
|
245
|
-
# @
|
276
|
+
# @private
|
277
|
+
def input_definitions
|
278
|
+
config.inputs.slice(*inputs)
|
279
|
+
end
|
280
|
+
|
281
|
+
# @private
|
282
|
+
def output_definitions
|
283
|
+
config.outputs.slice(*outputs)
|
284
|
+
end
|
285
|
+
|
286
|
+
# @private
|
246
287
|
def outputs
|
247
288
|
@outputs ||= []
|
248
289
|
end
|
249
290
|
|
250
|
-
# @
|
291
|
+
# @private
|
251
292
|
def child_types
|
252
293
|
return [] if ancestors.include? Inferno::Entities::Test
|
253
294
|
return [:groups] if ancestors.include? Inferno::Entities::TestSuite
|
@@ -255,7 +296,7 @@ module Inferno
|
|
255
296
|
[:groups, :tests]
|
256
297
|
end
|
257
298
|
|
258
|
-
# @
|
299
|
+
# @private
|
259
300
|
def children
|
260
301
|
@children ||= []
|
261
302
|
end
|
@@ -266,7 +307,7 @@ module Inferno
|
|
266
307
|
@validator_url = url
|
267
308
|
end
|
268
309
|
|
269
|
-
# @
|
310
|
+
# @private
|
270
311
|
def suite
|
271
312
|
return self if ancestors.include? Inferno::Entities::TestSuite
|
272
313
|
|
@@ -303,8 +344,8 @@ module Inferno
|
|
303
344
|
# @yield This method takes a block which must return the identifier
|
304
345
|
# defined when a test was set to wait for the test run that hit this
|
305
346
|
# route. The block has access to the `request` method which returns a
|
306
|
-
# {Inferno::
|
307
|
-
# request.
|
347
|
+
# {Inferno::Entities::Request} object with the information for the
|
348
|
+
# incoming request.
|
308
349
|
def resume_test_route(method, path, &block)
|
309
350
|
route_class = Class.new(ResumeTestRoute) do
|
310
351
|
define_method(:test_run_identifier, &block)
|
@@ -331,9 +372,34 @@ module Inferno
|
|
331
372
|
Inferno.routes << { method: method, path: path, handler: handler, suite: suite }
|
332
373
|
end
|
333
374
|
|
375
|
+
# @private
|
334
376
|
def test_count
|
335
377
|
@test_count ||= children&.reduce(0) { |sum, child| sum + child.test_count } || 0
|
336
378
|
end
|
379
|
+
|
380
|
+
# @private
|
381
|
+
def required_inputs(prior_outputs = [])
|
382
|
+
required_inputs = inputs.select do |input|
|
383
|
+
!input_definitions[input][:optional] && !prior_outputs.include?(input)
|
384
|
+
end
|
385
|
+
required_inputs.map! { |input_identifier| input_definitions[input_identifier][:name] }
|
386
|
+
children_required_inputs = children.flat_map { |child| child.required_inputs(prior_outputs) }
|
387
|
+
prior_outputs.concat(outputs)
|
388
|
+
(required_inputs + children_required_inputs).flatten.uniq
|
389
|
+
end
|
390
|
+
|
391
|
+
# @private
|
392
|
+
def missing_inputs(submitted_inputs)
|
393
|
+
submitted_inputs = [] if submitted_inputs.nil?
|
394
|
+
|
395
|
+
required_inputs.map(&:to_s) - submitted_inputs.map { |input| input[:name] }
|
396
|
+
end
|
397
|
+
|
398
|
+
def user_runnable?
|
399
|
+
@user_runnable ||= parent.nil? ||
|
400
|
+
!parent.respond_to?(:run_as_group?) ||
|
401
|
+
(parent.user_runnable? && !parent.run_as_group?)
|
402
|
+
end
|
337
403
|
end
|
338
404
|
end
|
339
405
|
end
|
@@ -2,13 +2,20 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `Header` represents an HTTP request/response header
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
5
|
+
# @!attribute id
|
6
|
+
# @return [String] id of the header
|
7
|
+
# @!attribute request_id
|
8
|
+
# @return [String] index of the HTTP request
|
9
|
+
# @!attribute name
|
10
|
+
# @return [String] header name
|
11
|
+
# @!attribute value
|
12
|
+
# @return [String] header value
|
13
|
+
# @!attribute type
|
14
|
+
# @return [String] request/response
|
15
|
+
# @!attribute created_at
|
16
|
+
# @return [Time]
|
17
|
+
# @!attribute updated_at
|
18
|
+
# @return [Time]
|
12
19
|
class Header < Entity
|
13
20
|
ATTRIBUTES = [:id, :request_id, :name, :type, :value, :created_at, :updated_at].freeze
|
14
21
|
|
@@ -2,14 +2,22 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `Message` represents a message generated during a test.
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
5
|
+
# @!attribute id
|
6
|
+
# @return [String] id of the message
|
7
|
+
# @!attribute index
|
8
|
+
# @return [String] index of the message. Used for ordering.
|
9
|
+
# @!attribute result_id
|
10
|
+
# @return [String]
|
11
|
+
# @!attribute result
|
12
|
+
# @return [Inferno::Entities::Result]
|
13
|
+
# @!attribute type
|
14
|
+
# @return [String]
|
15
|
+
# @!attribute message
|
16
|
+
# @return [String]
|
17
|
+
# @!attribute created_at
|
18
|
+
# @return [Time]
|
19
|
+
# @!attribute updated_at
|
20
|
+
# @return [Time]
|
13
21
|
class Message < Entity
|
14
22
|
ATTRIBUTES = [:id, :index, :message, :result_id, :result, :type, :created_at, :updated_at].freeze
|
15
23
|
TYPES = ['error', 'warning', 'info'].freeze
|
@@ -2,21 +2,34 @@ module Inferno
|
|
2
2
|
module Entities
|
3
3
|
# A `Request` represents a request and response issued during a test.
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
5
|
+
# @!attribute id
|
6
|
+
# @return [String] id of the request
|
7
|
+
# @!attribute index
|
8
|
+
# @return [String] index of the request. Used for ordering.
|
9
|
+
# @!attribute verb
|
10
|
+
# @return [String] http verb
|
11
|
+
# @!attribute url
|
12
|
+
# @return [String] request url
|
13
|
+
# @!attribute direction
|
14
|
+
# @return [String] incoming/outgoing
|
15
|
+
# @!attribute name
|
16
|
+
# @return [String] name for the request
|
17
|
+
# @!attribute status
|
18
|
+
# @return [String] http response status code
|
19
|
+
# @!attribute request_body
|
20
|
+
# @return [String] body of the http request
|
21
|
+
# @!attribute response_body
|
22
|
+
# @return [String] body of the http response
|
23
|
+
# @!attribute headers
|
24
|
+
# @return [Array<Inferno::Entities::Header>] http request/response headers
|
25
|
+
# @!attribute result_id
|
26
|
+
# @return [String] id of the result for this request
|
27
|
+
# @!attribute test_session_id
|
28
|
+
# @return [String] id of the test session for this request
|
29
|
+
# @!attribute created_at
|
30
|
+
# @return [Time] creation timestamp
|
31
|
+
# @!attribute updated_at
|
32
|
+
# @return [Time] update timestamp
|
20
33
|
class Request < Entity
|
21
34
|
ATTRIBUTES = [
|
22
35
|
:id, :index, :verb, :url, :direction, :name, :status,
|
@@ -46,7 +59,7 @@ module Inferno
|
|
46
59
|
# @param name [String] the header name
|
47
60
|
# @return [Inferno::Entities::RequestHeader, nil]
|
48
61
|
def response_header(name)
|
49
|
-
response_headers.find { |header| header.name
|
62
|
+
response_headers.find { |header| header.name.casecmp(name).zero? }
|
50
63
|
end
|
51
64
|
|
52
65
|
# Find a request header
|
@@ -54,7 +67,7 @@ module Inferno
|
|
54
67
|
# @param name [String] the header name
|
55
68
|
# @return [Inferno::Entities::RequestHeader, nil]
|
56
69
|
def request_header(name)
|
57
|
-
request_headers.find { |header| header.name
|
70
|
+
request_headers.find { |header| header.name.casecmp(name).zero? }
|
58
71
|
end
|
59
72
|
|
60
73
|
# All of the request headers
|
@@ -94,7 +107,7 @@ module Inferno
|
|
94
107
|
}
|
95
108
|
end
|
96
109
|
|
97
|
-
# @
|
110
|
+
# @private
|
98
111
|
def to_hash
|
99
112
|
{
|
100
113
|
id: id,
|
@@ -122,7 +135,7 @@ module Inferno
|
|
122
135
|
end
|
123
136
|
|
124
137
|
class << self
|
125
|
-
# @
|
138
|
+
# @private
|
126
139
|
def from_rack_env(env, name: nil)
|
127
140
|
rack_request = env['router.request'].rack_request
|
128
141
|
url = "#{rack_request.base_url}#{rack_request.path}"
|
@@ -143,7 +156,7 @@ module Inferno
|
|
143
156
|
)
|
144
157
|
end
|
145
158
|
|
146
|
-
# @
|
159
|
+
# @private
|
147
160
|
def from_http_response(response, test_session_id:, direction: 'outgoing', name: nil)
|
148
161
|
request_headers =
|
149
162
|
response.env.request_headers
|
@@ -165,7 +178,7 @@ module Inferno
|
|
165
178
|
)
|
166
179
|
end
|
167
180
|
|
168
|
-
# @
|
181
|
+
# @private
|
169
182
|
def from_fhir_client_reply(reply, test_session_id:, direction: 'outgoing', name: nil)
|
170
183
|
request = reply.request
|
171
184
|
response = reply.response
|
@@ -3,36 +3,43 @@ module Inferno
|
|
3
3
|
# A `Result` represents the result of running a `Test`, `TestGroup`,
|
4
4
|
# or `TestSuite`
|
5
5
|
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# result belongs to
|
16
|
-
#
|
17
|
-
# belongs to
|
18
|
-
#
|
19
|
-
# result belongs to
|
20
|
-
#
|
21
|
-
# belongs to
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
6
|
+
# @!attribute id
|
7
|
+
# @return [String] id of the session
|
8
|
+
# @!attribute created_at
|
9
|
+
# @return [Time] creation timestamp
|
10
|
+
# @!attribute updated_at
|
11
|
+
# @return [Time] update timestamp
|
12
|
+
# @!attribute test_id
|
13
|
+
# @return [String, nil] id of the `Test` this result belongs to
|
14
|
+
# @!attribute test
|
15
|
+
# @return [Test, nil] the `Test` this result belongs to
|
16
|
+
# @!attribute test_group_id
|
17
|
+
# @return [String, nil] id of the `TestGroup` this result belongs to
|
18
|
+
# @!attribute test_group
|
19
|
+
# @return [TestGroup, nil] the `TestGroup` this result belongs to
|
20
|
+
# @!attribute test_suite_id
|
21
|
+
# @return [String, nil] id of the `TestSuite` this result belongs to
|
22
|
+
# @!attribute test_suite
|
23
|
+
# @return [TestSuite, nil] the `TestSuite` this result belongs to
|
24
|
+
# @!attribute result
|
25
|
+
# @return [String] the result (`pass`, `fail`, `skip`, `omit`, `error`,
|
26
|
+
# `running`, `wait`, `cancel`)
|
27
|
+
# @!attribute result_message
|
28
|
+
# @return [String] summary message for this result
|
29
|
+
# @!attribute test_run_id
|
30
|
+
# @return [String] the `TestRun` this result belongs to
|
31
|
+
# @!attribute test_session_id
|
32
|
+
# @return [String] the `TestSession` this result belongs to
|
33
|
+
# @!attribute messages
|
34
|
+
# @return [Array<Inferno::Entities::Message>] additional messages for this
|
33
35
|
# result
|
34
|
-
#
|
35
|
-
#
|
36
|
+
# @!attribute requests
|
37
|
+
# @return [Array<Inferno::Entities::Request>] summaries of the requests
|
38
|
+
# associated with this result
|
39
|
+
# @!attribute input_json
|
40
|
+
# @return [String] JSON string of the inputs used for this result
|
41
|
+
# @!attribute output_json
|
42
|
+
# @return [String] JSON string of the outputs created by this result
|
36
43
|
class Result < Entity
|
37
44
|
ATTRIBUTES = [
|
38
45
|
:id, :created_at, :updated_at, :test_id, :test, :test_group_id,
|
@@ -3,12 +3,18 @@ module Inferno
|
|
3
3
|
# `SessionData` represents a piece of saved state for a `TestSession`.
|
4
4
|
# These are used to store test inputs and outputs.
|
5
5
|
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
6
|
+
# @!attribute id
|
7
|
+
# @return [String] id of the test input
|
8
|
+
# @!attribute name
|
9
|
+
# @return [String]
|
10
|
+
# @!attribute value
|
11
|
+
# @return [String]
|
12
|
+
# @!attribute test_session_id
|
13
|
+
# @return [String]
|
14
|
+
# @!attribute created_at
|
15
|
+
# @return [Time]
|
16
|
+
# @!attribute updated_at
|
17
|
+
# @return [Time]
|
12
18
|
class SessionData < Entity
|
13
19
|
ATTRIBUTES = [:id, :name, :value, :test_session_id, :created_at, :updated_at].freeze
|
14
20
|
|