subscriptions_test_kit 0.9.4 → 0.10.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/subscription_client_empty_preset.json.erb +15 -0
  3. data/config/presets/subscription_client_full_resource_preset.json.erb +15 -0
  4. data/config/presets/subscription_client_id_only_preset.json.erb +15 -0
  5. data/config/presets/subscription_server_preset_empty.json.erb +23 -0
  6. data/config/presets/subscription_server_preset_full_resource.json.erb +23 -0
  7. data/config/presets/subscription_server_preset_id_only.json.erb +23 -0
  8. data/lib/subscriptions_test_kit/common/notification_conformance_verification.rb +37 -1
  9. data/lib/subscriptions_test_kit/common/subscription_conformance_verification.rb +16 -7
  10. data/lib/subscriptions_test_kit/docs/samples/Subscription_empty.json +1 -1
  11. data/lib/subscriptions_test_kit/docs/samples/Subscription_full-resource.json +1 -1
  12. data/lib/subscriptions_test_kit/docs/samples/Subscription_id-only.json +1 -1
  13. data/lib/subscriptions_test_kit/docs/subscriptions_r5_backport_r4_client_suite_description.md +4 -1
  14. data/lib/subscriptions_test_kit/docs/subscriptions_r5_backport_r4_server_suite_description.md +8 -1
  15. data/lib/subscriptions_test_kit/endpoints/subscription_status_endpoint.rb +3 -3
  16. data/lib/subscriptions_test_kit/igs/.keep +0 -0
  17. data/lib/subscriptions_test_kit/metadata.rb +92 -0
  18. data/lib/subscriptions_test_kit/requirements/generated/subscriptions-test-kit_requirements_coverage.csv +24 -24
  19. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/common/subscription_simulation_utils.rb +2 -2
  20. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/conformance_verification/notification_input_payload_verification_test.rb +0 -1
  21. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/conformance_verification/notification_input_verification_test.rb +0 -1
  22. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/conformance_verification/processing_attestation_test.rb +2 -2
  23. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/interaction_test.rb +9 -2
  24. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow_group.rb +12 -6
  25. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client_suite.rb +3 -3
  26. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction/creation_response_conformance_test.rb +1 -1
  27. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction/notification_delivery_test.rb +7 -7
  28. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction/subscription_conformance_test.rb +13 -15
  29. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_group.rb +3 -3
  30. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification/notification_conformance_test.rb +44 -22
  31. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification/notification_presence_test.rb +56 -0
  32. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification_group.rb +7 -3
  33. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb +1 -1
  34. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/event_notification_group.rb +4 -3
  35. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/handshake_heartbeat/handshake_conformance_test.rb +3 -0
  36. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/handshake_heartbeat/heartbeat_conformance_test.rb +3 -0
  37. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/handshake_heartbeat_group.rb +1 -1
  38. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/workflow_group.rb +4 -4
  39. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server_suite.rb +0 -2
  40. data/lib/subscriptions_test_kit/urls.rb +26 -10
  41. data/lib/subscriptions_test_kit/version.rb +2 -1
  42. data/lib/subscriptions_test_kit.rb +1 -0
  43. metadata +16 -6
@@ -0,0 +1,56 @@
1
+ module SubscriptionsTestKit
2
+ module SubscriptionsR5BackportR4Server
3
+ class NotificationPresenceTest < Inferno::Test
4
+ id :subscriptions_r4_server_notification_presence
5
+ title 'Notification Presence Verification'
6
+ description %(
7
+ This test identifies the most recent successfully created Subscription (from the just-run interaction test)
8
+ and checks that the server sent at least one notification to Inferno's notification endpoint
9
+ regarding that Subscription. This test does not check the types of these notifications or
10
+ whether they are conformant.
11
+ )
12
+
13
+ def subscription_type
14
+ config.options[:subscription_type]
15
+ end
16
+
17
+ run do
18
+ if subscription_type.present?
19
+ requests = load_tagged_requests('subscription_creation', subscription_type)
20
+ subscription_requests =
21
+ requests
22
+ .select { |request| request.status == 201 }
23
+ skip_if subscription_requests.empty?, %(
24
+ No successful Subscription creation request of type #{subscription_type}
25
+ was made in the previous test.
26
+ )
27
+ else
28
+ all_requests = load_tagged_requests('subscription_creation')
29
+ subscription_requests =
30
+ all_requests
31
+ .select { |request| request.status == 201 }
32
+ skip_if subscription_requests.empty?,
33
+ 'No successful Subscription creation request was made in the previous test.'
34
+ end
35
+
36
+ # select the most recent subscription to verify
37
+ # this test is run as part of the interaction group, so the most recent
38
+ # successfully created Subscription will be the one that came during
39
+ # the previoius interaction test
40
+ latest_subscription = nil
41
+ subscription_requests.each do |subscription_request|
42
+ if latest_subscription.blank? || latest_subscription.created_at < subscription_request.created_at
43
+ latest_subscription = subscription_request
44
+ end
45
+ end
46
+
47
+ assert_valid_json(latest_subscription.response_body)
48
+ subscription = JSON.parse(latest_subscription.response_body)
49
+
50
+ requests = load_tagged_requests(subscription['id'])
51
+ assert !requests.empty?,
52
+ "No notifications were received from the server related to Subscription #{subscription['id']}."
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,4 +1,5 @@
1
1
  require_relative 'interaction_verification/notification_conformance_test'
