inferno_core 0.0.6 → 0.0.7

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/bin/inferno +7 -0
  3. data/lib/inferno/apps/cli/console.rb +12 -0
  4. data/lib/inferno/apps/cli/main.rb +18 -0
  5. data/lib/inferno/apps/cli/migration.rb +14 -0
  6. data/lib/inferno/apps/cli.rb +8 -0
  7. data/lib/inferno/config/application.rb +3 -0
  8. data/lib/inferno/config/boot/db.rb +1 -9
  9. data/lib/inferno/config/boot/logging.rb +2 -0
  10. data/lib/inferno/dsl/assertions.rb +66 -1
  11. data/lib/inferno/dsl/configurable.rb +1 -1
  12. data/lib/inferno/dsl/fhir_client.rb +4 -4
  13. data/lib/inferno/dsl/fhir_client_builder.rb +3 -3
  14. data/lib/inferno/dsl/fhir_validation.rb +1 -1
  15. data/lib/inferno/dsl/http_client.rb +4 -4
  16. data/lib/inferno/dsl/http_client_builder.rb +3 -3
  17. data/lib/inferno/dsl/request_storage.rb +8 -8
  18. data/lib/inferno/dsl/results.rb +1 -1
  19. data/lib/inferno/dsl/resume_test_route.rb +9 -9
  20. data/lib/inferno/dsl/runnable.rb +36 -18
  21. data/lib/inferno/entities/header.rb +14 -7
  22. data/lib/inferno/entities/message.rb +16 -8
  23. data/lib/inferno/entities/request.rb +32 -19
  24. data/lib/inferno/entities/result.rb +36 -29
  25. data/lib/inferno/entities/session_data.rb +12 -6
  26. data/lib/inferno/entities/test.rb +13 -0
  27. data/lib/inferno/entities/test_run.rb +29 -6
  28. data/lib/inferno/entities/test_session.rb +16 -10
  29. data/lib/inferno/public/bundle.js +1 -1
  30. data/lib/inferno/repositories/in_memory_repository.rb +1 -1
  31. data/lib/inferno/repositories/results.rb +1 -1
  32. data/lib/inferno/spec_support.rb +1 -1
  33. data/lib/inferno/test_runner.rb +1 -1
  34. data/lib/inferno/utils/markdown_formatter.rb +1 -1
  35. data/lib/inferno/utils/middleware/request_logger.rb +1 -1
  36. data/lib/inferno/utils/migration.rb +17 -0
  37. data/lib/inferno/version.rb +1 -1
  38. data/lib/inferno.rb +0 -4
  39. metadata +37 -4
  40. data/bin/inferno-console +0 -8
@@ -16,7 +16,7 @@ module Inferno
16
16
  # - add the subclass to the relevant repository when it is created
17
17
  # - copy the class instance variables from the superclass
18
18
  # - add a hook to the subclass so that its subclasses do the same
19
- # @api private
19
+ # @private
20
20
  def self.extended(extending_class)
21
21
  super
22
22
  extending_class.extend Configurable
@@ -41,7 +41,7 @@ module Inferno
41
41
  # classes. When inheriting from a Runnable class, these class instance
42
42
  # variables need to be copied. Any child Runnable classes will themselves
43
43
  # need to be subclassed so that their parent can be updated.
44
- # @api private
44
+ # @private
45
45
  def copy_instance_variables(subclass)
46
46
  instance_variables.each do |variable|
47
47
  next if [:@id, :@groups, :@tests, :@parent, :@children, :@test_count, :@config].include?(variable)
@@ -63,12 +63,13 @@ module Inferno
63
63
  end
64
64
  end
65
65
 
66
- # @api private
66
+ # @private
67
67
  def add_self_to_repository
68
68
  repository.insert(self)
69
69
  end
70
70
 
71
71
  # An instance of the repository for the class using this module
72
+ # @private
72
73
  def repository
73
74
  nil
74
75
  end
@@ -76,7 +77,7 @@ module Inferno
76
77
  # This method defines a child entity. Classes using this module should
