inferno_core 0.0.8 → 0.1.1

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/inferno/apps/web/controllers/test_runs/create.rb +2 -1
  3. data/lib/inferno/apps/web/serializers/result.rb +1 -0
  4. data/lib/inferno/apps/web/serializers/test.rb +4 -0
  5. data/lib/inferno/apps/web/serializers/test_group.rb +4 -0
  6. data/lib/inferno/apps/web/serializers/test_suite.rb +3 -0
  7. data/lib/inferno/db/migrations/001_create_initial_structure.rb +54 -53
  8. data/lib/inferno/db/migrations/002_add_wait_support.rb +2 -2
  9. data/lib/inferno/db/migrations/003_update_session_data.rb +7 -7
  10. data/lib/inferno/db/migrations/004_add_request_results_table.rb +2 -2
  11. data/lib/inferno/db/migrations/005_add_updated_at_index_to_results.rb +1 -1
  12. data/lib/inferno/db/migrations/006_remove_unused_tables.rb +38 -0
  13. data/lib/inferno/db/schema.rb +17 -43
  14. data/lib/inferno/dsl/configurable.rb +12 -5
  15. data/lib/inferno/dsl/fhir_client.rb +58 -6
  16. data/lib/inferno/dsl/fhir_client_builder.rb +16 -0
  17. data/lib/inferno/dsl/http_client.rb +62 -0
  18. data/lib/inferno/dsl/oauth_credentials.rb +119 -0
  19. data/lib/inferno/dsl/runnable.rb +87 -9
  20. data/lib/inferno/entities/has_runnable.rb +26 -0
  21. data/lib/inferno/entities/request.rb +7 -1
  22. data/lib/inferno/entities/result.rb +8 -4
  23. data/lib/inferno/entities/test_group.rb +4 -6
  24. data/lib/inferno/entities/test_run.rb +1 -18
  25. data/lib/inferno/entities/test_suite.rb +3 -4
  26. data/lib/inferno/entities.rb +1 -0
  27. data/lib/inferno/exceptions.rb +19 -0
  28. data/lib/inferno/ext/fhir_client.rb +13 -0
  29. data/lib/inferno/public/bundle.js +14 -14
  30. data/lib/inferno/repositories/session_data.rb +40 -6
  31. data/lib/inferno/result_summarizer.rb +40 -0
  32. data/lib/inferno/spec_support.rb +1 -1
  33. data/lib/inferno/test_runner.rb +13 -9
  34. data/lib/inferno/version.rb +1 -1
  35. data/spec/factories/request.rb +1 -1
  36. data/spec/factories/result.rb +2 -2
  37. data/spec/fixtures/basic_test_group.rb +1 -0
  38. metadata +7 -2
@@ -4,22 +4,33 @@ module Inferno
4
4
  def save(params)
5
5
  name = params[:name].to_s.downcase
6
6
  test_session_id = params[:test_session_id]
7
+
8
+ value = value_to_persist(params)
9
+
7
10
  db
8
11
  .insert_conflict(
9
12
  target: :id,
10
- update: { value: params[:value] }
13
+ update: { value: value }
11
14
  ).insert(
12
15
  id: "#{test_session_id}_#{name}",
13
16
  name: name,
14
- value: params[:value],
17
+ value: value,
15
18
  test_session_id: test_session_id
16
19
  )
17
20
  end
18
21
 
19
- def load(test_session_id:, name:)
20
- self.class::Model
21
- .find(test_session_id: test_session_id, name: name.to_s.downcase)
22
- &.value
22
+ def load(test_session_id:, name:, type: 'text')
23
+ raw_value =
24
+ self.class::Model
25
+ .find(test_session_id: test_session_id, name: name.to_s.downcase)
26
+ &.value
27
+
28
+ case type.to_s
29
+ when 'oauth_credentials'
30
+ DSL::OAuthCredentials.new(JSON.parse(raw_value))
31
+ else
32
+ raw_value
33
+ end
23
34
  end
24
35
 
25
36
  def get_all_from_session(test_session_id)
@@ -39,6 +50,29 @@ module Inferno
39
50
  'SessionData'
40
51
  end
41
52
 
