inferno_core 0.0.2 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/lib/inferno/apps/web/controllers/test_runs/create.rb +30 -10
  3. data/lib/inferno/apps/web/controllers/test_runs/show.rb +10 -0
  4. data/lib/inferno/apps/web/controllers/test_sessions/create.rb +1 -0
  5. data/lib/inferno/apps/web/controllers/test_sessions/last_test_run.rb +22 -0
  6. data/lib/inferno/apps/web/controllers/test_sessions/results/index.rb +6 -1
  7. data/lib/inferno/apps/web/controllers/test_sessions/session_data/index.rb +21 -0
  8. data/lib/inferno/apps/web/router.rb +15 -0
  9. data/lib/inferno/apps/web/serializers/hash_value_extractor.rb +11 -0
  10. data/lib/inferno/apps/web/serializers/request.rb +1 -0
  11. data/lib/inferno/apps/web/serializers/result.rb +8 -0
  12. data/lib/inferno/apps/web/serializers/session_data.rb +10 -0
  13. data/lib/inferno/apps/web/serializers/test.rb +3 -6
  14. data/lib/inferno/apps/web/serializers/test_group.rb +5 -8
  15. data/lib/inferno/apps/web/serializers/test_run.rb +1 -0
  16. data/lib/inferno/apps/web/serializers/test_session.rb +1 -1
  17. data/lib/inferno/apps/web/serializers/test_suite.rb +1 -0
  18. data/lib/inferno/config/application.rb +5 -2
  19. data/lib/inferno/config/boot/db.rb +10 -1
  20. data/lib/inferno/config/boot/sidekiq.rb +11 -0
  21. data/lib/inferno/config/boot/suites.rb +4 -6
  22. data/lib/inferno/config/boot.rb +2 -0
  23. data/lib/inferno/db/migrations/001_create_initial_structure.rb +0 -21
  24. data/lib/inferno/db/migrations/002_add_wait_support.rb +7 -0
  25. data/lib/inferno/db/migrations/003_update_session_data.rb +18 -0
  26. data/lib/inferno/db/migrations/004_add_request_results_table.rb +9 -0
  27. data/lib/inferno/db/migrations/005_add_updated_at_index_to_results.rb +5 -0
  28. data/lib/inferno/db/schema.rb +154 -0
  29. data/lib/inferno/dsl/assertions.rb +20 -0
  30. data/lib/inferno/dsl/configurable.rb +126 -0
  31. data/lib/inferno/dsl/fhir_client.rb +4 -2
  32. data/lib/inferno/dsl/fhir_client_builder.rb +16 -0
  33. data/lib/inferno/dsl/http_client.rb +10 -8
  34. data/lib/inferno/dsl/request_storage.rb +30 -9
  35. data/lib/inferno/dsl/results.rb +49 -0
  36. data/lib/inferno/dsl/resume_test_route.rb +89 -0
  37. data/lib/inferno/dsl/runnable.rb +153 -16
  38. data/lib/inferno/dsl.rb +1 -3
  39. data/lib/inferno/entities/header.rb +7 -7
  40. data/lib/inferno/entities/message.rb +8 -6
  41. data/lib/inferno/entities/request.rb +42 -16
  42. data/lib/inferno/entities/result.rb +34 -18
  43. data/lib/inferno/entities/session_data.rb +33 -0
  44. data/lib/inferno/entities/test.rb +35 -8
  45. data/lib/inferno/entities/test_group.rb +8 -0
  46. data/lib/inferno/entities/test_run.rb +13 -6
  47. data/lib/inferno/entities/test_session.rb +8 -8
  48. data/lib/inferno/entities.rb +1 -1
  49. data/lib/inferno/exceptions.rb +24 -0
  50. data/lib/inferno/jobs/execute_test_run.rb +14 -0
  51. data/lib/inferno/jobs/resume_test_run.rb +14 -0
  52. data/lib/inferno/jobs.rb +16 -0
  53. data/lib/inferno/public/bundle.js +1 -1
  54. data/lib/inferno/repositories/repository.rb +13 -0
  55. data/lib/inferno/repositories/requests.rb +5 -4
  56. data/lib/inferno/repositories/results.rb +151 -3
  57. data/lib/inferno/repositories/session_data.rb +47 -0
  58. data/lib/inferno/repositories/test_runs.rb +81 -0
  59. data/lib/inferno/test_runner.rb +125 -31
  60. data/lib/inferno/utils/markdown_formatter.rb +15 -0
  61. data/lib/inferno/utils/middleware/request_logger.rb +16 -3
  62. data/lib/inferno/version.rb +1 -1
  63. data/lib/inferno.rb +4 -0
  64. data/spec/factories/header.rb +19 -0
  65. data/spec/factories/message.rb +17 -0
  66. data/spec/factories/request.rb +42 -0
  67. data/spec/factories/result.rb +45 -0
  68. data/spec/factories/test_run.rb +24 -0
  69. data/spec/factories/test_session.rb +11 -0
  70. data/spec/fixtures/basic_test_group.rb +9 -0
  71. data/spec/fixtures/basic_test_suite.rb +8 -0
  72. metadata +57 -5
  73. data/lib/inferno/dsl/fhir_manipulation.rb +0 -25
  74. data/lib/inferno/entities/test_input.rb +0 -20
