Module: SubscriptionsTestKit::SubscriptionsR5BackportR4Server::SubscriptionCreation

Instance Method Summary collapse

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
  add_message('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(message)
  assert messages.none? { |msg| msg[:type] == 'error' }, message
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)
  tags = ['subscription_creation']
  payload_type = subscription_payload_type(subscription)
  tags.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

  add_message('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