subscriptions_test_kit 0.9.3 → 0.10.0

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 (54) 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 +8 -11
  9. data/lib/subscriptions_test_kit/common/subscription_conformance_verification.rb +28 -7
  10. data/lib/subscriptions_test_kit/docs/samples/Subscription_empty.json +2 -2
  11. data/lib/subscriptions_test_kit/docs/samples/Subscription_full-resource.json +2 -2
  12. data/lib/subscriptions_test_kit/docs/samples/Subscription_id-only.json +2 -2
  13. data/lib/subscriptions_test_kit/docs/subscriptions_r5_backport_r4_client_suite_description.md +7 -1
  14. data/lib/subscriptions_test_kit/docs/subscriptions_r5_backport_r4_server_suite_description.md +11 -1
  15. data/lib/subscriptions_test_kit/endpoints/subscription_status_endpoint.rb +6 -5
  16. data/lib/subscriptions_test_kit/igs/.keep +0 -0
  17. data/lib/subscriptions_test_kit/jobs/send_subscription_notifications.rb +7 -2
  18. data/lib/subscriptions_test_kit/metadata.rb +92 -0
  19. data/lib/subscriptions_test_kit/requirements/generated/subscriptions-test-kit_requirements_coverage.csv +29 -29
  20. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/common/subscription_simulation_utils.rb +43 -15
  21. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/conformance_verification/notification_input_payload_verification_test.rb +14 -8
  22. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/conformance_verification/notification_input_verification_test.rb +7 -5
  23. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/conformance_verification/subscription_verification_test.rb +1 -0
  24. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow/interaction_test.rb +8 -0
  25. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client/workflow_group.rb +12 -6
  26. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_client_suite.rb +3 -3
  27. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction/creation_response_conformance_test.rb +1 -1
  28. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction/notification_delivery_test.rb +5 -5
  29. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction/subscription_conformance_test.rb +15 -21
  30. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_group.rb +3 -3
  31. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification/notification_conformance_test.rb +38 -22
  32. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification/notification_presence_test.rb +56 -0
  33. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/interaction_verification_group.rb +7 -3
  34. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb +11 -2
  35. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/event_notification/full_resource_content/full_resource_conformance_test.rb +1 -2
  36. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/event_notification/id_only_content/id_only_conformance_test.rb +1 -2
  37. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/event_notification_group.rb +4 -3
  38. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/handshake_heartbeat/handshake_conformance_test.rb +3 -0
  39. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/handshake_heartbeat/heartbeat_conformance_test.rb +3 -0
  40. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/handshake_heartbeat_group.rb +1 -1
  41. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_channel_endpoint_test.rb +65 -0
  42. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_channel_payload_combo_test.rb +76 -0
  43. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_channel_type_test.rb +68 -0
  44. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_cross_version_extension_test.rb +59 -0
  45. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_filter_test.rb +66 -0
  46. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_payload_type_test.rb +66 -0
  47. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_topic_test.rb +64 -0
  48. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection_group.rb +14 -2
  49. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/workflow_group.rb +4 -4
  50. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server_suite.rb +0 -2
  51. data/lib/subscriptions_test_kit/version.rb +2 -1
  52. data/lib/subscriptions_test_kit.rb +1 -0
  53. metadata +23 -7
  54. data/lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscriptions_test.rb +0 -185