@@ -0,0 +1,17 @@
1
+ FactoryBot.define do
2
+ factory :message, class: 'Inferno::Entities::Message' do
3
+ result
4
+
5
+ result_id { result.id }
6
+
7
+ sequence(:message) { |n| "MESSAGE #{n}" }
8
+
9
+ type { Inferno::Entities::Message::TYPES.sample }
10
+
11
+ initialize_with { new(**attributes) }
12
+
13
+ to_create do |instance|
14
+ Inferno::Repositories::Messages.new.create(instance.to_hash)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,42 @@
1
+ FactoryBot.define do
2
+ factory :request, class: 'Inferno::Entities::Request' do
3
+ transient do
4
+ result
5
+ header_count { 2 }
6
+ end
7
+
8
+ result_id { result.id }
9
+
10
+ verb { 'get' }
11
+ url { 'http://www.example.com' }
12
+ name { nil }
13
+ status { 200 }
14
+ direction { 'outgoing' }
15
+ headers do
16
+ [
17
+ {
18
+ type: 'request',
19
+ name: 'Request-Header',
20
+ value: 'REQUEST HEADER VALUE'
21
+ },
22
+ {
23
+ type: 'response',
24
+ name: 'Response-Header',
25
+ value: 'RESPONSE HEADER VALUE'
26
+ }
27
+ ]
28
+ end
29
+
30
+ request_body { nil }
31
+
32
+ sequence(:response_body) { |n| "RESPONSE_BODY #{n}" }
33
+
34
+ test_session_id { result.test_session_id }
35
+
36
+ initialize_with { new(**attributes) }
37
+
38
+ to_create do |instance|
39
+ Inferno::Repositories::Requests.new.create(instance.to_hash)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,45 @@
1
+ FactoryBot.define do
2
+ factory :result, class: 'Inferno::Entities::Result' do
3
+ transient do
4
+ runnable { test_run.runnable.reference_hash }
5
+ test_run
6
+ test_session { test_run.test_session }
7
+ message_count { 0 }
8
+ request_count { 0 }
9
+ end
10
+
11
+ test_session_id { test_session.id }
12
+ test_run_id { test_run.id }
13
+
14
+ test_suite_id { runnable[:test_suite_id] }
15
+ test_group_id { runnable[:test_group_id] }
16
+ test_id { runnable[:test_id] }
17
+ output_json { '[]' }
18
+
19
+ result { 'pass' }
20
+
21
+ initialize_with { new(**attributes) }
22
+
23
+ before(:create) do |instance, evaluator|
24
+ instance.instance_variable_set(
25
+ :@requests,
26
+ repo_create_list(:request, evaluator.request_count, result_id: instance.id)
27
+ )
28
+ end
29
+
30
+ to_create do |instance|
31
+ Inferno::Repositories::Results.new.create(instance.to_hash)
32
+ end
33
+
34
+ after(:create) do |instance, evaluator|
35
+ instance.instance_variable_set(
36
+ :@messages,
37
+ repo_create_list(:message, evaluator.message_count, result_id: instance.id)
38
+ )
39
+ instance.instance_variable_set(
40
+ :@requests,
41
+ repo_create_list(:request, evaluator.request_count, result_id: instance.id)
42
+ )
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,24 @@
1
+ FactoryBot.define do
2
+ factory :test_run, class: 'Inferno::Entities::TestRun' do
3
+ test_session
4
+ test_session_id { test_session.id }
5
+
6
+ transient do
7
+ runnable { { test_suite_id: 'BasicTestSuite::Suite' } }
8
+ end
9
+
10
+ test_suite_id { runnable[:test_suite_id] }
11
+ test_group_id { runnable[:test_group_id] }
12
+ test_id { runnable[:test_id] }
13
+ status { 'queued' }
14
+
15
+ inputs { nil }
16
+ wait_timeout { nil }
17
+
18
+ initialize_with { new(**attributes) }
19
+
20
+ to_create do |instance|
21
+ Inferno::Repositories::TestRuns.new.create(instance.to_hash).tap(&:runnable)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ require_relative '../../lib/inferno/repositories'
2
+
3
+ FactoryBot.define do
4
+ factory :test_session, class: 'Inferno::Entities::TestSession' do
5
+ test_suite_id { 'BasicTestSuite::Suite' }
6
+
7
+ initialize_with { new(**attributes) }
8
+
9
+ to_create { |instance| Inferno::Repositories::TestSessions.new.create(instance.to_hash) }
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module BasicTestSuite
2
+ class AbcGroup < Inferno::Entities::TestGroup
3
+ title 'ABC Group'
4
+
5
+ test 'demo_test' do
6
+ 1 + 1
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'basic_test_group'
2
+
3
+ module BasicTestSuite
4
+ class Suite < Inferno::Entities::TestSuite
5
+ title 'Basic Test Suite'
6
+ group from: 'BasicTestSuite::AbcGroup'
7
+ end
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.2
4
+ version: 0.0.6
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-06-15 00:00:00.000000000 Z
13
+ date: 2021-10-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -96,6 +96,20 @@ dependencies:
96
96
  - - "~>"