2
+ require_relative 'interaction_verification/notification_presence_test'
2
3
 
3
4
  module SubscriptionsTestKit
4
5
  module SubscriptionsR5BackportR4Server
@@ -6,13 +7,16 @@ module SubscriptionsTestKit
6
7
  id :subscriptions_r4_server_interaction_verification
7
8
  title 'Subscription Workflow Interaction Verification'
8
9
  description %(
9
- Inferno takes the received event-notification Bundle and verifies that it is conformant to the
10
- [R4 Topic-Based Subscription Notification Bundle](https://hl7.org/fhir/uv/subscriptions-backport/STU1.1/StructureDefinition-backport-subscription-notification-r4.html)
11
- profle.
10
+ Inferno will verify that the sever communicated at least one notification
11
+ (handshake, heartbeat, and/or event-notification) back to Inferno
12
+ related to the created Subscription and that that set of notifications
13
+ includes a conformant event-notification. Other types of notifications
14
+ are verified during other tests.
12
15
  )
13
16
 
14
17
  run_as_group
15
18
 
19
+ test from: :subscriptions_r4_server_notification_presence
16
20
  test from: :subscriptions_r4_server_notification_conformance
17
21
  end
18
22
  end
@@ -65,7 +65,7 @@ module SubscriptionsTestKit
65
65
 
66
66
  fhir_operation('/Subscription', body: subscription, tags:)
67
67
  assert_response_status(201)
68
- payload_type
68
+ json_parse(request.response_body)
69
69
  end
70
70
  end
71
71
  end
@@ -6,12 +6,13 @@ module SubscriptionsTestKit
6
6
  module SubscriptionsR5BackportR4Server
7
7
  class EventNotificationGroup < Inferno::TestGroup
8
8
  id :subscriptions_r4_server_event_notification
9
- title 'Backport Subscription Notification Verification'
9
+ title 'Backport Subscription Notification Payload Type Verification'
10
10
  description %(
11
11
  Verify that the received Notifications are conformant to the
12
12
  [R4 Topic-Based Subscription Notification Bundle](https://hl7.org/fhir/uv/subscriptions-backport/STU1.1/StructureDefinition-backport-subscription-notification-r4.html)
13
- profile, including additional requirements around the content type. This group contains tests for the three
14
- options available when specifying the contents of a Notification: empty, id-only, and full-resource.
13
+ profile, including additional requirements around the payload type. This group contains tests for the three
14
+ options available when specifying the content level for event notification payloads:
15
+ `empty`, `id-only`, and `full-resource`.
15
16
  )
16
17
 
17
18
  input_order :url, :credentials, :access_token, :empty_subscription_resource,
@@ -13,6 +13,9 @@ module SubscriptionsTestKit
13
13
  endpoint. After a successful handshake notification has been sent and accepted, the server SHALL update the
14
14
  status to active. This test verifies that the incoming handshake request is a conformant
15
15
  [R4 Topic-Based Subscription Notification Bundle](https://hl7.org/fhir/uv/subscriptions-backport/STU1.1/StructureDefinition-backport-subscription-notification-r4.html).
16
+
17
+ Note that all Subscriptions and the associated Handshake notifications received during previously-run tests
18
+ will be associated with this test and analyzed for conformance.
16
19
  )
17
20
 
18
21
  verifies_requirements 'hl7.fhir.uv.subscriptions_1.1.0@14',
@@ -11,6 +11,9 @@ module SubscriptionsTestKit
11
11
  When a Subscription is created for a REST Hook channel type, the server Server may send notifications of type
12
12
  heartbeat at any time. This test verifies that the incoming heartbeat request is a conformant
13
13
  [R4 Topic-Based Subscription Notification Bundle](https://hl7.org/fhir/uv/subscriptions-backport/STU1.1/StructureDefinition-backport-subscription-notification-r4.html).
14
+
15
+ Note that all Subscriptions and the associated Heartbeat notifications received during previously-run tests
16
+ will be associated with this test and analyzed for conformance.
14
17
  )
15
18
 
16
19
  verifies_requirements 'hl7.fhir.uv.subscriptions_1.1.0@14',
@@ -7,7 +7,7 @@ module SubscriptionsTestKit
7
7
  id :subscriptions_r4_server_handshake_heartbeat
8
8
  title 'Backport Subscription Handshake and Heartbeat Notification Verification'
9
9
  description %(
10
- Verify that the any received Handshake or Heartbeat Notifications are conformant to the
10
+ Verify that all Handshake ane Heartbeat Notifications received during previous tests are conformant to the
11
11
  [R4 Topic-Based Subscription Notification Bundle](https://hl7.org/fhir/uv/subscriptions-backport/STU1.1/StructureDefinition-backport-subscription-notification-r4.html)
12
12
  profile.
13
13
  )
@@ -8,12 +8,12 @@ module SubscriptionsTestKit
8
8
  title 'Demonstrate the subscription workflow'
9
9
  description %(
10
10
  Demonstrate the ability of the server to accept a request for the
11
- creation of a FHIR Subscription instance and deliver a notification
11
+ creation of a FHIR Subscription instance and deliver an event notification
12
12
  for that Subscription. The tester must provide a Subscription instance
13
13
  that the server under test supports. Inferno will act as a client,
14
- creating the Subscription and waiting for a notification based on it.
15
- Inferno will then verify that the Subscription and the Notification
16
- match and that the exchange is conformant.
14
+ creating the Subscription and waiting for notifications based on it.
15
+ Inferno will then verify that an event notification has been received
16
+ for the created Subscription and that the exchange is conformant.
17
17
  )
18
18
 
19
19
  run_as_group
@@ -6,7 +6,6 @@ require_relative 'subscriptions_r5_backport_r4_server/status_operation_group'
6
6
  require_relative 'subscriptions_r5_backport_r4_server/subscription_rejection_group'
7
7
  require_relative '../endpoints/subscription_rest_hook_endpoint'
8
8
  require_relative '../urls'
9
- require_relative '../version'
10
9
 
11
10
  module SubscriptionsTestKit
12
11
  module SubscriptionsR5BackportR4Server
@@ -14,7 +13,6 @@ module SubscriptionsTestKit
14
13
  id :subscriptions_r5_backport_r4_server
15
14
  title 'Subscriptions R5 Backport IG v1.1.0 FHIR R4 Server Test Suite'
16
15
  short_title 'Subscriptions R4 Server'
17
- version VERSION
18
16
  description File.read(File.join(__dir__, '..', 'docs',
19
17
  'subscriptions_r5_backport_r4_server_suite_description.md'))
20
18
 
@@ -10,28 +10,44 @@ module SubscriptionsTestKit
10
10
  RESUME_FAIL_PATH = '/resume_fail'
11
11
 
12
12
  module URLs
13
- def base_url
14
- @base_url ||= "#{Inferno::Application['base_url']}/custom/#{suite_id}"
13
+ def server_suite_base_url
14
+ @server_suite_base_url ||= "#{Inferno::Application['base_url']}/custom/#{server_suite_id}"
15
+ end
16
+
17
+ def client_suite_base_url
18
+ @client_suite_base_url ||= "#{Inferno::Application['base_url']}/custom/#{client_suite_id}"
15
19
  end
16
20
 
17
21
  def subscription_channel_url
18
- @subscription_channel_url ||= base_url + SUBSCRIPTION_CHANNEL_PATH
22
+ @subscription_channel_url ||= server_suite_base_url + SUBSCRIPTION_CHANNEL_PATH
23
+ end
24
+
25
+ def resume_pass_url_server
26
+ @resume_pass_url_server ||= server_suite_base_url + RESUME_PASS_PATH
27
+ end
28
+
29
+ def resume_fail_url_server
30
+ @resume_fail_url_server ||= server_suite_base_url + RESUME_FAIL_PATH
19
31
  end
20
32
 
21
33
  def fhir_subscription_url
22
- @fhir_subscription_url ||= base_url + FHIR_SUBSCRIPTION_PATH
34
+ @fhir_subscription_url ||= client_suite_base_url + FHIR_SUBSCRIPTION_PATH
35
+ end
36
+
37
+ def resume_pass_url_client
38
+ @resume_pass_url_client ||= client_suite_base_url + RESUME_PASS_PATH
23
39
  end
24
40
 
25
- def resume_pass_url
26
- @resume_pass_url ||= base_url + RESUME_PASS_PATH
41
+ def resume_fail_url_client
42
+ @resume_fail_url_client ||= client_suite_base_url + RESUME_FAIL_PATH
27
43
  end
28
44
 
29
- def resume_fail_url
30
- @resume_fail_url ||= base_url + RESUME_FAIL_PATH
45
+ def server_suite_id
46
+ SubscriptionsR5BackportR4Server::SubscriptionsR5BackportR4ServerSuite.id
31
47
  end
32
48
 
33
- def suite_id
34
- self.class.suite.id
49
+ def client_suite_id
50
+ SubscriptionsR5BackportR4Client::SubscriptionsR5BackportR4ClientSuite.id
35
51
  end
36
52
  end
37
53
  end
@@ -1,3 +1,4 @@
1
1
  module SubscriptionsTestKit
2
- VERSION = '0.9.4'.freeze
2
+ VERSION = '0.10.1'.freeze
3
+ LAST_UPDATED = '2025-02-25'.freeze
3
4
  end
@@ -1,3 +1,4 @@
1
+ require_relative 'subscriptions_test_kit/metadata'
1
2
  require_relative 'inferno_requirements_tools/ext/inferno_core/runnable'
2
3
  require_relative 'subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server_suite'
3
4
  require_relative 'subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client_suite'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subscriptions_test_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Naden, Emily Semple, Tom Strassner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-13 00:00:00.000000000 Z
11
+ date: 2025-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inferno_core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.0
19
+ version: 0.6.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.0
26
+ version: 0.6.4
27
27
  description: Inferno test kit for FHIR R5-style Subscriptions
28
28
  email:
29
29
  - inferno@groups.mitre.org
@@ -32,6 +32,12 @@ extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
34
  - LICENSE
35
+ - config/presets/subscription_client_empty_preset.json.erb
36
+ - config/presets/subscription_client_full_resource_preset.json.erb
37
+ - config/presets/subscription_client_id_only_preset.json.erb
38
+ - config/presets/subscription_server_preset_empty.json.erb
39
+ - config/presets/subscription_server_preset_full_resource.json.erb
40
+ - config/presets/subscription_server_preset_id_only.json.erb
35
41
  - lib/inferno_requirements_tools/ext/inferno_core/runnable.rb
36
42
  - lib/inferno_requirements_tools/tasks/collect_requirements.rb
37
43
  - lib/inferno_requirements_tools/tasks/requirements_coverage.rb
@@ -47,8 +53,10 @@ files:
47
53
  - lib/subscriptions_test_kit/endpoints/subscription_read_endpoint.rb
48
54
  - lib/subscriptions_test_kit/endpoints/subscription_rest_hook_endpoint.rb
49
55
  - lib/subscriptions_test_kit/endpoints/subscription_status_endpoint.rb
56
+ - lib/subscriptions_test_kit/igs/.keep
50
57
  - lib/subscriptions_test_kit/igs/README.md
51
58
  - lib/subscriptions_test_kit/jobs/send_subscription_notifications.rb
59
+ - lib/subscriptions_test_kit/metadata.rb
52
60
  - lib/subscriptions_test_kit/requirements/generated/subscriptions-test-kit_requirements_coverage.csv
53
61
  - lib/subscriptions_test_kit/requirements/subscriptions-test-kit_out_of_scope_requirements.csv
54
62
  - lib/subscriptions_test_kit/requirements/subscriptions-test-kit_requirements.csv
@@ -73,6 +81,7 @@ files:
73
81
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction/subscription_conformance_test.rb
74
82
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_group.rb
75
83
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification/notification_conformance_test.rb
84
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification/notification_presence_test.rb
76
85
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification_group.rb
77
86
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb
78
87
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_status_operation.rb
@@ -105,6 +114,7 @@ homepage: https://github.com/inferno-framework/subscriptions-test-kit
105
114
  licenses:
106
115
  - Apache-2.0
107
116
  metadata:
117
+ inferno_test_kit: 'true'
108
118
  homepage_uri: https://github.com/inferno-framework/subscriptions-test-kit
109
119
  source_code_uri: https://github.com/inferno-framework/subscriptions-test-kit
110
120
  post_install_message:
@@ -115,14 +125,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
125
  requirements:
116
126
  - - ">="
117
127
  - !ruby/object:Gem::Version
118
- version: 3.1.2
128
+ version: 3.3.6
119
129
  required_rubygems_version: !ruby/object:Gem::Requirement
120
130
  requirements:
121
131
  - - ">="
122
132
  - !ruby/object:Gem::Version
123
133
  version: '0'
124
134
  requirements: []
125
- rubygems_version: 3.3.7
135
+ rubygems_version: 3.5.22
126
136
  signing_key:
127
137
  specification_version: 4
128
138
  summary: Subscriptions Test Kit