77
78
  # alias the method name they wish to use to define child entities to this
78
79
  # method.
79
- # @api private
80
+ # @private
80
81
  def define_child(*args, &block)
81
82
  hash_args = process_args(args)
82
83
 
@@ -96,7 +97,7 @@ module Inferno
96
97
  klass
97
98
  end
98
99
 
99
- # @api private
100
+ # @private
100
101
  def process_args(args)
101
102
  hash_args =
102
103
  if args[0].is_a? Hash
@@ -112,13 +113,13 @@ module Inferno
112
113
  hash_args
113
114
  end
114
115
 
115
- # @api private
116
+ # @private
116
117
  def child_metadata(metadata = nil)
117
118
  @child_metadata = metadata if metadata
118
119
  @child_metadata
119
120
  end
120
121
 
121
- # @api private
122
+ # @private
122
123
  def create_child_class(hash_args)
123
124
  superclass_id = hash_args.delete :from
124
125
 
@@ -131,7 +132,7 @@ module Inferno
131
132
  Class.new(superclass)
132
133
  end
133
134
 
134
- # @api private
135
+ # @private
135
136
  def configure_child_class(klass, hash_args) # rubocop:disable Metrics/CyclomaticComplexity
136
137
  inputs.each do |name|
137
138
  next if klass.inputs.any? { |klass_input_name| klass_input_name == name }
@@ -177,11 +178,15 @@ module Inferno
177
178
  end
178
179
  end
179
180
 
180
- # @api private
181
+ # @private
181
182
  def handle_child_definition_block(klass, &block)
182
183
  klass.class_eval(&block) if block_given?
183
184
  end
184
185
 
186
+ # Set/Get a runnable's id
187
+ #
188
+ # @param new_id [String,Symbol]
189
+ # @return [String,Symbol] the id
185
190
  def id(new_id = nil)
186
191
  return @id if new_id.nil? && @id.present?
187
192
 
@@ -197,12 +202,20 @@ module Inferno
197
202
  @id = "#{prefix}#{@base_id}"
198
203
  end
199
204
 
205
+ # Set/Get a runnable's title
206
+ #
207
+ # @param new_title [String]
208
+ # @return [String] the title
200
209
  def title(new_title = nil)
201
210
  return @title if new_title.nil?
202
211
 
203
212
  @title = new_title
204
213
  end
205
214
 
215
+ # Set/Get a runnable's description
216
+ #
217
+ # @param new_description [String]
218
+ # @return [String] the description
206
219
  def description(new_description = nil)
207
220
  return @description if new_description.nil?
208
221
 
@@ -239,7 +252,7 @@ module Inferno
239
252
 
240
253
  # Define outputs
241
254
  #
242
- # @param output_lists [Symbol]
255
+ # @param output_list [Symbol]
243
256
  # @return [void]
244
257
  # @example
245
258
  # output :patient_id, :bearer_token
@@ -250,30 +263,32 @@ module Inferno
250
263
  end
251
264
  end
252
265
 
253
- # @api private
266
+ # @private
254
267
  def default_id
255
268
  to_s
256
269
  end
257
270
 
258
- # @api private
271
+ # @private
259
272
  def inputs
260
273
  @inputs ||= []
261
274
  end
262
275
 
276
+ # @private
263
277
  def input_definitions
264
278
  config.inputs.slice(*inputs)
265
279
  end
266
280
 
281
+ # @private
267
282
  def output_definitions
268
283
  config.outputs.slice(*outputs)
269
284
  end
270
285
 
271
- # @api private
286
+ # @private
272
287
  def outputs
273
288
  @outputs ||= []
274
289
  end
275
290
 
276
- # @api private
291
+ # @private
277
292
  def child_types
278
293
  return [] if ancestors.include? Inferno::Entities::Test
279
294
  return [:groups] if ancestors.include? Inferno::Entities::TestSuite
@@ -281,7 +296,7 @@ module Inferno
281
296
  [:groups, :tests]
282
297
  end
283
298
 
284
- # @api private
299
+ # @private
285
300
  def children