97
97
  - !ruby/object:Gem::Version
98
98
  version: '4.0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: fhir_models
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: 4.2.0
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: 4.2.0
99
113
  - !ruby/object:Gem::Dependency
100
114
  name: hanami-controller
101
115
  requirement: !ruby/object:Gem::Requirement
@@ -208,6 +222,20 @@ dependencies:
208
222
  - - "~>"
209
223
  - !ruby/object:Gem::Version
210
224
  version: '5.42'
225
+ - !ruby/object:Gem::Dependency
226
+ name: sidekiq
227
+ requirement: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - "~>"
230
+ - !ruby/object:Gem::Version
231
+ version: 6.2.1
232
+ type: :runtime
233
+ prerelease: false
234
+ version_requirements: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - "~>"
237
+ - !ruby/object:Gem::Version
238
+ version: 6.2.1
211
239
  - !ruby/object:Gem::Dependency
212
240
  name: sqlite3
213
241
  requirement: !ruby/object:Gem::Requirement
@@ -409,18 +437,22 @@ files:
409
437
  - lib/inferno/apps/web/controllers/test_runs/results/index.rb
410
438
  - lib/inferno/apps/web/controllers/test_runs/show.rb
411
439
  - lib/inferno/apps/web/controllers/test_sessions/create.rb
440
+ - lib/inferno/apps/web/controllers/test_sessions/last_test_run.rb
412
441
  - lib/inferno/apps/web/controllers/test_sessions/results/index.rb
442
+ - lib/inferno/apps/web/controllers/test_sessions/session_data/index.rb
413
443
  - lib/inferno/apps/web/controllers/test_sessions/show.rb
414
444
  - lib/inferno/apps/web/controllers/test_suites/index.rb
415
445
  - lib/inferno/apps/web/controllers/test_suites/show.rb
416
446
  - lib/inferno/apps/web/index.html.erb
417
447
  - lib/inferno/apps/web/router.rb
448
+ - lib/inferno/apps/web/serializers/hash_value_extractor.rb
418
449
  - lib/inferno/apps/web/serializers/header.rb
419
450
  - lib/inferno/apps/web/serializers/input.rb
420
451
  - lib/inferno/apps/web/serializers/message.rb
421
452
  - lib/inferno/apps/web/serializers/request.rb
422
453
  - lib/inferno/apps/web/serializers/result.rb
423
454
  - lib/inferno/apps/web/serializers/serializer.rb
455
+ - lib/inferno/apps/web/serializers/session_data.rb
424
456
  - lib/inferno/apps/web/serializers/test.rb
425
457
  - lib/inferno/apps/web/serializers/test_group.rb
426
458
  - lib/inferno/apps/web/serializers/test_run.rb
@@ -430,19 +462,26 @@ files:
430
462
  - lib/inferno/config/boot.rb
431
463
  - lib/inferno/config/boot/db.rb
432
464
  - lib/inferno/config/boot/logging.rb
465
+ - lib/inferno/config/boot/sidekiq.rb
433
466
  - lib/inferno/config/boot/suites.rb
434
467
  - lib/inferno/config/boot/web.rb
435
468
  - lib/inferno/db/migrations/001_create_initial_structure.rb
469
+ - lib/inferno/db/migrations/002_add_wait_support.rb
470
+ - lib/inferno/db/migrations/003_update_session_data.rb
471
+ - lib/inferno/db/migrations/004_add_request_results_table.rb
472
+ - lib/inferno/db/migrations/005_add_updated_at_index_to_results.rb
473
+ - lib/inferno/db/schema.rb
436
474
  - lib/inferno/dsl.rb
437
475
  - lib/inferno/dsl/assertions.rb
476
+ - lib/inferno/dsl/configurable.rb
438
477
  - lib/inferno/dsl/fhir_client.rb
439
478
  - lib/inferno/dsl/fhir_client_builder.rb
