bulk_data_test_kit 0.13.1 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/presets/bulk_data_v400_submit_consumer_demo.json.erb +65 -0
- data/config/presets/bulk_data_v400_submit_provider_demo.json +22 -0
- data/lib/bulk_data_test_kit/metadata.rb +20 -4
- data/lib/bulk_data_test_kit/requirements/generated/bulk_data_v101_requirements_coverage.csv +1 -1
- data/lib/bulk_data_test_kit/requirements/generated/bulk_data_v200_client_requirements_coverage.csv +1 -1
- data/lib/bulk_data_test_kit/requirements/generated/bulk_data_v200_requirements_coverage.csv +1 -1
- data/lib/bulk_data_test_kit/requirements/generated/bulk_data_v400_submit_consumer_requirements_coverage.csv +18 -0
- data/lib/bulk_data_test_kit/requirements/generated/bulk_data_v400_submit_provider_requirements_coverage.csv +4 -0
- data/lib/bulk_data_test_kit/v1.0.1/bulk_data_test_suite.rb +3 -3
- data/lib/bulk_data_test_kit/v2.0.0/bulk_data_test_suite.rb +3 -3
- data/lib/bulk_data_test_kit/v2.0.0_client/bulk_data_client_test_suite.rb +1 -1
- data/lib/bulk_data_test_kit/v2.0.0_client/docs/suite_description.md +4 -4
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/backend_services_group.rb +50 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/complete_poll_group.rb +105 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/docs/suite_description.md +49 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/endpoints/file_download.rb +39 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/endpoints/manifest.rb +56 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/helpers.rb +78 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/manifest_and_file_retrieval.rb +59 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/poll_group.rb +66 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/processing_wait_group.rb +53 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/status_submit_group.rb +78 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/submit_completed_group.rb +65 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/submit_group.rb +66 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/tags.rb +12 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/test_suite.rb +116 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/consumer/urls.rb +43 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/client_registration_group.rb +42 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/docs/suite_description.md +50 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/endpoints/poll.rb +90 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/endpoints/status.rb +63 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/endpoints/submit.rb +35 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/helpers.rb +222 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/manifest_and_file_retrieval.rb +165 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/poll_group.rb +36 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/processing_wait_group.rb +83 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/retrieval.rb +139 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/status_submit_group.rb +96 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/submit_group.rb +314 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/submit_stopped_group.rb +43 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/tags.rb +18 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/test_suite.rb +122 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/urls.rb +53 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/provider/wait_group.rb +73 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/shared/jwks.rb +27 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/shared/submission_status.rb +14 -0
- data/lib/bulk_data_test_kit/v4.0.0/submit/shared/submitter_identifier.rb +14 -0
- data/lib/bulk_data_test_kit/version.rb +2 -2
- data/lib/bulk_data_test_kit.rb +2 -0
- metadata +41 -30
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../shared/submission_status'
|
|
4
|
+
require_relative '../shared/submitter_identifier'
|
|
5
|
+
|
|
6
|
+
module BulkDataTestKit
|
|
7
|
+
module BulkDataV400
|
|
8
|
+
module Submit
|
|
9
|
+
module Consumer
|
|
10
|
+
module Helpers
|
|
11
|
+
def submit_parameters(submission_id, base_url, status: nil, manifest_url: nil, oauth_metadata_url: nil)
|
|
12
|
+
params = submission_identification_parameters(submission_id)
|
|
13
|
+
|
|
14
|
+
params.parameter << FHIR::R4::Parameters::Parameter.new({
|
|
15
|
+
name: 'fhirBaseUrl',
|
|
16
|
+
valueUrl: base_url
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
unless status.nil?
|
|
20
|
+
status_coding = FHIR::R4::Coding.new({
|
|
21
|
+
system: Shared::SubmissionStatus::SYSTEM,
|
|
22
|
+
code: status
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
params.parameter << FHIR::R4::Parameters::Parameter.new({
|
|
26
|
+
name: 'submissionStatus',
|
|
27
|
+
# http://hl7.org/fhir/uv/bulkdata/ValueSet/submission-status
|
|
28
|
+
valueCoding: status_coding
|
|
29
|
+
})
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
unless manifest_url.nil?
|
|
33
|
+
params.parameter << FHIR::R4::Parameters::Parameter.new({
|
|
34
|
+
name: 'manifestUrl',
|
|
35
|
+
valueUrl: manifest_url
|
|
36
|
+
})
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
unless oauth_metadata_url.nil?
|
|
40
|
+
params.parameter << FHIR::R4::Parameters::Parameter.new({
|
|
41
|
+
name: 'oauthMetadataUrl',
|
|
42
|
+
valueUrl: oauth_metadata_url
|
|
43
|
+
})
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
params
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def status_parameters(submission_id)
|
|
50
|
+
submission_identification_parameters(submission_id)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def submission_identification_parameters(submission_id)
|
|
56
|
+
params = FHIR::R4::Parameters.new
|
|
57
|
+
submitter_identifier = FHIR::R4::Identifier.new(
|
|
58
|
+
system: Shared::SubmitterIdentifier::SYSTEM,
|
|
59
|
+
value: Shared::SubmitterIdentifier::VALUE
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
params.parameter << FHIR::R4::Parameters::Parameter.new(
|
|
63
|
+
name: 'submitter',
|
|
64
|
+
valueIdentifier: submitter_identifier
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
params.parameter << FHIR::R4::Parameters::Parameter.new({
|
|
68
|
+
name: 'submissionId',
|
|
69
|
+
valueString: submission_id
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
params
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require_relative 'tags'
|
|
2
|
+
|
|
3
|
+
module BulkDataTestKit
|
|
4
|
+
module BulkDataV400
|
|
5
|
+
module Submit
|
|
6
|
+
module Consumer
|
|
7
|
+
class ManifestAndFileRetrieval < Inferno::TestGroup
|
|
8
|
+
title 'Manifest and File Retrieval'
|
|
9
|
+
id :bulk_data_v400_submit_consumer_manifest_file_retrieval
|
|
10
|
+
|
|
11
|
+
test do
|
|
12
|
+
id :bulk_data_v400_submit_consumer_token_request
|
|
13
|
+
title 'Token request received'
|
|
14
|
+
description <<~DESCRIPTION
|
|
15
|
+
This test verifies that the Data Consumer requested an access
|
|
16
|
+
token.
|
|
17
|
+
DESCRIPTION
|
|
18
|
+
|
|
19
|
+
run do
|
|
20
|
+
load_tagged_requests SMARTAppLaunch::TOKEN_TAG
|
|
21
|
+
|
|
22
|
+
assert requests.present?, 'No token request was received'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test do
|
|
27
|
+
id :bulk_data_v400_submit_consumer_manifests_retrieved
|
|
28
|
+
title 'Manifests retrieved'
|
|
29
|
+
description <<~DESCRIPTION
|
|
30
|
+
This test verifies that all manifests included in the manifest
|
|
31
|
+
were retrieved.
|
|
32
|
+
DESCRIPTION
|
|
33
|
+
|
|
34
|
+
run do
|
|
35
|
+
load_tagged_requests Consumer::MANIFEST_TAG
|
|
36
|
+
|
|
37
|
+
assert requests.present?, 'No manifests were downloaded'
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test do
|
|
42
|
+
id :bulk_data_v400_submit_consumer_files_retrieved
|
|
43
|
+
title 'Files retrieved'
|
|
44
|
+
description <<~DESCRIPTION
|
|
45
|
+
This test verifies that all files included in the manifest
|
|
46
|
+
were retrieved.
|
|
47
|
+
DESCRIPTION
|
|
48
|
+
|
|
49
|
+
run do
|
|
50
|
+
load_tagged_requests Consumer::FILE_DOWNLOAD_TAG
|
|
51
|
+
|
|
52
|
+
assert requests.present?, 'No files were downloaded'
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BulkDataTestKit
|
|
4
|
+
module BulkDataV400
|
|
5
|
+
module Submit
|
|
6
|
+
module Consumer
|
|
7
|
+
class PollGroup < Inferno::TestGroup
|
|
8
|
+
include URLs
|
|
9
|
+
include Helpers
|
|
10
|
+
|
|
11
|
+
title 'Bulk Data Status Polling Request'
|
|
12
|
+
|
|
13
|
+
description %(
|
|
14
|
+
This group verifies that a Data Consumer returns an in-progress response
|
|
15
|
+
to an initial status poll. Inferno sends the terminal `completed`
|
|
16
|
+
submission immediately after this group, then polls for the final result.
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
id :bulk_data_v400_submit_consumer_poll
|
|
20
|
+
|
|
21
|
+
run_as_group
|
|
22
|
+
|
|
23
|
+
input :smart_jwk_set,
|
|
24
|
+
title: 'Data Consumer JSON Web Key Set (JWKS)',
|
|
25
|
+
description: <<~DESCRIPTION
|
|
26
|
+
The Bulk Submit Data Consumer system's JSON Web Key Set
|
|
27
|
+
including the key(s) Inferno will need to verify signatures on
|
|
28
|
+
token requests made by the client. May be provided as either a
|
|
29
|
+
publicly accessible url containing the JWKS, or the raw JWKS
|
|
30
|
+
JSON.
|
|
31
|
+
DESCRIPTION
|
|
32
|
+
|
|
33
|
+
input :smart_auth_info,
|
|
34
|
+
type: :auth_info,
|
|
35
|
+
options: { mode: 'access' },
|
|
36
|
+
optional: false
|
|
37
|
+
|
|
38
|
+
input :poll_url
|
|
39
|
+
|
|
40
|
+
http_client do
|
|
41
|
+
headers 'Authorization' => "Bearer #{smart_auth_info.access_token}",
|
|
42
|
+
'Accept' => 'application/json'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
test do
|
|
46
|
+
id :bulk_data_v400_submit_consumer_initial_poll_status
|
|
47
|
+
title 'Initial Poll Status'
|
|
48
|
+
|
|
49
|
+
description %(
|
|
50
|
+
This test verifies that a provider can poll for status against the Data Consumer under test.
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
run do
|
|
54
|
+
get poll_url
|
|
55
|
+
|
|
56
|
+
assert_response_status(202)
|
|
57
|
+
assert request.response_header('x-export-status').nil?,
|
|
58
|
+
'The initial poll response included an unexpected `X-Export-Status` header.'
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BulkDataTestKit
|
|
4
|
+
module BulkDataV400
|
|
5
|
+
module Submit
|
|
6
|
+
module Consumer
|
|
7
|
+
class ProcessingWaitGroup < Inferno::TestGroup
|
|
8
|
+
include URLs
|
|
9
|
+
|
|
10
|
+
title 'Wait For Processing'
|
|
11
|
+
|
|
12
|
+
description %(
|
|
13
|
+
This group pauses after Inferno sends the terminal `completed`
|
|
14
|
+
submission so the tester can allow the Data Consumer to finish
|
|
15
|
+
processing before Inferno begins final status polling.
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
id :bulk_data_v400_submit_consumer_processing_wait
|
|
19
|
+
|
|
20
|
+
run_as_group
|
|
21
|
+
|
|
22
|
+
input :consumer_client_id,
|
|
23
|
+
title: 'Data Consumer Client ID',
|
|
24
|
+
optional: true,
|
|
25
|
+
description: <<~DESCRIPTION
|
|
26
|
+
Client ID of the Bulk Submit Data Consumer system under test.
|
|
27
|
+
If no value is provided, the Inferno session id will be used.
|
|
28
|
+
DESCRIPTION
|
|
29
|
+
|
|
30
|
+
test do
|
|
31
|
+
id :bulk_data_v400_submit_consumer_processing_wait_test
|
|
32
|
+
title 'Wait For Data Consumer Processing'
|
|
33
|
+
|
|
34
|
+
run do
|
|
35
|
+
identifier = consumer_client_id.presence || test_session_id
|
|
36
|
+
|
|
37
|
+
wait(
|
|
38
|
+
identifier:,
|
|
39
|
+
message: %(
|
|
40
|
+
Inferno has sent the terminal `completed` submission. When the
|
|
41
|
+
Data Consumer under test has finished processing and its final
|
|
42
|
+
status poll is ready to return `200`,
|
|
43
|
+
[click here](#{resume_pass_url}?id=#{identifier}).
|
|
44
|
+
),
|
|
45
|
+
timeout: 900
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
module BulkDataTestKit
|
|
6
|
+
module BulkDataV400
|
|
7
|
+
module Submit
|
|
8
|
+
module Consumer
|
|
9
|
+
class StatusSubmitGroup < Inferno::TestGroup
|
|
10
|
+
include URLs
|
|
11
|
+
include Helpers
|
|
12
|
+
|
|
13
|
+
title 'Bulk Submit Status Operation - Initialize'
|
|
14
|
+
|
|
15
|
+
description %(
|
|
16
|
+
This group verifies that a status submission can be made against the Data Consumer.
|
|
17
|
+
|
|
18
|
+
This group will:
|
|
19
|
+
1. Using the provided base URL of the Data Consumer system under test, will perform the $bulk-submit-status operation.
|
|
20
|
+
2. Check that the response contains a `Content-Location` header for status polling.
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
id :bulk_data_v400_submit_consumer_status_submit
|
|
24
|
+
|
|
25
|
+
run_as_group
|
|
26
|
+
|
|
27
|
+
input :smart_auth_info,
|
|
28
|
+
type: :auth_info,
|
|
29
|
+
options: { mode: 'access' },
|
|
30
|
+
optional: false
|
|
31
|
+
|
|
32
|
+
output :poll_url
|
|
33
|
+
|
|
34
|
+
http_client do
|
|
35
|
+
headers 'Authorization' => "Bearer #{smart_auth_info.access_token}",
|
|
36
|
+
'Content-Type' => 'application/fhir+json'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
test do
|
|
40
|
+
id :bulk_data_v400_submit_consumer_status_submit_request
|
|
41
|
+
title 'Status Submit'
|
|
42
|
+
|
|
43
|
+
description %(
|
|
44
|
+
This test verifies that a status submission can be made against the Data Consumer.
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
run do
|
|
48
|
+
parameters = status_parameters(submission_id)
|
|
49
|
+
|
|
50
|
+
post "#{consumer_fhir_base_url}/$bulk-submit-status",
|
|
51
|
+
body: parameters.to_json,
|
|
52
|
+
headers: {
|
|
53
|
+
'Accept' => 'application/fhir+json',
|
|
54
|
+
'Prefer' => 'respond-async'
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
assert_response_status(202)
|
|
58
|
+
|
|
59
|
+
poll_url = request.response_header('content-location')&.value
|
|
60
|
+
assert poll_url.present?, 'Status response headers did not include "Content-Location".'
|
|
61
|
+
|
|
62
|
+
begin
|
|
63
|
+
parsed_poll_url = URI.parse(poll_url)
|
|
64
|
+
rescue URI::InvalidURIError
|
|
65
|
+
assert false, '"Content-Location" must be an absolute HTTP(S) URL.'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
assert %w[http https].include?(parsed_poll_url.scheme&.downcase) && parsed_poll_url.host.present?,
|
|
69
|
+
'"Content-Location" must be an absolute HTTP(S) URL.'
|
|
70
|
+
|
|
71
|
+
output poll_url:
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BulkDataTestKit
|
|
4
|
+
module BulkDataV400
|
|
5
|
+
module Submit
|
|
6
|
+
module Consumer
|
|
7
|
+
class SubmitCompletedGroup < Inferno::TestGroup
|
|
8
|
+
include URLs
|
|
9
|
+
include Helpers
|
|
10
|
+
|
|
11
|
+
title 'Bulk Submit Operation - Completed'
|
|
12
|
+
|
|
13
|
+
description %(
|
|
14
|
+
This group verifies that a submission with a status of `completed` can be made against the Data Consumer.
|
|
15
|
+
|
|
16
|
+
This group will:
|
|
17
|
+
1. Using the provided base URL of the Data Consumer system under test, will perform the $bulk-submit operation with a `submissionStatus` of `completed`.
|
|
18
|
+
2. Check that the response is valid.
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
id :bulk_data_v400_submit_consumer_submit_completed
|
|
22
|
+
|
|
23
|
+
run_as_group
|
|
24
|
+
|
|
25
|
+
input :smart_auth_info,
|
|
26
|
+
type: :auth_info,
|
|
27
|
+
options: { mode: 'access' },
|
|
28
|
+
optional: false
|
|
29
|
+
|
|
30
|
+
http_client do
|
|
31
|
+
headers 'Authorization' => "Bearer #{smart_auth_info.access_token}",
|
|
32
|
+
'Content-Type' => 'application/fhir+json'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test do
|
|
36
|
+
id :bulk_data_v400_submit_consumer_completed_submit
|
|
37
|
+
title 'Submit Completed Status'
|
|
38
|
+
|
|
39
|
+
description %(
|
|
40
|
+
This test verifies that a submission with a status of `completed` can be made against the Data Consumer.
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
run do
|
|
44
|
+
parameters =
|
|
45
|
+
submit_parameters(
|
|
46
|
+
submission_id,
|
|
47
|
+
base_url,
|
|
48
|
+
status: 'completed',
|
|
49
|
+
oauth_metadata_url: smart_discovery_url
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
post "#{consumer_fhir_base_url}/$bulk-submit",
|
|
53
|
+
body: parameters.to_json,
|
|
54
|
+
headers: {
|
|
55
|
+
'Accept' => 'application/fhir+json'
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
assert_response_status(200)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BulkDataTestKit
|
|
4
|
+
module BulkDataV400
|
|
5
|
+
module Submit
|
|
6
|
+
module Consumer
|
|
7
|
+
class SubmitGroup < Inferno::TestGroup
|
|
8
|
+
include URLs
|
|
9
|
+
include Helpers
|
|
10
|
+
|
|
11
|
+
title 'Bulk Submit Operation'
|
|
12
|
+
|
|
13
|
+
description %(
|
|
14
|
+
This group verifies that a submission can be made against the Data Consumer.
|
|
15
|
+
|
|
16
|
+
This group will:
|
|
17
|
+
1. Using the provided base URL of the Data Consumer system under test, will perform a "kick off" $bulk-submit operation.
|
|
18
|
+
2. Check that the response is valid.
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
id :bulk_data_v400_submit_consumer_submit
|
|
22
|
+
|
|
23
|
+
run_as_group
|
|
24
|
+
|
|
25
|
+
input :smart_auth_info,
|
|
26
|
+
type: :auth_info,
|
|
27
|
+
options: { mode: 'access' },
|
|
28
|
+
optional: false
|
|
29
|
+
|
|
30
|
+
http_client do
|
|
31
|
+
headers 'Authorization' => "Bearer #{smart_auth_info.access_token}",
|
|
32
|
+
'Content-Type' => 'application/fhir+json'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test do
|
|
36
|
+
id :bulk_data_v400_submit_consumer_manifest_url_submit
|
|
37
|
+
title 'Submit Manifest URL'
|
|
38
|
+
|
|
39
|
+
description %(
|
|
40
|
+
This test verifies that a submission can be made against the Data Consumer.
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
run do
|
|
44
|
+
parameters =
|
|
45
|
+
submit_parameters(
|
|
46
|
+
submission_id,
|
|
47
|
+
base_url,
|
|
48
|
+
status: 'in-progress',
|
|
49
|
+
manifest_url: manifest_url,
|
|
50
|
+
oauth_metadata_url: smart_discovery_url
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
post "#{consumer_fhir_base_url}/$bulk-submit",
|
|
54
|
+
body: parameters.to_json,
|
|
55
|
+
headers: {
|
|
56
|
+
'Accept' => 'application/fhir+json'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
assert_response_status(200)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'urls'
|
|
4
|
+
require_relative 'helpers'
|
|
5
|
+
require_relative '../shared/jwks'
|
|
6
|
+
|
|
7
|
+
require_relative 'backend_services_group'
|
|
8
|
+
require_relative 'complete_poll_group'
|
|
9
|
+
require_relative 'endpoints/file_download'
|
|
10
|
+
require_relative 'endpoints/manifest'
|
|
11
|
+
require_relative 'manifest_and_file_retrieval'
|
|
12
|
+
require_relative 'poll_group'
|
|
13
|
+
require_relative 'processing_wait_group'
|
|
14
|
+
require_relative 'submit_group'
|
|
15
|
+
require_relative 'submit_completed_group'
|
|
16
|
+
require_relative 'status_submit_group'
|
|
17
|
+
|
|
18
|
+
module BulkDataTestKit
|
|
19
|
+
module BulkDataV400
|
|
20
|
+
module Submit
|
|
21
|
+
module Consumer
|
|
22
|
+
class TestSuite < Inferno::TestSuite
|
|
23
|
+
include URLs
|
|
24
|
+
extend Shared::JWKS
|
|
25
|
+
|
|
26
|
+
title 'Bulk Data Access v4.0.0-ballot Submit - Consumer'
|
|
27
|
+
|
|
28
|
+
description File.read(File.join(__dir__, 'docs', 'suite_description.md'))
|
|
29
|
+
|
|
30
|
+
id :bulk_data_v400_submit_consumer
|
|
31
|
+
|
|
32
|
+
requirement_sets(
|
|
33
|
+
{
|
|
34
|
+
identifier: 'hl7.fhir.uv.smart-app-launch_2.2.0',
|
|
35
|
+
title: 'SMART App Launch',
|
|
36
|
+
actor: 'Server',
|
|
37
|
+
requirements: '30,251,253-256,258,372-374,377,381-383,385,393,394'
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
links [
|
|
42
|
+
{
|
|
43
|
+
label: 'Report Issue',
|
|
44
|
+
url: 'https://github.com/inferno-framework/bulk-data-test-kit/issues/'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: 'Open Source',
|
|
48
|
+
url: 'https://github.com/inferno-framework/bulk-data-test-kit/'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
label: 'Download',
|
|
52
|
+
url: 'https://github.com/inferno-framework/bulk-data-test-kit/releases'
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
input :consumer_fhir_base_url,
|
|
57
|
+
title: 'Bulk Data Consumer Base FHIR URL',
|
|
58
|
+
description: 'The URL Inferno should use as the base for the Data Consumer under test.',
|
|
59
|
+
type: 'text',
|
|
60
|
+
optional: false
|
|
61
|
+
|
|
62
|
+
input :submission_id,
|
|
63
|
+
title: 'Submission ID',
|
|
64
|
+
description: 'Set the submission ID that will be used for the submission flow.',
|
|
65
|
+
type: 'text',
|
|
66
|
+
optional: false,
|
|
67
|
+
default: '123'
|
|
68
|
+
|
|
69
|
+
route(:get, SMART_DISCOVERY_ROUTE, lambda { |_env|
|
|
70
|
+
SMARTAppLaunch::MockSMARTServer.smart_server_metadata(id)
|
|
71
|
+
})
|
|
72
|
+
suite_endpoint :post, SMART_TOKEN_ROUTE, SMARTAppLaunch::MockSMARTServer::TokenEndpoint
|
|
73
|
+
|
|
74
|
+
route(:get, JWKS_ROUTE, jwks_route_handler)
|
|
75
|
+
|
|
76
|
+
config(
|
|
77
|
+
inputs: {
|
|
78
|
+
smart_auth_info: {
|
|
79
|
+
title: 'Bulk Submit Data Provider Client Credentials',
|
|
80
|
+
description: 'Inferno will use these credentials when making requests to the Data Consumer under test.'
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
options: {
|
|
84
|
+
post_authorization_uri: "#{Inferno::Application['base_url']}/custom/smart_stu2/post_auth"
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
resume_test_route :get, RESUME_PASS_ROUTE do |request|
|
|
89
|
+
request.query_parameters['id']
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
suite_endpoint :get, MANIFEST_ROUTE, Endpoints::Manifest
|
|
93
|
+
suite_endpoint :get, DOWNLOAD_ROUTE, Endpoints::FileDownload
|
|
94
|
+
|
|
95
|
+
group from: :bulk_data_v400_submit_consumer_backend_services
|
|
96
|
+
|
|
97
|
+
group do
|
|
98
|
+
id :bulk_data_v400_submit_consumer_sequence
|
|
99
|
+
title 'Data Consumer Sequence'
|
|
100
|
+
|
|
101
|
+
run_as_group
|
|
102
|
+
|
|
103
|
+
group from: :bulk_data_v400_submit_consumer_submit
|
|
104
|
+
group from: :bulk_data_v400_submit_consumer_status_submit
|
|
105
|
+
group from: :bulk_data_v400_submit_consumer_poll
|
|
106
|
+
group from: :bulk_data_v400_submit_consumer_submit_completed
|
|
107
|
+
group from: :bulk_data_v400_submit_consumer_processing_wait
|
|
108
|
+
group from: :bulk_data_v400_submit_consumer_poll_complete
|
|
109
|
+
|
|
110
|
+
group from: :bulk_data_v400_submit_consumer_manifest_file_retrieval
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BulkDataTestKit
|
|
4
|
+
module BulkDataV400
|
|
5
|
+
module Submit
|
|
6
|
+
module Consumer
|
|
7
|
+
RESUME_PASS_ROUTE = '/resume_pass'
|
|
8
|
+
MANIFEST_ROUTE = '/manifest'
|
|
9
|
+
DOWNLOAD_ROUTE = '/example.ndjson'
|
|
10
|
+
SMART_DISCOVERY_ROUTE = '/.well-known/smart-configuration'
|
|
11
|
+
AUTH_SERVER_ROUTE = '/auth'
|
|
12
|
+
SMART_TOKEN_ROUTE = "#{AUTH_SERVER_ROUTE}/token".freeze
|
|
13
|
+
JWKS_ROUTE = '/.well-known/jwks.json'
|
|
14
|
+
|
|
15
|
+
module URLs
|
|
16
|
+
def base_url
|
|
17
|
+
"#{Inferno::Application['base_url']}/custom/#{suite_id}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def resume_pass_url
|
|
21
|
+
"#{base_url}#{RESUME_PASS_ROUTE}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def manifest_url
|
|
25
|
+
"#{base_url}#{MANIFEST_ROUTE}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def download_url
|
|
29
|
+
"#{base_url}#{DOWNLOAD_ROUTE}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def smart_discovery_url
|
|
33
|
+
"#{base_url}#{SMART_DISCOVERY_ROUTE}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def suite_id
|
|
37
|
+
TestSuite.id
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'smart_app_launch_test_kit'
|
|
4
|
+
|
|
5
|
+
module BulkDataTestKit
|
|
6
|
+
module BulkDataV400
|
|
7
|
+
module Submit
|
|
8
|
+
module Provider
|
|
9
|
+
class ClientRegistrationGroup < Inferno::TestGroup
|
|
10
|
+
id :bulk_data_v400_submit_provider_client_registration
|
|
11
|
+
|
|
12
|
+
title 'Client Registration'
|
|
13
|
+
|
|
14
|
+
config(
|
|
15
|
+
inputs: {
|
|
16
|
+
client_id: {
|
|
17
|
+
title: 'Provider Client ID',
|
|
18
|
+
description: <<~DESCRIPTION
|
|
19
|
+
Client ID of the Bulk Data Submit Provider system under test.
|
|
20
|
+
If no value is provided, the Inferno session id will be used.
|
|
21
|
+
DESCRIPTION
|
|
22
|
+
},
|
|
23
|
+
smart_jwk_set: {
|
|
24
|
+
title: 'Provider JSON Web Key Set (JWKS)',
|
|
25
|
+
description: <<~DESCRIPTION
|
|
26
|
+
The Bulk Data Submit Provider system's JSON Web Key Set
|
|
27
|
+
including the key(s) Inferno will need to verify signatures on
|
|
28
|
+
token requests made by the client. May be provided as either a
|
|
29
|
+
publicly accessible url containing the JWKS, or the raw JWKS
|
|
30
|
+
JSON.
|
|
31
|
+
DESCRIPTION
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
test from: :smart_client_registration_bsca_verification,
|
|
37
|
+
title: 'Verify Provider Client Registration'
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|