diff --git a/spec/subscriptions_test_kit/common/notification_conformance_verification_spec.rb b/spec/subscriptions_test_kit/common/notification_conformance_verification_spec.rb index 96500a5..b01c389 100644 --- a/spec/subscriptions_test_kit/common/notification_conformance_verification_spec.rb +++ b/spec/subscriptions_test_kit/common/notification_conformance_verification_spec.rb @@ -1,9 +1,7 @@ require_relative '../../../lib/subscriptions_test_kit/common/notification_conformance_verification' -RSpec.describe SubscriptionsTestKit::NotificationConformanceVerification do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } - let(:test_session) { repo_create(:test_session, test_suite_id: suite.id) } +RSpec.describe SubscriptionsTestKit::NotificationConformanceVerification, :runnable do + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } let(:full_resource_notification_bundle) do @@ -29,7 +27,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -41,12 +39,11 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end let(:subscription_id) { '123' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) @@ -64,20 +61,6 @@ def entity_result_message_type(runnable) .first end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Notification Verification' do let(:test) do Class.new(Inferno::Test) do @@ -110,7 +93,7 @@ def run(runnable, inputs = {}) end it 'passes if conformant notification bundle passed in' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) result = run(test, notification_bundle: full_resource_notification_bundle.to_json, @@ -120,7 +103,7 @@ def run(runnable, inputs = {}) end it 'passes if conformant notification bundle passed in with correct status argument' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) result = run(test, notification_bundle: full_resource_notification_bundle.to_json, @@ -152,7 +135,7 @@ def run(runnable, inputs = {}) end it 'fails if passed in bundle not a history type Bundle' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['type'] = 'collection' @@ -174,7 +157,7 @@ def run(runnable, inputs = {}) end it 'fails if SubscriptionStatus does not have the `request` field populated' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['entry'].first.delete('request') @@ -189,7 +172,7 @@ def run(runnable, inputs = {}) end it 'fails if SubscriptionStatus does not have the `response` field populated' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['entry'].first.delete('response') @@ -204,7 +187,7 @@ def run(runnable, inputs = {}) end it 'fails if SubscriptionStatus does not have the $status operation url in the `request` field' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['entry'].first['request']['url'] = 'https://fhirserver.org/fhir/Subscription/123/$wrongoperation' @@ -219,7 +202,7 @@ def run(runnable, inputs = {}) end it 'fails if entry in Bundle does not have the `request` field populated' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['entry'].last.delete('request') @@ -234,7 +217,7 @@ def run(runnable, inputs = {}) end it 'fails if entry in Bundle does not have the `response` field populated' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['entry'].last.delete('response') @@ -260,7 +243,7 @@ def run(runnable, inputs = {}) end it 'fails if SubscriptionStatus Parameters resource is not conformant' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_failure.to_json).then .to_return(status: 200, body: operation_outcome_success.to_json) @@ -275,7 +258,7 @@ def run(runnable, inputs = {}) end it 'fails if SubscriptionStatus type is not set to the notification type passed in' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) result = run(test, notification_bundle: full_resource_notification_bundle.to_json, @@ -289,7 +272,7 @@ def run(runnable, inputs = {}) end it 'fails if status argument is passed in but does not equal the status of the SubscriptionStatus' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) result = run(test, notification_bundle: full_resource_notification_bundle.to_json, @@ -561,7 +544,7 @@ def run(runnable, inputs = {}) end it 'passes if conformant full-resource notification bundle passed in' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) result = run(test, notification_bundle: full_resource_notification_bundle.to_json) @@ -582,7 +565,7 @@ def run(runnable, inputs = {}) end it 'produces warning if full-resource notification bundle does not contain parameter.topic field' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['entry'].first['resource']['parameter'].delete_at(1) @@ -596,7 +579,7 @@ def run(runnable, inputs = {}) end it 'fails if SubscriptionStatus does not contain any event-notifications' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) full_resource_notification_bundle['entry'].first['resource']['parameter'].pop @@ -610,7 +593,7 @@ def run(runnable, inputs = {}) end it 'fails if any entries in full-resource notification bundle are not conformant' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_failure.to_json) result = run(test, notification_bundle: full_resource_notification_bundle.to_json) diff --git a/spec/subscriptions_test_kit/common/subscription_conformance_verification_spec.rb b/spec/subscriptions_test_kit/common/subscription_conformance_verification_spec.rb index 3e08886..0973254 100644 --- a/spec/subscriptions_test_kit/common/subscription_conformance_verification_spec.rb +++ b/spec/subscriptions_test_kit/common/subscription_conformance_verification_spec.rb @@ -1,11 +1,9 @@ require_relative '../../../lib/subscriptions_test_kit/common/subscription_conformance_verification' -RSpec.describe SubscriptionsTestKit::SubscriptionConformanceVerification do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } - let(:test_session) { repo_create(:test_session, test_suite_id: suite.id) } +RSpec.describe SubscriptionsTestKit::SubscriptionConformanceVerification, :runnable do + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - + let(:access_token) { 'SAMPLE_TOKEN' } let(:subscription_resource) do JSON.parse(File.read(File.join( __dir__, '../..', 'fixtures', 'subscription_resource_example.json' @@ -17,7 +15,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -29,13 +27,10 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end - let(:access_token) { 'SAMPLE_TOKEN' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -44,20 +39,6 @@ def entity_result_message(runnable) .join(' ') end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Subscription Verification' do let(:test) do Class.new(Inferno::Test) do @@ -88,7 +69,7 @@ def run(runnable, inputs = {}) end it 'passes if conformant subscription passed in' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) result = run(test, subscription_resource: subscription_resource.to_json) @@ -124,7 +105,7 @@ def run(runnable, inputs = {}) end it 'fails if subscription is not a conformant resource' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_failure.to_json) result = run(test, subscription_resource: subscription_resource.to_json) @@ -137,7 +118,7 @@ def run(runnable, inputs = {}) end it 'warns if subscription contains a cross-version extension' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) subscription_resource['channel']['_type']['extension'].append( @@ -157,7 +138,7 @@ def run(runnable, inputs = {}) it 'fails if subscription does not contain criteria field' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) subscription_resource.delete('criteria') @@ -171,7 +152,7 @@ def run(runnable, inputs = {}) it 'fails if subscription criteria does not contain valid URL' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) subscription_resource['criteria'] = ['Invalid Value'] diff --git a/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/cs_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/cs_conformance_test_spec.rb index 4068051..9330ec1 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/cs_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/cs_conformance_test_spec.rb @@ -2,11 +2,8 @@ 'capability_statement/cs_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::CSConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } - let(:capability_statement) do JSON.parse(File.read(File.join( __dir__, '../../../', 'fixtures', 'capability_statement_example.json' @@ -18,7 +15,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,12 +27,11 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end let(:server_endpoint) { 'http://example.com/fhir' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) @@ -45,20 +41,6 @@ def entity_result_message(runnable) .join(' ') end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Server Coverage Topic Discovery' do let(:test) do Class.new(SubscriptionsTestKit::SubscriptionsR5BackportR4Server::CSConformanceTest) do @@ -85,7 +67,7 @@ def run(runnable, inputs = {}) it 'passes if Capability Statement retrieved containing subscription topic extension' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) get_capability_statement = stub_request(:get, "#{server_endpoint}/metadata") .to_return(status: 200, body: capability_statement.to_json) @@ -113,7 +95,7 @@ def run(runnable, inputs = {}) it 'fails if Capability Statement returned is not conformant' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_failure.to_json) get_capability_statement = stub_request(:get, "#{server_endpoint}/metadata") .to_return(status: 200, body: capability_statement.to_json) @@ -131,7 +113,7 @@ def run(runnable, inputs = {}) capability_statement.delete('rest') - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) get_capability_statement = stub_request(:get, "#{server_endpoint}/metadata") .to_return(status: 200, body: capability_statement.to_json) @@ -148,7 +130,7 @@ def run(runnable, inputs = {}) capability_statement['rest'][0]['mode'] = 'client' - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) get_capability_statement = stub_request(:get, "#{server_endpoint}/metadata") .to_return(status: 200, body: capability_statement.to_json) @@ -164,7 +146,7 @@ def run(runnable, inputs = {}) allow(test).to receive(:suite).and_return(suite) capability_statement['rest'][0]['resource'].shift - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) get_capability_statement = stub_request(:get, "#{server_endpoint}/metadata") .to_return(status: 200, body: capability_statement.to_json) @@ -181,7 +163,7 @@ def run(runnable, inputs = {}) capability_statement['rest'][0]['resource'][0].delete('supportedProfile') - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) get_capability_statement = stub_request(:get, "#{server_endpoint}/metadata") .to_return(status: 200, body: capability_statement.to_json) @@ -199,7 +181,7 @@ def run(runnable, inputs = {}) allow(test).to receive(:suite).and_return(suite) capability_statement['rest'][0]['resource'][0]['supportedProfile'] = 'incorrect_profile' - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) get_capability_statement = stub_request(:get, "#{server_endpoint}/metadata") .to_return(status: 200, body: capability_statement.to_json) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/topic_discovery_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/topic_discovery_test_spec.rb index 55c90ae..c9b7d4c 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/topic_discovery_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/capability_statement/topic_discovery_test_spec.rb @@ -2,11 +2,10 @@ 'capability_statement/topic_discovery_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::TopicDiscoveryTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:test) { Inferno::Repositories::Tests.new.find('subscriptions_r4_server_topic_discovery') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } + let(:test) { find_test(suite, described_class.id) } + # let(:test) { Inferno::Repositories::Tests.new.find('subscriptions_r4_server_topic_discovery') } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:capability_statement) do @@ -29,20 +28,6 @@ let(:access_token) { 'SAMPLE_TOKEN' } let(:subscription_topic) { 'http://fhirserver.org/topics/patient-admission' } - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -83,81 +68,49 @@ def create_subscription_request(url: server_endpoint, payload_type: 'full-resour end it 'passes if Capability Statement retrieved containing subscription topic extension' do - allow(test).to receive(:suite).and_return(suite) - - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('pass') end it 'skips if no Capability Statement returned in previous test' do - allow(test).to receive(:suite).and_return(suite) - - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return({}) - - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: {} }) expect(result.result).to eq('skip') expect(result.result_message).to eq('No Capability Statement received in previous test') end it 'fails if Capability Statement does not contain the rest field' do - allow(test).to receive(:suite).and_return(suite) - capability_statement.delete('rest') - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('fail') expect(result.result_message).to eq('Capability Statement missing the `rest` field') end it 'fails if Capability Statement does not contain entry rest field with mode server' do - allow(test).to receive(:suite).and_return(suite) - capability_statement['rest'][0]['mode'] = 'client' - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('fail') expect(result.result_message).to eq("Capability Statement missing entry in `rest` with a `mode` set to 'server'") end it 'fails if Capability Statement does not contain the Subscription resource in the rest field' do - allow(test).to receive(:suite).and_return(suite) - capability_statement['rest'][0]['resource'].shift allow_any_instance_of(test) .to receive(:scratch_resource) .and_return(capability_statement_resource) - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('fail') expect(result.result_message).to eq('Capability Statement missing `Subscription` resource in `rest` field') end it 'fails if Subscription in Capability Statement does not contain the extension field' do - allow(test).to receive(:suite).and_return(suite) - capability_statement['rest'][0]['resource'][0].delete('extension') - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('fail') expect(result.result_message).to eq( 'Capability Statement missing the `extension` field on the Subscription resource' @@ -165,16 +118,10 @@ def create_subscription_request(url: server_endpoint, payload_type: 'full-resour end it 'fails if Subscription does not contain the subscriptiontopic extension in the extension field' do - allow(test).to receive(:suite).and_return(suite) - capability_statement['rest'][0]['resource'][0]['extension'].shift capability_statement['rest'][0]['resource'][0]['extension'][0]['url'] = 'incorrect_extension' - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('fail') expect(result.result_message).to match( 'The server SHOULD support topic discovery via the CapabilityStatement SubscriptionTopic Canonical' @@ -182,29 +129,17 @@ def create_subscription_request(url: server_endpoint, payload_type: 'full-resour end it 'provides warning if no Subscription requests made prior to this test' do - allow(test).to receive(:suite).and_return(suite) - - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('pass') expect(entity_result_message(test)).to match('No Subscription requests have been made in previous tests.') expect(entity_result_message_type(test)).to eq('warning') end it 'provides warning if no Subscriptions contain topics in the criteria field' do - allow(test).to receive(:suite).and_return(suite) - - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - subscription_resource.delete('criteria') create_subscription_request(body: subscription_resource) - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('pass') expect(entity_result_message(test)).to match( 'Subscriptions missing criteria field containing a Subscription topic URL. Could not verify any' @@ -213,29 +148,17 @@ def create_subscription_request(url: server_endpoint, payload_type: 'full-resour end it 'passes if Subscription request made and contains criteria found in subscription topic extension' do - allow(test).to receive(:suite).and_return(suite) - - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - create_subscription_request(body: subscription_resource) - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('pass') end it 'fails if Subscription request made and contains criteria not found in subscription topic extension' do - allow(test).to receive(:suite).and_return(suite) - - allow_any_instance_of(test) - .to receive(:scratch_resource) - .and_return(capability_statement_resource) - subscription_resource['criteria'] = 'unsupported_topic' create_subscription_request(body: subscription_resource) - result = run(test, subscription_topic:) + result = run(test, { url: server_endpoint }, { capability_statement: capability_statement_resource }) expect(result.result).to eq('fail') expect(result.result_message).to eq( "Subscription.criteria value(s) not found in Capability Statement's SubscriptionTopic Canonical extension" diff --git a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/creation_response_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/creation_response_conformance_test_spec.rb index 8299d8c..b3112ea 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/creation_response_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/creation_response_conformance_test_spec.rb @@ -2,10 +2,8 @@ 'common/interaction/creation_response_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::CreationResponseConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:subscription_resource) do @@ -40,20 +38,6 @@ def create_subscription_request(url: server_endpoint, payload_type: 'full-resour ) end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Server Workflow Subscription Response Test' do let(:test) do Class.new(described_class) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/notification_delivery_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/notification_delivery_test_spec.rb index f8c2277..e355b16 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/notification_delivery_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/notification_delivery_test_spec.rb @@ -2,12 +2,10 @@ 'common/interaction/notification_delivery_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::NotificationDeliveryTest, :request do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:test) { Inferno::Repositories::Tests.new.find('subscriptions_r4_server_notification_delivery') } - let(:test_group) { Inferno::Repositories::TestGroups.new.find('subscriptions_r4_server_interaction') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } + let(:test) { find_test suite, described_class.id } + let(:test_group) { test.parent } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:handshake_bundle) do JSON.parse(File.read(File.join( @@ -39,7 +37,6 @@ end let(:access_token) { 'SAMPLE_TOKEN' } - let(:server_endpoint) { 'http://example.com/fhir' } let(:server_credentials) do { @@ -61,21 +58,6 @@ def post_fhir(path, data) post path, data.to_json, 'CONTENT_TYPE' => 'application/fhir+json' end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Server Receive Notification Test' do let(:test) do Class.new(SubscriptionsTestKit::SubscriptionsR5BackportR4Server::NotificationDeliveryTest) do diff --git a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/subscription_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/subscription_conformance_test_spec.rb index a18473a..4f50f4f 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/subscription_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction/subscription_conformance_test_spec.rb @@ -2,10 +2,8 @@ 'common/interaction/subscription_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::SubscriptionConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,27 +28,12 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end let(:access_token) { 'SAMPLE_TOKEN' } - let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end + # let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } describe 'Server Workflow Subscription Test' do let(:test) do @@ -72,7 +55,7 @@ def run(runnable, inputs = {}) it 'passes if conformant subscription passed in' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) result = run(test, subscription_resource: subscription_resource.to_json, diff --git a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_conformance_test_spec.rb index d2156f1..e1db2b7 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_conformance_test_spec.rb @@ -40,7 +40,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -52,7 +52,7 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -63,7 +63,6 @@ let(:server_endpoint) { 'http://example.com/fhir/Subscription' } let(:access_token) { 'SAMPLE_TOKEN' } let(:subscription_id) { '123' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } def create_request(url: subscription_channel, direction: 'incoming', tags: nil, body: nil, status: 200, headers: nil) headers ||= [ @@ -111,7 +110,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, end it 'passes if conformant full-resource event-notification sent to Subscription channel' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], @@ -123,7 +122,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, end it 'passes if conformant empty event-notification sent to Subscription channel' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'empty'], @@ -152,7 +151,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, end it 'fails if a non-conformant event-notification is made' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], body: subscription_resource, status: 201) @@ -165,7 +164,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, end it 'uses the most recent Susbcription if there are multiple' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) first_subscription_id = subscription_resource['id'] create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], @@ -190,7 +189,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, it 'fails if an expected header is not sent' do subscription_resource.dig('channel', 'header') << 'accept: application/fhir+json' - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'empty'], @@ -203,7 +202,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, it 'fails if wrong mime type is sent' do subscription_resource['channel']['payload'] = 'application/json' - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'empty'], @@ -237,7 +236,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, end it 'passes if conformant full-resource event-notification sent to Subscription channel' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], diff --git a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_presence_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_presence_test_spec.rb index cb65c85..4de349f 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_presence_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/common/interaction_verification/notification_presence_test_spec.rb @@ -3,7 +3,7 @@ RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::NotificationPresenceTest do let(:suite_id) { 'subscriptions_r5_backport_r4_server' } - let(:test) { described_class } + let(:test) { find_test suite, described_class.id } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:full_resource_notification_bundle) do @@ -41,7 +41,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -53,7 +53,7 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -64,7 +64,6 @@ let(:server_endpoint) { 'http://example.com/fhir/Subscription' } let(:access_token) { 'SAMPLE_TOKEN' } let(:subscription_id) { '123' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } def create_request(url: subscription_channel, direction: 'incoming', tags: nil, body: nil, status: 200, headers: nil) headers ||= [ @@ -94,7 +93,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], body: subscription_resource, status: 201) create_request(tags: ['event-notification', subscription_id], body: full_resource_notification_bundle) - result = run(test) + result = run(test, { url: server_endpoint }) expect(result.result).to eq('pass') end @@ -102,14 +101,14 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'empty'], body: subscription_resource, status: 201) create_request(tags: ['event-notification', subscription_id], body: empty_notification_bundle) - result = run(test) + result = run(test, { url: server_endpoint }) expect(result.result).to eq('pass') end it 'skips if no Subscription requests were made' do create_request(tags: ['event-notification', subscription_id], body: full_resource_notification_bundle) - result = run(test) + result = run(test, { url: server_endpoint }) expect(result.result).to eq('skip') expect(result.result_message).to match(/No successful Subscription creation request/) end @@ -118,7 +117,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], body: subscription_resource, status: 201) create_request(tags: ['handshake', subscription_id], body: handshake_bundle) - result = run(test) + result = run(test, { url: server_endpoint }) expect(result.result).to eq('pass') end @@ -127,7 +126,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, body: subscription_resource, status: 201) create_request(tags: ['event-notification', subscription_id], body: empty_notification_bundle_non_conformant) - result = run(test) + result = run(test, { url: server_endpoint }) expect(result.result).to eq('pass') end @@ -143,7 +142,7 @@ def create_request(url: subscription_channel, direction: 'incoming', tags: nil, create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], body: subscription_resource, status: 201) - result = run(test) + result = run(test, { url: server_endpoint }) expect(result.result).to eq('fail') expect(result.result_message).to match( /No notifications were received from the server related to Subscription #{second_subscription_id}./ diff --git a/spec/subscriptions_test_kit/subscription_r4_server/event_notification/empty_content/empty_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/event_notification/empty_content/empty_conformance_test_spec.rb index cd2cc24..386bb59 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/event_notification/empty_content/empty_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/event_notification/empty_content/empty_conformance_test_spec.rb @@ -2,11 +2,9 @@ 'event_notification/empty_content/empty_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::EmptyConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } let(:test) { Inferno::Repositories::Tests.new.find('subscriptions_r4_server_empty_conformance') } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:empty_notification_bundle) do @@ -28,7 +26,6 @@ let(:server_endpoint) { 'http://example.com/fhir/Subscription' } let(:access_token) { 'SAMPLE_TOKEN' } let(:subscription_id) { '123' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } def create_request(url: subscription_channel, direction: 'incoming', tags: nil, body: nil, status: 200, headers: nil) headers ||= [ @@ -61,20 +58,6 @@ def entity_result_message(runnable) .join(' ') end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - it 'omits if no Subscriptions are for empty Notifications' do create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], body: subscription_resource) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/event_notification/full_resource_content/full_resource_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/event_notification/full_resource_content/full_resource_conformance_test_spec.rb index 431ea29..56311d2 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/event_notification/full_resource_content/full_resource_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/event_notification/full_resource_content/full_resource_conformance_test_spec.rb @@ -2,10 +2,8 @@ 'event_notification/full_resource_content/full_resource_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::FullResourceConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:full_resource_notification_bundle) do @@ -25,7 +23,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -37,7 +35,7 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -48,7 +46,6 @@ let(:server_endpoint) { 'http://example.com/fhir/Subscription' } let(:access_token) { 'SAMPLE_TOKEN' } let(:subscription_id) { '123' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } def create_request(url: subscription_channel, direction: 'incoming', tags: nil, body: nil, status: 200, headers: nil) headers ||= [ @@ -81,20 +78,6 @@ def entity_result_message(runnable) .join(' ') end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Server Coverage Full Resource Notification Test' do let(:test) do Class.new(SubscriptionsTestKit::SubscriptionsR5BackportR4Server::FullResourceConformanceTest) do @@ -121,7 +104,7 @@ def run(runnable, inputs = {}) end it 'passes if conformant full-resource notification sent to Subscription channel' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'full-resource'], diff --git a/spec/subscriptions_test_kit/subscription_r4_server/event_notification/id_only_content/id_only_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/event_notification/id_only_content/id_only_conformance_test_spec.rb index 2399542..9e58ed0 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/event_notification/id_only_content/id_only_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/event_notification/id_only_content/id_only_conformance_test_spec.rb @@ -2,11 +2,8 @@ 'event_notification/id_only_content/id_only_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::IdOnlyConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:test) { Inferno::Repositories::Tests.new.find('subscriptions_r4_server_id_only_conformance') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } - let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } + let(:test) { find_test suite, described_class.id } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:id_only_notification_bundle) do @@ -60,24 +57,10 @@ def entity_result_message(runnable) .join(' ') end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - it 'omits if no Subscriptions are for id-only Notifications' do create_request(url: server_endpoint, direction: 'outgoing', tags: ['subscription_creation', 'empty'], body: subscription_resource) - result = run(test) + result = run(test, url: server_endpoint) expect(result.result).to eq('omit') expect(result.result_message).to eq('No Subscriptions sent with notification payload type of `id-only`') end @@ -87,7 +70,7 @@ def run(runnable, inputs = {}) body: subscription_resource) create_request(tags: ['event-notification', subscription_id], body: id_only_notification_bundle) - result = run(test) + result = run(test, url: server_endpoint) expect(result.result).to eq('pass') end end diff --git a/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/handshake_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/handshake_conformance_test_spec.rb index 3bbd816..5b81a65 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/handshake_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/handshake_conformance_test_spec.rb @@ -2,10 +2,8 @@ 'handshake_heartbeat/heartbeat_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::HandshakeConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:handshake_bundle) do @@ -25,7 +23,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -37,7 +35,7 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -47,7 +45,6 @@ end let(:subscription_id) { '123' } let(:access_token) { 'SAMPLE_TOKEN' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } let(:channel_type) { 'rest-hook' } def create_request(name: nil, tags: nil, direction: nil, url: subscription_channel, body: nil, status: 200, @@ -82,20 +79,6 @@ def entity_result_message(runnable) .join(' ') end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Server Coverage Handshake Test' do let(:test) do Class.new(SubscriptionsTestKit::SubscriptionsR5BackportR4Server::HandshakeConformanceTest) do @@ -114,7 +97,7 @@ def run(runnable, inputs = {}) end it 'passes if conformant Handshake Bundle sent to Subscription channel' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(name: 'subscription_create', direction: 'outgoing', tags: ['subscription_creation', 'Workflow'], @@ -150,7 +133,7 @@ def run(runnable, inputs = {}) end it 'fails if some rest-hook Subscriptions do not receive Handshake Bundle' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(name: 'subscription_create', direction: 'outgoing', tags: ['subscription_creation', 'Workflow'], diff --git a/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/heartbeat_conformance_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/heartbeat_conformance_test_spec.rb index 902ccb0..9c5659f 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/heartbeat_conformance_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/handshake_heartbeat/heartbeat_conformance_test_spec.rb @@ -2,10 +2,8 @@ 'handshake_heartbeat/heartbeat_conformance_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::HeartbeatConformanceTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:heartbeat_bundle) do @@ -25,7 +23,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -37,7 +35,7 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -47,7 +45,6 @@ end let(:subscription_id) { '123' } let(:access_token) { 'SAMPLE_TOKEN' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } let(:heartbeat_period) { 86400 } def create_request(name: nil, tags: nil, direction: nil, url: subscription_channel, body: nil, status: 200, @@ -82,20 +79,6 @@ def entity_result_message(runnable) .join(' ') end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Server Coverage Handshake Test' do let(:test) do Class.new(SubscriptionsTestKit::SubscriptionsR5BackportR4Server::HeartbeatConformanceTest) do @@ -114,7 +97,7 @@ def run(runnable, inputs = {}) end it 'passes if conformant Heartbeat Bundle sent to Subscription channel' do - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) create_request(name: 'subscription_create', direction: 'outgoing', tags: ['subscription_creation', 'Workflow'], diff --git a/spec/subscriptions_test_kit/subscription_r4_server/status_operation/status_invocation_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/status_operation/status_invocation_test_spec.rb index 9fa3858..bd90500 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/status_operation/status_invocation_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/status_operation/status_invocation_test_spec.rb @@ -2,10 +2,8 @@ 'status_operation/status_invocation_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::StatusInvocationTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:result) { repo_create(:result, test_session_id: test_session.id) } let(:subscription_status) do @@ -43,7 +41,6 @@ let(:server_endpoint) { 'http://example.com/fhir' } let(:access_token) { 'SAMPLE_TOKEN' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) @@ -76,20 +73,6 @@ def create_subscription_request(url: server_endpoint, payload_type: 'full-resour ) end - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - describe 'Server Coverage Subscription Status' do let(:test) do Class.new(SubscriptionsTestKit::SubscriptionsR5BackportR4Server::StatusInvocationTest) do @@ -116,7 +99,7 @@ def run(runnable, inputs = {}) it 'passes if Conformant Subscription status response returned from $status operation' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) status_operation = stub_request(:get, "#{server_endpoint}/Subscription/123/$status") .to_return(status: 200, body: subscription_status.to_json) @@ -173,7 +156,7 @@ def run(runnable, inputs = {}) it 'fails if Subscription status operation does not return a valid Bundle' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_failure.to_json) status_operation = stub_request(:get, "#{server_endpoint}/Subscription/123/$status") .to_return(status: 200, body: subscription_status.to_json) @@ -192,7 +175,7 @@ def run(runnable, inputs = {}) allow(test).to receive(:suite).and_return(suite) subscription_status['type'] = 'history' - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) status_operation = stub_request(:get, "#{server_endpoint}/Subscription/123/$status") .to_return(status: 200, body: subscription_status.to_json) @@ -212,7 +195,7 @@ def run(runnable, inputs = {}) it 'fails if Subscription status Bundle does not contain a subscription parameter with correct reference id' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json) status_operation = stub_request(:get, "#{server_endpoint}/Subscription/wrong_id/$status") .to_return(status: 200, body: subscription_status.to_json) @@ -233,7 +216,7 @@ def run(runnable, inputs = {}) it 'fails if Parameter resource in Subscription Status Bundle is not conformant' do allow(test).to receive(:suite).and_return(suite) - verification_request = stub_request(:post, "#{validator_url}/validate") + verification_request = stub_request(:post, validation_url) .to_return(status: 200, body: operation_outcome_success.to_json).then .to_return(status: 200, body: operation_outcome_failure.to_json) status_operation = stub_request(:get, "#{server_endpoint}/Subscription/123/$status") diff --git a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_endpoint_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_endpoint_test_spec.rb index 259bf8d..3d3adb4 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_endpoint_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_endpoint_test_spec.rb @@ -2,10 +2,8 @@ 'subscription_rejection/reject_subscription_channel_endpoint_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::RejectSubscriptionChannelEndpointTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,14 +28,16 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end + let(:access_token) { 'SAMPLE_TOKEN' } + let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } let(:server_endpoint) { 'http://example.com/fhir' } let(:server_credentials) do { - access_token: 'SAMPLE_TOKEN', + access_token:, refresh_token: 'REFRESH_TOKEN', expires_in: 3600, client_id: 'CLIENT_ID', @@ -48,24 +48,6 @@ let(:unsupported_subscription_channel_endpoint) { 'http://unsupported-email.com' } - let(:access_token) { 'SAMPLE_TOKEN' } - let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -104,7 +86,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -119,7 +101,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 400, body: subscription_resource.to_json) @@ -135,7 +117,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -153,7 +135,7 @@ def entity_result_message(runnable) stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_payload_combo_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_payload_combo_test_spec.rb index 360d4e7..9f266b5 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_payload_combo_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_payload_combo_test_spec.rb @@ -2,10 +2,8 @@ 'subscription_rejection/reject_subscription_channel_payload_combo_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::RejectSubscriptionChannelPayloadComboTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,14 +28,16 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end let(:server_endpoint) { 'http://example.com/fhir' } + let(:access_token) { 'SAMPLE_TOKEN' } + let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } let(:server_credentials) do { - access_token: 'SAMPLE_TOKEN', + access_token: access_token, refresh_token: 'REFRESH_TOKEN', expires_in: 3600, client_id: 'CLIENT_ID', @@ -50,24 +50,6 @@ { channel: 'email', payload: 'application/unsupported+payload' }.to_json end - let(:access_token) { 'SAMPLE_TOKEN' } - let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -106,7 +88,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -121,7 +103,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 400, body: subscription_resource.to_json) @@ -137,7 +119,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -156,7 +138,7 @@ def entity_result_message(runnable) stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_type_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_type_test_spec.rb index f4a7e0d..51379e3 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_type_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_channel_type_test_spec.rb @@ -2,10 +2,8 @@ 'subscription_rejection/reject_subscription_channel_type_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::RejectSubscriptionChannelTypeTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,14 +28,16 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end + let(:access_token) { 'SAMPLE_TOKEN' } + let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } let(:server_endpoint) { 'http://example.com/fhir' } let(:server_credentials) do { - access_token: 'SAMPLE_TOKEN', + access_token:, refresh_token: 'REFRESH_TOKEN', expires_in: 3600, client_id: 'CLIENT_ID', @@ -48,24 +48,6 @@ let(:unsupported_subscription_channel_type) { 'email' } - let(:access_token) { 'SAMPLE_TOKEN' } - let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -104,7 +86,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -119,7 +101,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 400, body: subscription_resource.to_json) @@ -135,7 +117,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -153,7 +135,7 @@ def entity_result_message(runnable) stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_cross_version_extension_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_cross_version_extension_test_spec.rb index 8872a73..b72c89c 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_cross_version_extension_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_cross_version_extension_test_spec.rb @@ -2,10 +2,8 @@ 'subscription_rejection/reject_subscription_cross_version_extension_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::RejectSubscriptionCrossVersionExtensionTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,14 +28,15 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end let(:server_endpoint) { 'http://example.com/fhir' } + let(:access_token) { 'SAMPLE_TOKEN' } let(:server_credentials) do { - access_token: 'SAMPLE_TOKEN', + access_token:, refresh_token: 'REFRESH_TOKEN', expires_in: 3600, client_id: 'CLIENT_ID', @@ -46,23 +45,7 @@ }.to_json end - let(:access_token) { 'SAMPLE_TOKEN' } let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) @@ -102,7 +85,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 400, body: subscription_resource.to_json) @@ -117,7 +100,7 @@ def entity_result_message(runnable) stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_filter_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_filter_test_spec.rb index fa580fb..1ac9c0f 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_filter_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_filter_test_spec.rb @@ -2,10 +2,8 @@ 'subscription_rejection/reject_subscription_filter_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::RejectSubscriptionFilterTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,14 +28,16 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end + let(:access_token) { 'SAMPLE_TOKEN' } + let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } let(:server_endpoint) { 'http://example.com/fhir' } let(:server_credentials) do { - access_token: 'SAMPLE_TOKEN', + access_token:, refresh_token: 'REFRESH_TOKEN', expires_in: 3600, client_id: 'CLIENT_ID', @@ -48,24 +48,6 @@ let(:unsupported_subscription_filter) { 'Encounter/unsupported-filter' } - let(:access_token) { 'SAMPLE_TOKEN' } - let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -104,7 +86,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -119,7 +101,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 400, body: subscription_resource.to_json) @@ -135,7 +117,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -156,7 +138,7 @@ def entity_result_message(runnable) stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_payload_type_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_payload_type_test_spec.rb index 682f26a..43d187c 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_payload_type_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_payload_type_test_spec.rb @@ -2,10 +2,8 @@ 'subscription_rejection/reject_subscription_payload_type_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::RejectSubscriptionPayloadTypeTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,15 +28,17 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end let(:server_endpoint) { 'http://example.com/fhir' } + let(:access_token) { 'SAMPLE_TOKEN' } + let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } let(:server_credentials) do { auth_type: 'public', - access_token: 'SAMPLE_TOKEN', + access_token:, refresh_token: 'REFRESH_TOKEN', expires_in: 3600, client_id: 'CLIENT_ID', @@ -49,24 +49,6 @@ let(:unsupported_subscription_payload_type) { 'application/unsupported+payload' } - let(:access_token) { 'SAMPLE_TOKEN' } - let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -136,7 +118,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -154,7 +136,7 @@ def entity_result_message(runnable) stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) diff --git a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_topic_test_spec.rb b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_topic_test_spec.rb index bacb2cc..37404b2 100644 --- a/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_topic_test_spec.rb +++ b/spec/subscriptions_test_kit/subscription_r4_server/subscription_rejection/reject_subscription_topic_test_spec.rb @@ -2,10 +2,8 @@ 'subscription_rejection/reject_subscription_topic_test' RSpec.describe SubscriptionsTestKit::SubscriptionsR5BackportR4Server::RejectSubscriptionTopicTest do - let(:suite) { Inferno::Repositories::TestSuites.new.find('subscriptions_r5_backport_r4_server') } - let(:session_data_repo) { Inferno::Repositories::SessionData.new } + let(:suite_id) { 'subscriptions_r5_backport_r4_server' } let(:results_repo) { Inferno::Repositories::Results.new } - let(:test_session) { repo_create(:test_session, test_suite_id: 'subscriptions_r5_backport_r4_server') } let(:subscription_resource) do JSON.parse(File.read(File.join( @@ -18,7 +16,7 @@ outcomes: [{ issues: [] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end @@ -30,14 +28,16 @@ message: 'Resource does not conform to profile' }] }], - sessionId: 'b8cf5547-1dc7-4714-a797-dc2347b93fe2' + sessionId: test_session.id } end + let(:access_token) { 'SAMPLE_TOKEN' } + let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } let(:server_endpoint) { 'http://example.com/fhir' } let(:server_credentials) do { - access_token: 'SAMPLE_TOKEN', + access_token:, refresh_token: 'REFRESH_TOKEN', expires_in: 3600, client_id: 'CLIENT_ID', @@ -48,24 +48,6 @@ let(:unsupported_subscription_topic) { 'http://fhirserver.org/topics/unsupported-topic' } - let(:access_token) { 'SAMPLE_TOKEN' } - let(:subscription_topic_url) { 'http://fhirserver.org/topics/patient-admission' } - let(:validator_url) { ENV.fetch('FHIR_RESOURCE_VALIDATOR_URL') } - - def run(runnable, inputs = {}) - test_run_params = { test_session_id: test_session.id }.merge(runnable.reference_hash) - test_run = Inferno::Repositories::TestRuns.new.create(test_run_params) - inputs.each do |name, value| - session_data_repo.save( - test_session_id: test_session.id, - name:, - value:, - type: runnable.config.input_type(name) || 'text' - ) - end - Inferno::TestRunner.new(test_session:, test_run:).run(runnable) - end - def entity_result_message(runnable) results_repo.current_results_for_test_session_and_runnables(test_session.id, [runnable]) .first @@ -104,7 +86,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -119,7 +101,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 400, body: subscription_resource.to_json) @@ -135,7 +117,7 @@ def entity_result_message(runnable) subscription_creation_request = stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) @@ -153,7 +135,7 @@ def entity_result_message(runnable) stub_request(:post, "#{server_endpoint}/Subscription") .with( - headers: { Authorization: 'Bearer SAMPLE_TOKEN' } + headers: { Authorization: "Bearer #{access_token}" } ) .to_return(status: 201, body: subscription_resource.to_json) diff --git a/spec/subscriptions_test_kit/suites/subscription_r5_backport_r4_client/workflow/interaction_test_spec.rb b/spec/subscriptions_test_kit/suites/subscription_r5_backport_r4_client/workflow/interaction_test_spec.rb index d3743e2..fafefd6 100644 --- a/spec/subscriptions_test_kit/suites/subscription_r5_backport_r4_client/workflow/interaction_test_spec.rb +++ b/spec/subscriptions_test_kit/suites/subscription_r5_backport_r4_client/workflow/interaction_test_spec.rb @@ -8,7 +8,7 @@ # 1. get the runnable into the `test` variable # 2. create input hash, e.g., inputs = { ... } # 3. pass to the run method (defined in the shared context), e.g., result = run(test, inputs) - let(:test) { described_class } + let(:test) { find_test suite, described_class.id } describe 'when the tester-provided notification bundle is valid' do let(:valid_notification_json) do