286
301
  @children ||= []
287
302
  end
@@ -292,7 +307,7 @@ module Inferno
292
307
  @validator_url = url
293
308
  end
294
309
 
295
- # @api private
310
+ # @private
296
311
  def suite
297
312
  return self if ancestors.include? Inferno::Entities::TestSuite
298
313
 
@@ -329,8 +344,8 @@ module Inferno
329
344
  # @yield This method takes a block which must return the identifier
330
345
  # defined when a test was set to wait for the test run that hit this
331
346
  # route. The block has access to the `request` method which returns a
332
- # {Inferno::DSL::Request} object with the information for the incoming
333
- # request.
347
+ # {Inferno::Entities::Request} object with the information for the
348
+ # incoming request.
334
349
  def resume_test_route(method, path, &block)
335
350
  route_class = Class.new(ResumeTestRoute) do
336
351
  define_method(:test_run_identifier, &block)
@@ -357,10 +372,12 @@ module Inferno
357
372
  Inferno.routes << { method: method, path: path, handler: handler, suite: suite }
358
373
  end
359
374
 
375
+ # @private
360
376
  def test_count
361
377
  @test_count ||= children&.reduce(0) { |sum, child| sum + child.test_count } || 0
362
378
  end
363
379
 
380
+ # @private
364
381
  def required_inputs(prior_outputs = [])
365
382
  required_inputs = inputs.select do |input|
366
383
  !input_definitions[input][:optional] && !prior_outputs.include?(input)
@@ -371,6 +388,7 @@ module Inferno
371
388
  (required_inputs + children_required_inputs).flatten.uniq
372
389
  end
373
390
 
391
+ # @private
374
392
  def missing_inputs(submitted_inputs)
375
393
  submitted_inputs = [] if submitted_inputs.nil?
376
394
 
@@ -2,13 +2,20 @@ module Inferno
2
2
  module Entities
3
3
  # A `Header` represents an HTTP request/response header
4
4
  #
5
- # @attr_accessor [String] id of the header
6
- # @attr_accessor [String] request_id index of the HTTP request
7
- # @attr_accessor [String] name header name
8
- # @attr_accessor [String] value header value
9
- # @attr_accessor [String] type request/response
10
- # @attr_accessor [Time] created_at
11
- # @attr_accessor [Time] updated_at
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
- # @attr_accessor [String] id of the message
6
- # @attr_accessor [String] index of the message. Used for ordering.
7
- # @attr_accessor [String] result_id
8
- # @attr_accessor [Inferno::Entities::Result] result
9
- # @attr_accessor [String] type
10
- # @attr_accessor [String] message
11
- # @attr_accessor [Time] created_at
12
- # @attr_accessor [Time] updated_at
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
- # @attr_accessor [String] id of the request
6
- # @attr_accessor [String] index of the request. Used for ordering.
7
- # @attr_accessor [String] verb http verb
8
- # @attr_accessor [String] url request url
9
- # @attr_accessor [String] direction incoming/outgoing
10
- # @attr_accessor [String] name name for the request
11
- # @attr_accessor [String] status http response status code
12
- # @attr_accessor [String] request_body body of the http request
13
- # @attr_accessor [String] response_body body of the http response
14
- # @attr_accessor [Array<Inferno::Entities::Header>] headers http
15
- # request/response headers
16
- # @attr_accessor [String] result_id id of the result for this request
17
- # @attr_accessor [String] test_session_id id of the test session for this request
18
- # @attr_accessor [Time] created_at creation timestamp
19
- # @attr_accessor [Time] updated_at update timestamp
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,
@@ -94,7 +107,7 @@ module Inferno
94
107
  }
95
108
  end
96
109
 