@@ -0,0 +1,66 @@
1
+ require_relative '../common/subscription_creation'
2
+
3
+ module SubscriptionsTestKit
4
+ module SubscriptionsR5BackportR4Server
5
+ class RejectSubscriptionFilterTest < Inferno::Test
6
+ include SubscriptionCreation
7
+
8
+ id :subscriptions_r4_server_reject_subscription_filter
9
+ title 'Server Handles Unsupported Subscription Filters'
10
+ description %(
11
+ When processing a request for a Subscription a server SHOULD verify that the Subscription is supported and does
12
+ not contain any information not implemented by the server. If the Subscription is not supported, the server
13
+ should reject the Subscription create request, or it should attempt to adjust the Subscription. When
14
+ processing a request for a Subscription, a server SHOULD validate that all requested filters are
15
+ defined in the requested topic and are implemented in the server.
16
+
17
+ The test will pass if the server either
18
+ 1. rejects the Subscription by responding with a non-201 response, or
19
+ 2. updates the Subscription resource to remove or replace the unsupported value.
20
+ )
21
+
22
+ verifies_requirements 'hl7.fhir.uv.subscriptions_1.1.0@9'
23
+
24
+ input :subscription_resource,
25
+ title: 'Workflow Subscription Resource',
26
+ type: 'textarea',
27
+ description: %(
28
+ A Subscription resource in JSON format that Inferno will send to the server under test
29
+ so that it can demonstrate its ability to perform the Subscription creation and Notification
30
+ response workflow. The instance must be conformant to the R4/B Topic-Based Subscription profile.
31
+ Inferno may modify the Subscription before submission, e.g., to point to Inferno's notification endpoint.
32
+ This input is also used by the unsupported Subscription test as the base on which to add unsupported
33
+ element values to test for server rejection.
34
+ )
35
+ input :unsupported_subscription_filter,
36
+ title: 'Unsupported Subscription Filter',
37
+ description: %(A value for `filterCriteria` extension under the `criteria` that is not implemented by the
38
+ server to test for Subscription rejection.),
39
+ optional: true
40
+
41
+ run do
42
+ skip_if(unsupported_subscription_filter.blank?, %(
43
+ Provide a value in the "Unsupported Subscription Filter" input to run this test.))
44
+
45
+ assert_valid_json(subscription_resource)
46
+ subscription = JSON.parse(subscription_resource)
47
+
48
+ unsupported_info = {
49
+ 'unsupported_title' => 'unsupported filter criteria',
50
+ 'field_path' => ['_criteria'],
51
+ 'field_value' => { 'extension' => [{
52
+ url: 'http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-filter-criteria',
53
+ valueString: unsupported_subscription_filter
54
+ }] }
55
+ }
56
+
57
+ field_name = unsupported_info['field_path'].last
58
+ subscription[field_name] = unsupported_info['field_value']
59
+ send_unsupported_subscription(subscription, unsupported_info['unsupported_title'],
60
+ [unsupported_info['field_path']], [unsupported_info['field_value']])
61
+
62
+ no_error_verification('Unsupported Subscription creation error handling failures.')
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,66 @@
1
+ require_relative '../common/subscription_creation'
2
+
3
+ module SubscriptionsTestKit
4
+ module SubscriptionsR5BackportR4Server
5
+ class RejectSubscriptionPayloadTypeTest < Inferno::Test
6
+ include SubscriptionCreation
7
+
8
+ id :subscriptions_r4_server_reject_subscription_payload_type
9
+ title 'Server Handles Unsupported Subscription Payload Types'
10
+ description %(
11
+ When processing a request for a Subscription a server SHOULD verify that the Subscription is supported and does
12
+ not contain any information not implemented by the server. If the Subscription is not supported, the server
13
+ should reject the Subscription create request, or it should attempt to adjust the Subscription. When
14
+ processing a request for a Subscription, a server SHOULD validate that the payload configuration is
15
+ known and implemented by the server.
16
+
17
+ The test will pass if the server either
18
+ 1. rejects the Subscription by responding with a non-201 response, or
19
+ 2. updates the Subscription resource to remove or replace the unsupported value.
20
+ )
21
+
22
+ verifies_requirements 'hl7.fhir.uv.subscriptions_1.1.0@12'
23
+
24
+ input :subscription_resource,
25
+ title: 'Workflow Subscription Resource',
26
+ type: 'textarea',
27
+ description: %(
28
+ A Subscription resource in JSON format that Inferno will send to the server under test
29
+ so that it can demonstrate its ability to perform the Subscription creation and Notification
30
+ response workflow. The instance must be conformant to the R4/B Topic-Based Subscription profile.
31
+ Inferno may modify the Subscription before submission, e.g., to point to Inferno's notification endpoint.
32
+ This input is also used by the unsupported Subscription test as the base on which to add unsupported
33
+ element values to test for server rejection.
34
+ )
35
+ input :unsupported_subscription_payload_type,
36
+ title: 'Unsupported Subscription Payload Type',
37
+ description: %(A value for the `content` extension under the `channel.payload` element that is not
38
+ implemented by the server to test for Subscription rejection.),
39
+ optional: true
40
+
41
+ run do
42
+ skip_if(unsupported_subscription_payload_type.blank?, %(
43
+ Provide a value in the "Unsupported Subscription Payload Type" input to run this test.))
44
+
45
+ assert_valid_json(subscription_resource)
46
+ subscription = JSON.parse(subscription_resource)
47
+
48
+ unsupported_info = {
49
+ 'unsupported_title' => 'unsupported payload type',
50
+ 'field_path' => ['channel', 'payload'],
51
+ 'field_value' => unsupported_subscription_payload_type
52
+ }
53
+
54
+ field_name = unsupported_info['field_path'].last
55
+ outer_field_name = unsupported_info['field_path'].first
56
+ subscription_field = subscription[outer_field_name]
57
+ subscription_field[field_name] = unsupported_info['field_value']
58
+
59
+ send_unsupported_subscription(subscription, unsupported_info['unsupported_title'],
60
+ [unsupported_info['field_path']], [unsupported_info['field_value']])
61
+
62
+ no_error_verification('Unsupported Subscription creation error handling failures.')
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,64 @@
1
+ require_relative '../common/subscription_creation'
2
+
3
+ module SubscriptionsTestKit
4
+ module SubscriptionsR5BackportR4Server
5
+ class RejectSubscriptionTopicTest < Inferno::Test
6
+ include SubscriptionCreation
7
+
8
+ id :subscriptions_r4_server_reject_subscription_topic
9
+ title 'Server Handles Unsupported Subscription Topics'
10
+ description %(
11
+ When processing a request for a Subscription a server SHOULD verify that the Subscription is supported and does
12
+ not contain any information not implemented by the server. If the Subscription is not supported, the server
13
+ should reject the Subscription create request, or it should attempt to adjust the Subscription. When
14
+ processing a request for a Subscription, a server SHOULD validate that the SubscriptionTopic is
15
+ valid and implemented by the server.
16
+
17
+ The test will pass if the server either
18
+ 1. rejects the Subscription by responding with a non-201 response, or
19
+ 2. updates the Subscription resource to remove or replace the unsupported value.
20
+ )
21
+
22
+ verifies_requirements 'hl7.fhir.uv.subscriptions_1.1.0@8'
23
+
24
+ input :subscription_resource,
25
+ title: 'Workflow Subscription Resource',
26
+ type: 'textarea',
27
+ description: %(
28
+ A Subscription resource in JSON format that Inferno will send to the server under test
29
+ so that it can demonstrate its ability to perform the Subscription creation and Notification
30
+ response workflow. The instance must be conformant to the R4/B Topic-Based Subscription profile.
31
+ Inferno may modify the Subscription before submission, e.g., to point to Inferno's notification endpoint.
32
+ This input is also used by the unsupported Subscription test as the base on which to add unsupported
33
+ element values to test for server rejection.
34
+ )
35
+ input :unsupported_subscription_topic,
36
+ title: 'Unsupported Subscription Topic',
37
+ description: %(A Subscription Topic for the `criteria` element that is not implemented by the server to test
38
+ for Subscription rejection.),
39
+ optional: true
40
+
41
+ run do
42
+ skip_if(unsupported_subscription_topic.blank?, %(
43
+ Provide a value in the "Unsupported Subscription Topic" input to run this test.))
44
+
45
+ assert_valid_json(subscription_resource)
46
+ subscription = JSON.parse(subscription_resource)
47
+
48
+ unsupported_info = {
49
+ 'unsupported_title' => 'unsupported `SubscriptionTopic`',
50
+ 'field_path' => ['criteria'],
51
+ 'field_value' => unsupported_subscription_topic
52
+ }
53
+
54
+ field_name = unsupported_info['field_path'].last
55
+ subscription[field_name] = unsupported_info['field_value']
56
+
57
+ send_unsupported_subscription(subscription, unsupported_info['unsupported_title'],
58
+ [unsupported_info['field_path']], [unsupported_info['field_value']])
59
+
60
+ no_error_verification('Unsupported Subscription creation error handling failures.')
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,4 +1,10 @@
1
- require_relative 'subscription_rejection/reject_subscriptions_test'
1
+ require_relative 'subscription_rejection/reject_subscription_channel_endpoint_test'
2
+ require_relative 'subscription_rejection/reject_subscription_channel_payload_combo_test'
3
+ require_relative 'subscription_rejection/reject_subscription_channel_type_test'
4
+ require_relative 'subscription_rejection/reject_subscription_cross_version_extension_test'
5
+ require_relative 'subscription_rejection/reject_subscription_filter_test'
6
+ require_relative 'subscription_rejection/reject_subscription_payload_type_test'
7
+ require_relative 'subscription_rejection/reject_subscription_topic_test'
2
8
 