53
+ def value_to_persist(params)
54
+ return nil if params[:value].blank?
55
+
56
+ case params[:type]&.to_s
57
+ when 'text', 'textarea', 'radio'
58
+ params[:value].to_s
59
+ when 'oauth_credentials'
60
+ credentials =
61
+ if params[:value].is_a? String
62
+ DSL::OAuthCredentials.new(JSON.parse(params[:value]))
63
+ elsif !params[:value].is_a? DSL::OAuthCredentials
64
+ raise Exceptions::BadSessionDataType.new(params[:name], DSL::OAuthCredentials, params[:value].class)
65
+ else
66
+ params[:value]
67
+ end
68
+
69
+ credentials.name = params[:name]
70
+ credentials.to_s
71
+ else
72
+ raise Exceptions::UnknownSessionDataType, params
73
+ end
74
+ end
75
+
42
76
  class Model < Sequel::Model(db)
43
77
  many_to_one :test_session, class: 'Inferno::Repositories::TestSessions::Model', key: :test_session_id
44
78
  end
@@ -0,0 +1,40 @@
1
+ module Inferno
2
+ # @private
3
+ # This class takes an array of results and determines the overall result. This
4
+ # is used to determine the result of a TestGroup/TestSuite based on the
5
+ # results of it's children.
6
+ class ResultSummarizer
7
+ attr_reader :results
8
+
9
+ def initialize(results)
10
+ @results = results
11
+ end
12
+
13
+ def summarize
14
+ prioritized_result_strings.find { |result_string| unique_result_strings.include? result_string }
15
+ end
16
+
17
+ private
18
+
19
+ def prioritized_result_strings
20
+ Entities::Result::RESULT_OPTIONS
21
+ end
22
+
23
+ def required_results
24
+ @required_results ||= results.select(&:required?)
25
+ end
26
+
27
+ def all_optional_results?
28
+ required_results.blank?
29
+ end
30
+
31
+ def results_for_summary
32
+ all_optional_results? ? results : required_results
33
+ end
34
+
35
+ def unique_result_strings
36
+ @unique_result_strings ||=
37
+ results_for_summary.map(&:result).uniq
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,5 @@
1
1
  module Inferno
2
- # @private
2
+ # @api private
3
3
  # This module provides constants so that unit tests in suite repositories can
4
4
  # load the factories defined in inferno.
5
5
  module SpecSupport
@@ -1,3 +1,4 @@
1
+ require_relative './result_summarizer'
1
2
  require_relative './utils/markdown_formatter'
2
3
 
3
4
  module Inferno
@@ -120,7 +121,9 @@ module Inferno
120
121
 
121
122
  children = parent.children
122
123
  child_results = results_repo.current_results_for_test_session_and_runnables(test_session.id, children)
123
- return if children.length != child_results.length
124
+ required_children = children.select(&:required?)
125
+ required_results = child_results.select(&:required?)
126
+ return if required_children.length != required_results.length
124
127
 
125
128
  old_result = results_repo.current_result_for_test_session(test_session.id, parent.reference_hash)&.result
126
129
  new_result = roll_up_result(child_results)
@@ -137,16 +140,21 @@ module Inferno
137
140
  def load_inputs(runnable)
138
141
  runnable.inputs.each_with_object({}) do |input_identifier, input_hash|
139
142
  input_alias = runnable.config.input_name(input_identifier)
140
- input_hash[input_identifier] = session_data_repo.load(test_session_id: test_session.id, name: input_alias)
143
+ input_type = runnable.config.input_type(input_identifier)
144
+ input_hash[input_identifier] =
145
+ session_data_repo.load(test_session_id: test_session.id, name: input_alias, type: input_type)
141
146
  end
142
147
  end
143
148
 
144
149
  def save_outputs(runnable_instance)
145
150
  outputs =
146
151
  runnable_instance.outputs_to_persist.map do |output_identifier, value|
152
+ output_name = runnable_instance.class.config.output_name(output_identifier)
153
+ output_type = runnable_instance.class.config.output_type(output_identifier)
147
154
  {
148
- name: runnable_instance.class.config.output_name(output_identifier),
149
- value: value
155
+ name: output_name,
156
+ type: output_type,
157
+ value: value.to_s
150
158
  }
151
159
  end
152
160
 
@@ -165,11 +173,7 @@ module Inferno
165
173
  end
166
174
 
167
175
  def roll_up_result(results)