97
- # @api private
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
- # @api private
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
- # @api private
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
- # @api private
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
- # @attr_accessor [String] id id of the session
7
- # @attr_accessor [Time] created_at creation timestamp
8
- # @attr_accessor [Time] updated_at update timestamp
9
- # @attr_accessor [String] reference_type type of entity this result belongs
10
- # to (`Test`, `TestGroup`, or `TestSuite`)
11
- # @attr_accessor [String, nil] test_id id of the `Test` this result belongs
12
- # to
13
- # @attr_accessor [Test, nil] test the `Test` this result belongs to
14
- # @attr_accessor [String, nil] test_group_id id of the `TestGroup` this
15
- # result belongs to
16
- # @attr_accessor [TestGroup, nil] test_group the `TestGroup` this result
17
- # belongs to
18
- # @attr_accessor [String, nil] test_suite_id id of the `TestSuite` this
19
- # result belongs to
20
- # @attr_accessor [TestSuite, nil] test_suite the `TestSuite` this result
21
- # belongs to
22
- # @attr_accessor [String] result the result (`pass`, `fail`, `skip`, `omit`,
23
- # `error`, `running`, `wait`, `cancel`)
24
- # @attr_accessor [String] result_message summary message for this result
25
- # @attr_accessor [String] test_run_id the `TestRun` this result belongs to
26
- # @attr_accessor [String] test_session_id the `TestSession` this result
27
- # belongs to
28
- # @attr_accessor [Array<Inferno::Entities::Message>] messages additional
29
- # messages for this result
30
- # @attr_accessor [Array<Inferno::Entities::Request>] request_summaries
31
- # summaries of the requests associated with this result
32
- # @attr_accessor [String] input_json JSON string of the inputs used for this
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
- # @attr_accessor [String] output_json JSON string of the outputs created by
35
- # this result
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
- # @attr_accessor [String] id of the test input
7
- # @attr_accessor [String] name
8
- # @attr_accessor [String] value
9
- # @attr_accessor [String] test_session_id
10
- # @attr_accessor [Time] created_at
11
- # @attr_accessor [Time] updated_at
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
 
@@ -15,12 +15,14 @@ module Inferno
15
15
  attr_accessor :result_message
16
16
  attr_reader :test_session_id, :scratch
17
17
 
18
+ # @private
18
19
  def initialize(**params)
19
20
  params[:inputs]&.each { |key, value| instance_variable_set("@#{key}", value) }
20
21
  @scratch = params[:scratch]
21
22
  @test_session_id = params[:test_session_id]
22
23
  end
23
24
 
25
+ # @private
24
26
  def messages
25
27
  @messages ||= []
26
28
  end
@@ -100,6 +102,7 @@ module Inferno
100
102
  add_message('warning', e.message)
101
103
  end
102
104
 
105
+ # @private
103
106
  def method_missing(name, *args, &block)
104
107
  parent_instance = self.class.parent&.new
105
108
  if parent_instance.respond_to?(name)
@@ -109,6 +112,7 @@ module Inferno
109
112
  end
110
113
  end
111
114
 
115
+ # @private
112
116
  def respond_to_missing?(name, _include_private = false)
113
117
  self.class.parent&.new&.respond_to?(name)
114
118
  end
@@ -155,6 +159,10 @@ module Inferno
155
159
  Inferno::Repositories::Tests.new
156
160
  end
157
161
 
162
+ # Set/Get the block that is executed when a Test is run
163
+ #
164
+ # @param block [Proc]
165
+ # @return [Proc] the block that is executed when a Test is run
158
166
  def block(&block)
159
167
  return @block unless block_given?
160
168
 
@@ -163,6 +171,7 @@ module Inferno
163
171
 
164
172
  alias run block
165
173
 
174
+ # @private
166
175
  def default_id
167
176
  return name if name.present?
168
177
 
@@ -170,16 +179,19 @@ module Inferno
170
179
  "Test#{suffix}"
171
180
  end
172
181
 
182
+ # @private
173
183
  def reference_hash
174
184
  {
175
185
  test_id: id
176
186
  }
177
187
  end
178
188
 
189
+ # @private
179
190
  def test_count
180
191
  1
181
192
  end
182
193
 
194
+ # @private
183
195
  def method_missing(name, *args, &block)
184
196
  parent_instance = parent&.new
185
197
  if parent_instance.respond_to?(name)