3
9
  module SubscriptionsTestKit
4
10
  module SubscriptionsR5BackportR4Server
@@ -15,7 +21,13 @@ module SubscriptionsTestKit
15
21
  :unsupported_subscription_channel_endpoint, :unsupported_subscription_payload_type,
16
22
  :unsupported_subscription_channel_payload_combo
17
23
 
18
- test from: :subscriptions_r4_server_reject_subscriptions
24
+ test from: :subscriptions_r4_server_reject_subscription_cross_version_extension
25
+ test from: :subscriptions_r4_server_reject_subscription_topic
26
+ test from: :subscriptions_r4_server_reject_subscription_filter
27
+ test from: :subscriptions_r4_server_reject_subscription_channel_type
28
+ test from: :subscriptions_r4_server_reject_subscription_channel_endpoint
29
+ test from: :subscriptions_r4_server_reject_subscription_payload_type
30
+ test from: :subscriptions_r4_server_reject_subscription_channel_payload_combo
19
31
  end
20
32
  end
21
33
  end
@@ -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
 
@@ -1,3 +1,4 @@
1
1
  module SubscriptionsTestKit
2
- VERSION = '0.9.3'.freeze
2
+ VERSION = '0.10.0'.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.3
4
+ version: 0.10.0
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: 2024-11-07 00:00:00.000000000 Z
11
+ date: 2025-02-26 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
@@ -88,7 +97,13 @@ files:
88
97
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/handshake_heartbeat_group.rb
89
98
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/status_operation/status_invocation_test.rb
90
99
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/status_operation_group.rb
91
- - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscriptions_test.rb
100
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_channel_endpoint_test.rb
101
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_channel_payload_combo_test.rb
102
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_channel_type_test.rb
103
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_cross_version_extension_test.rb
104
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_filter_test.rb
105
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_payload_type_test.rb
106
+ - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection/reject_subscription_topic_test.rb
92
107
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/subscription_rejection_group.rb
93
108
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/workflow_group.rb
94
109
  - lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server_suite.rb
