Module: SubscriptionsTestKit::SubscriptionsR5BackportR4Server::SubscriptionCreation
- Included in:
- NotificationDeliveryTest, RejectSubscriptionChannelEndpointTest, RejectSubscriptionChannelPayloadComboTest, RejectSubscriptionChannelTypeTest, RejectSubscriptionCrossVersionExtensionTest, RejectSubscriptionFilterTest, RejectSubscriptionPayloadTypeTest, RejectSubscriptionTopicTest
- Defined in:
- lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb
Instance Method Summary collapse
- #get_new_subscription_value(subscription, field_path) ⇒ Object
- #json_parse(json) ⇒ Object
- #no_error_verification(message) ⇒ Object
- #normalize_value(value) ⇒ Object
- #send_subscription(subscription) ⇒ Object
- #send_unsupported_subscription(subscription, unsupported_type, field_paths, subscription_field_old_values) ⇒ Object
- #subscription_payload_type(subscription) ⇒ Object
Instance Method Details
#get_new_subscription_value(subscription, field_path) ⇒ Object
15 16 17 |
# File 'lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb', line 15 def get_new_subscription_value(subscription, field_path) field_path.reduce(subscription) { |obj, path| obj[path] } end |
#json_parse(json) ⇒ Object
8 9 10 11 12 13 |
# File 'lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb', line 8 def json_parse(json) JSON.parse(json) rescue JSON::ParserError ('error', "#{request_number}Invalid JSON.") false end |
#no_error_verification(message) ⇒ Object
4 5 6 |
# File 'lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb', line 4 def no_error_verification() assert .none? { |msg| msg[:type] == 'error' }, end |
#normalize_value(value) ⇒ Object
19 20 21 22 23 |
# File 'lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb', line 19 def normalize_value(value) return value.deep_transform_keys(&:to_sym) if value.is_a?(Hash) value end |
#send_subscription(subscription) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb', line 62 def send_subscription(subscription) = ['subscription_creation'] payload_type = subscription_payload_type(subscription) .append(payload_type) if payload_type.present? fhir_operation('/Subscription', body: subscription, tags:) assert_response_status(201) json_parse(request.response_body) end |
#send_unsupported_subscription(subscription, unsupported_type, field_paths, subscription_field_old_values) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb', line 25 def send_unsupported_subscription(subscription, unsupported_type, field_paths, subscription_field_old_values) fhir_operation('/Subscription', body: subscription) return if request.status != 201 new_subscription = json_parse(request.response_body) return unless new_subscription altered_field = false field_paths.each_with_index do |field_path, index| subscription_field_new_value = get_new_subscription_value(new_subscription, field_path) new_value = normalize_value(subscription_field_new_value) old_value = normalize_value(subscription_field_old_values[index]) if new_value != old_value altered_field = true break end end return if altered_field ('error', %( Sending a Subscription with #{unsupported_type} should be rejected, or the Subscription should be altered to fix the unsupported value.)) end |
#subscription_payload_type(subscription) ⇒ Object
52 53 54 55 56 57 58 59 60 |
# File 'lib/subscriptions_test_kit/suites/subscriptions_r5_backport_r4_server/common/subscription_creation.rb', line 52 def subscription_payload_type(subscription) payload_extensions = subscription.dig('channel', '_payload', 'extension') return unless payload_extensions payload_type = payload_extensions.find do |ext| ext['url'].ends_with?('/backport-payload-content') end payload_type&.dig('valueCode') end |