inferno_core 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
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