440
- - lib/inferno/dsl/fhir_manipulation.rb
441
479
  - lib/inferno/dsl/fhir_validation.rb
442
480
  - lib/inferno/dsl/http_client.rb
443
481
  - lib/inferno/dsl/http_client_builder.rb
444
482
  - lib/inferno/dsl/request_storage.rb
445
483
  - lib/inferno/dsl/results.rb
484
+ - lib/inferno/dsl/resume_test_route.rb
446
485
  - lib/inferno/dsl/runnable.rb
447
486
  - lib/inferno/entities.rb
448
487
  - lib/inferno/entities/attributes.rb
@@ -451,13 +490,16 @@ files:
451
490
  - lib/inferno/entities/message.rb
452
491
  - lib/inferno/entities/request.rb
453
492
  - lib/inferno/entities/result.rb
493
+ - lib/inferno/entities/session_data.rb
454
494
  - lib/inferno/entities/test.rb
455
495
  - lib/inferno/entities/test_group.rb
456
- - lib/inferno/entities/test_input.rb
457
496
  - lib/inferno/entities/test_run.rb
458
497
  - lib/inferno/entities/test_session.rb
459
498
  - lib/inferno/entities/test_suite.rb
460
499
  - lib/inferno/exceptions.rb
500
+ - lib/inferno/jobs.rb
501
+ - lib/inferno/jobs/execute_test_run.rb
502
+ - lib/inferno/jobs/resume_test_run.rb
461
503
  - lib/inferno/public/217.bundle.js
462
504
  - lib/inferno/public/assets.json
463
505
  - lib/inferno/public/bundle.js
@@ -473,6 +515,7 @@ files:
473
515
  - lib/inferno/repositories/repository.rb
474
516
  - lib/inferno/repositories/requests.rb
475
517
  - lib/inferno/repositories/results.rb
518
+ - lib/inferno/repositories/session_data.rb
476
519
  - lib/inferno/repositories/test_groups.rb
477
520
  - lib/inferno/repositories/test_runs.rb
478
521
  - lib/inferno/repositories/test_sessions.rb
@@ -481,8 +524,17 @@ files:
481
524
  - lib/inferno/repositories/validate_runnable_reference.rb
482
525
  - lib/inferno/spec_support.rb
483
526
  - lib/inferno/test_runner.rb
527
+ - lib/inferno/utils/markdown_formatter.rb
484
528
  - lib/inferno/utils/middleware/request_logger.rb
485
529
  - lib/inferno/version.rb
530
+ - spec/factories/header.rb
531
+ - spec/factories/message.rb
532
+ - spec/factories/request.rb
533
+ - spec/factories/result.rb
534
+ - spec/factories/test_run.rb
535
+ - spec/factories/test_session.rb
536
+ - spec/fixtures/basic_test_group.rb
537
+ - spec/fixtures/basic_test_suite.rb
486
538
  - spec/support/factory_bot.rb
487
539
  homepage: https://github.com/inferno_community/inferno-core
488
540
  licenses:
@@ -507,7 +559,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
507
559
  - !ruby/object:Gem::Version
508
560
  version: '0'
509
561
  requirements: []
510
- rubygems_version: 3.1.4
562
+ rubygems_version: 3.1.6
511
563
  signing_key:
512
564
  specification_version: 4
513
565
  summary: Inferno Core is an open source tool for testing data exchanges enabled by
@@ -1,25 +0,0 @@
1
- module Inferno
2
- module DSL
3
- module FHIRManipulation
4
- def walk_resource(resource, path = nil, &block)
5
- resource.class::METADATA.each do |field_name, meta|
6
- local_name = meta.fetch :local_name, field_name
7
- values = [resource.instance_variable_get("@#{local_name}")].flatten.compact
8
- next if values.empty?
9
-
10
- values.each_with_index do |value, i|
11
- child_path = if path.nil?
12
- field_name
13
- elsif meta['max'] > 1
14
- "#{path}.#{field_name}[#{i}]"
15
- else
16
- "#{path}.#{field_name}"
17
- end
18
- yield value, meta, child_path
19
- walk_resource value, child_path, &block unless FHIR::PRIMITIVES.include? meta['type']
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,20 +0,0 @@
1
- module Inferno
2
- module Entities
3
- # A `TestRun` represents an input definition in a test.
4
- #
5
- # @attr_reader [String] id of the test input
6
- # @attr_reader [String] status
7
- # @attr_reader [String] test_suite_id
8
- class TestInput
9
- attr_reader :id, :status, :test_suite_id
10
-
11
- # How to define test run inputs? Class in this file? Separate Entity?
12
-
13
- def initialize(params)
14
- @id = params[:id]
15
- @status = params[:name]
16
- @test_suite_id = params[:test_suite_id]
17
- end
18
- end
19
- end
20
- end