@@ -99,6 +114,7 @@ homepage: https://github.com/inferno-framework/subscriptions-test-kit
99
114
  licenses:
100
115
  - Apache-2.0
101
116
  metadata:
117
+ inferno_test_kit: 'true'
102
118
  homepage_uri: https://github.com/inferno-framework/subscriptions-test-kit
103
119
  source_code_uri: https://github.com/inferno-framework/subscriptions-test-kit
104
120
  post_install_message:
@@ -109,14 +125,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
125
  requirements:
110
126
  - - ">="
111
127
  - !ruby/object:Gem::Version
112
- version: 3.1.2
128
+ version: 3.3.6
113
129
  required_rubygems_version: !ruby/object:Gem::Requirement
114
130
  requirements:
115
131
  - - ">="
116
132
  - !ruby/object:Gem::Version
117
133
  version: '0'
118
134
  requirements: []
119
- rubygems_version: 3.3.7
135
+ rubygems_version: 3.5.22
120
136
  signing_key:
121
137
  specification_version: 4
122
138
  summary: Subscriptions Test Kit
@@ -1,185 +0,0 @@
1
- require_relative '../common/subscription_creation'
2
-
3
- module SubscriptionsTestKit
4
- module SubscriptionsR5BackportR4Server
5
- class RejectSubscriptionsTest < Inferno::Test
6
- include SubscriptionCreation
7
-
8
- id :subscriptions_r4_server_reject_subscriptions
9
- title 'Server Handles Unsupported Subscriptions'
10
- description %(
11
- When processing a request for a Subscription a server SHOULD verify that the Subscription is supported and does
12
- not contain any information not implemented by the server. If the Subscription is not supported, the server
13
- should reject the Subscription create request, or it should attempt to adjust the Subscription. This test checks
14
- that the server correctly rejects or adjusts the Subscription in the following cases:
15
-
16
- - The Subscription contains cross-version extension
17
- - The Subscription contains a Subscription Topic not implemented by the server
18
- - The Subscription contains a filtering criteria not implemented by the server
19
- - The Subscription contains channel type not implemented by the server
20
- - The Subscription contains an unsupported channel endpoint
21
- - The Subscription contains a payload type not implemented by the server
22
- - The Subscription contains an unsupported channel and payload type combination
23
-
24
- The test will pass if the server either
25
- 1. rejects the Subscription by responding with a non-201 response, or
26
- 2. updates the Subscription resource to remove or replace the unsupported value.
27
- )
28
-
29
- verifies_requirements 'hl7.fhir.uv.subscriptions_1.1.0@8',
30
- 'hl7.fhir.uv.subscriptions_1.1.0@9',
31
- 'hl7.fhir.uv.subscriptions_1.1.0@10',
32
- 'hl7.fhir.uv.subscriptions_1.1.0@11',
33
- 'hl7.fhir.uv.subscriptions_1.1.0@12',
34
- 'hl7.fhir.uv.subscriptions_1.1.0@13'
35
-
36
- input :subscription_resource,
37
- title: 'Workflow Subscription Resource',
38
- type: 'textarea',
39
- description: %(
40
- A Subscription resource in JSON format that Inferno will send to the server under test
41
- so that it can demonstrate its ability to perform the Subscription creation and Notification
42
- response workflow. The instance must be conformant to the R4/B Topic-Based Subscription profile.
43
- Inferno may modify the Subscription before submission, e.g., to point to Inferno's notification endpoint.
44
- This input is also used by the unsupported Subscription test as the base on which to add unsupported
45
- element values to test for server rejection.
46
- )
47
- input :unsupported_subscription_topic,
48
- title: 'Unsupported Subscription Topic',
49
- description: %(A Subscription Topic for the `criteria` element that is not implemented by the server to test
50
- for Subscription rejection.),
51
- optional: true
52
- input :unsupported_subscription_filter,
53
- title: 'Unsupported Subscription Filter',
54
- description: %(A value for `filterCriteria` extension under the `criteria` that is not implemented by the
55
- server to test for Subscription rejection.),
56
- optional: true
57
- input :unsupported_subscription_channel_type,
58
- title: 'Unsupported Subscription Channel Type',
59
- description: %(A value for the `channel.type` element that is not implemented by the server to test for
60
- Subscription rejection.),
61
- optional: true
62
- input :unsupported_subscription_channel_endpoint,
63
- title: 'Unsupported Subscription Channel Endpoint',
64
- description: 'An unsupported value for the `channel.endpoint` element to test for Subscription rejection.',
65
- optional: true
66
- input :unsupported_subscription_payload_type,
67
- title: 'Unsupported Subscription Payload Type',
68
- description: %(A value for the `content` extension under the `channel.payload` element that is not
69
- implemented by the server to test for Subscription rejection.),
70
- optional: true
71
- input :unsupported_subscription_channel_payload_combo,
72
- title: 'Unsupported Subscription Channel and Payload Combination',
73
- description: %(
74
- A channel (`channel.type`) and payload type (`content` extension under the `channel.payload` element)
75
- combination not implemented by the server to test for Subscription
76
- rejection. Provide in the json format e.g. {channel: <'channel_type'>, payload: <'payload_type'>}.
77
- ),
78
- optional: true
79
-
80
- def unsupported_subscriptions
81
- [
82
- {
83
- 'unsupported_title' => 'cross-version extensions',
84
- 'field_path' => ['_criteria'],
85
- 'field_value' => { 'extension' => [{
86
- url: 'http://hl7.org/fhir/5.0/subscriptions-backport/StructureDefinition/backport-filter-criteria',
87
- valueString: 'Encounter?patient=Patient/123'
88
- }] }
89
- },
90
- {
91
- 'unsupported_title' => 'unsupported `SubscriptionTopic`',
92
- 'field_path' => ['criteria'],
93
- 'field_value' => unsupported_subscription_topic
94
- },
95
- {
96
- 'unsupported_title' => 'unsupported filter criteria',
97
- 'field_path' => ['_criteria'],
98
- 'field_value' => if unsupported_subscription_filter.nil?
99
- unsupported_subscription_filter
100
- else
101
- { 'extension' => [{
102
- url: 'http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-filter-criteria',
103
- valueString: unsupported_subscription_filter
104
- }] }
105
- end
106
- },
107
- {
108
- 'unsupported_title' => 'unsupported channel type',
109
- 'field_path' => ['channel', 'type'],
110
- 'field_value' => unsupported_subscription_channel_type
111
- },
112
- {
113
- 'unsupported_title' => 'unsupported channel URL',
114
- 'field_path' => ['channel', 'endpoint'],
115
- 'field_value' => unsupported_subscription_channel_endpoint
116
- },
117
- {
118
- 'unsupported_title' => 'unsupported channel type',
119
- 'field_path' => ['channel', 'type'],
120
- 'field_value' => unsupported_subscription_channel_type
121
- },
122
- {
123
- 'unsupported_title' => 'unsupported payload type',
124
- 'field_path' => ['channel', 'payload'],
125
- 'field_value' => unsupported_subscription_payload_type
126
- }
127
- ]
128
- end
129
-
130
- run do
131
- assert_valid_json(subscription_resource)
132
- subscription = JSON.parse(subscription_resource)
133
-
134
- unsupported_subscriptions.each do |unsupported_info|
135
- next if unsupported_info['field_value'].blank?
136
-
137
- field_name = unsupported_info['field_path'].last
138
-
139
- if unsupported_info['field_path'].length > 1
140
- outer_field_name = unsupported_info['field_path'].first
141
- subscription_field = subscription[outer_field_name]
142
- else
143
- subscription_field = subscription
144
- end
145
-
146
- original_field_value = subscription_field[field_name]
147
- subscription_field[field_name] = unsupported_info['field_value']
148
-
149
- send_unsupported_subscription(subscription, unsupported_info['unsupported_title'],
150
- [unsupported_info['field_path']], [unsupported_info['field_value']])
151
-
152
- if original_field_value.nil?
153
- subscription_field.delete(field_name)
154
- else
155
- subscription_field[field_name] = original_field_value
156
- end
157
- end
158
-
159
- if unsupported_subscription_channel_payload_combo.present?
160
- assert_valid_json(unsupported_subscription_channel_payload_combo)
161
- channel_payload_combo = JSON.parse(unsupported_subscription_channel_payload_combo)
162
- channel_value = channel_payload_combo['channel']
163
- payload_value = channel_payload_combo['payload']
164
-
165
- if channel_value.blank? || payload_value.blank?
166
- add_message('error', %(Channel and payload values are not populated correctly in unsupported channel and
167
- payload combination input.))
168
- else
169
- subscription_channel = subscription['channel']
170
- subscription_channel['type'] = channel_value
171
- subscription_channel['payload'] = payload_value
172
-
173
- channel_path = ['channel', 'type']
174
- payload_path = ['channel', 'payload']
175
-
176
- send_unsupported_subscription(subscription, 'unsupported channel and payload combination',
177
- [channel_path, payload_path], [channel_value, payload_value])
178
- end
179
- end
180
-
181
- no_error_verification('Unsupported Subscription creation error handling failures.')
182
- end
183
- end
184
- end
185
- end