168
- result_priority = Entities::Result::RESULT_OPTIONS
169
- unique_results = results.map(&:result).uniq
170
- result_priority.find do |result|
171
- unique_results.include? result
172
- end
176
+ ResultSummarizer.new(results).summarize
173
177
  end
174
178
  end
175
179
  end
@@ -1,3 +1,3 @@
1
1
  module Inferno
2
- VERSION = '0.0.8'.freeze
2
+ VERSION = '0.1.1'.freeze
3
3
  end
@@ -1,7 +1,7 @@
1
1
  FactoryBot.define do
2
2
  factory :request, class: 'Inferno::Entities::Request' do
3
3
  transient do
4
- result
4
+ result { repo_create(:result, request_count: 0) }
5
5
  header_count { 2 }
6
6
  end
7
7
 
@@ -2,7 +2,7 @@ FactoryBot.define do
2
2
  factory :result, class: 'Inferno::Entities::Result' do
3
3
  transient do
4
4
  runnable { test_run.runnable.reference_hash }
5
- test_run
5
+ test_run { repo_create(:test_run) }
6
6
  test_session { test_run.test_session }
7
7
  message_count { 0 }
8
8
  request_count { 0 }
@@ -23,7 +23,7 @@ FactoryBot.define do
23
23
  before(:create) do |instance, evaluator|
24
24
  instance.instance_variable_set(
25
25
  :@requests,
26
- repo_create_list(:request, evaluator.request_count, result_id: instance.id)
26
+ build_list(:request, evaluator.request_count, result: instance)
27
27
  )
28
28
  end
29
29
 
@@ -2,6 +2,7 @@ module BasicTestSuite
2
2
  class AbcGroup < Inferno::Entities::TestGroup
3
3
  title 'ABC Group'
4
4
 
5
+ input :input1, :input2
5
6
  test 'demo_test' do
6
7
  1 + 1
7
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inferno_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen MacVicar
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-12-10 00:00:00.000000000 Z
13
+ date: 2022-01-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -502,6 +502,7 @@ files:
502
502
  - lib/inferno/db/migrations/003_update_session_data.rb
503
503
  - lib/inferno/db/migrations/004_add_request_results_table.rb
504
504
  - lib/inferno/db/migrations/005_add_updated_at_index_to_results.rb
505
+ - lib/inferno/db/migrations/006_remove_unused_tables.rb
505
506
  - lib/inferno/db/schema.rb
506
507
  - lib/inferno/dsl.rb
507
508
  - lib/inferno/dsl/assertions.rb
@@ -511,6 +512,7 @@ files:
511
512
  - lib/inferno/dsl/fhir_validation.rb
512
513
  - lib/inferno/dsl/http_client.rb
513
514
  - lib/inferno/dsl/http_client_builder.rb
515
+ - lib/inferno/dsl/oauth_credentials.rb
514
516
  - lib/inferno/dsl/request_storage.rb
515
517
  - lib/inferno/dsl/results.rb
516
518
  - lib/inferno/dsl/resume_test_route.rb
@@ -518,6 +520,7 @@ files:
518
520
  - lib/inferno/entities.rb
519
521
  - lib/inferno/entities/attributes.rb
520
522
  - lib/inferno/entities/entity.rb
523
+ - lib/inferno/entities/has_runnable.rb
521
524
  - lib/inferno/entities/header.rb
522
525
  - lib/inferno/entities/message.rb
523
526
  - lib/inferno/entities/request.rb
@@ -529,6 +532,7 @@ files:
529
532
  - lib/inferno/entities/test_session.rb
530
533
  - lib/inferno/entities/test_suite.rb
531
534
  - lib/inferno/exceptions.rb
535
+ - lib/inferno/ext/fhir_client.rb
532
536
  - lib/inferno/jobs.rb
533
537
  - lib/inferno/jobs/execute_test_run.rb
534
538
  - lib/inferno/jobs/resume_test_run.rb
@@ -554,6 +558,7 @@ files:
554
558
  - lib/inferno/repositories/test_suites.rb
555
559
  - lib/inferno/repositories/tests.rb
556
560
  - lib/inferno/repositories/validate_runnable_reference.rb
561
+ - lib/inferno/result_summarizer.rb
557
562
  - lib/inferno/spec_support.rb
558
563
  - lib/inferno/test_runner.rb
559
564
  - lib/inferno/utils/markdown_formatter.rb