@@ -189,6 +201,7 @@ module Inferno
189
201
  end
190
202
  end
191
203
 
204
+ # @private
192
205
  def respond_to_missing?(name, _include_private = false)
193
206
  parent&.new&.respond_to?(name)
194
207
  end
@@ -2,12 +2,35 @@ module Inferno
2
2
  module Entities
3
3
  # A `TestRun` represents a request to execute an executable set of tests.
4
4
  #
5
- # @attr_accessor [String] id of the test input
6
- # @attr_accessor [String] test_session_id
7
- # @attr_accessor [String] status
8
- # @attr_accessor [String] test_suite_id
9
- # @attr_accessor [String] test_group_id
10
- # @attr_accessor [String] test_id
5
+ # @!attribute id
6
+ # @return [String] id of the test run
7
+ # @!attribute created_at
8
+ # @return [Time] creation timestamp
9
+ # @!attribute updated_at
10
+ # @return [Time] update timestamp
11
+ # @!attribute test_session_id
12
+ # @return [String]
13
+ # @!attribute status
14
+ # @return [String]
15
+ # @!attribute test_id
16
+ # @return [String, nil] id of the `Test` this result belongs to
17
+ # @!attribute test
18
+ # @return [Test, nil] the `Test` this result belongs to
19
+ # @!attribute test_group_id
20
+ # @return [String, nil] id of the `TestGroup` this result belongs to
21
+ # @!attribute test_group
22
+ # @return [TestGroup, nil] the `TestGroup` this result belongs to
23
+ # @!attribute test_suite_id
24
+ # @return [String, nil] id of the `TestSuite` this result belongs to
25
+ # @!attribute test_suite
26
+ # @return [TestSuite, nil] the `TestSuite` this result belongs to
27
+ # @!attribute inputs
28
+ # @return [Array<Hash>]
29
+ # @!attribute results
30
+ # @return [Array<Inferno::Entities::Result>]
31
+ # @!attribute identifier
32
+ # @return [String, nil] identfier for a waiting `TestRun`
33
+ # @!attribute wait_timeout
11
34
  class TestRun < Entity
12
35
  STATUS_OPTIONS = ['queued', 'running', 'waiting', 'done'].freeze
13
36
  ATTRIBUTES = [
@@ -2,17 +2,23 @@ module Inferno
2
2
  module Entities
3
3
  # A `TestSession` represents an individual testing session.
4
4
  #
5
- # @attr_accessor [String] id id of the session
6
- # @attr_accessor [Time] created_at creation timestamp
7
- # @attr_accessor [Time] updated_at update timestamp
8
- # @attr_accessor [String] test_suite_id id of the `TestSuite` being run in
9
- # this session
10
- # @attr_accessor [Inferno::Entities::TestSuite] test_suite the `TestSuite` being run in
11
- # this session
12
- # @attr_accessor [Array<Inferno::Entities::TestRun>] test_runs the `TestRuns`
5
+ # @!attribute id
6
+ # @return [String] id of the session
7
+ # @!attribute created_at
8
+ # @return [Time] creation timestamp
9
+ # @!attribute updated_at
10
+ # @return [Time] update timestamp
11
+ # @!attribute test_suite_id
12
+ # @return [String] id of the `TestSuite` being run in this session
13
+ # @!attribute test_suite
14
+ # @return [Inferno::Entities::TestSuite] the `TestSuite` being run in this
15
+ # session
16
+ # @!attribute test_runs
17
+ # @return [Array<Inferno::Entities::TestRun>] the `TestRuns` associated
18
+ # with this session
19
+ # @!attribute results
20
+ # @return [Array<Inferno::Entities::TestResult>] the `TestResults`
13
21
  # associated with this session
14
- # @attr_accessor [Array<Inferno::Entities::TestResult>] results the
15
- # `TestResults` associated with this session
16
22
  class TestSession < Entity
17
23
  ATTRIBUTES = [:id, :created_at, :updated_at, :test_suite_id, :test_suite, :test_runs, :results].freeze
18
24