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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2dbc660ef98a729a19cb9d1c2b8f08e27e5cefb3f77036d306ce73ca52173c14
|
|
4
|
+
data.tar.gz: df36eb4c16fd6a00f1642a6dac2713373e52e8f8b6583b4ffb08b14d8861674a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0e2012caa069ba37798bb59a4fada583d708f34db645c4121379a182beefb5876c5d364457980f1ebc9091d1db65b5c91abf48fa3fa5824cbc5a4bf08f94eaf8
|
|
7
|
+
data.tar.gz: 0bfcb5d35bda6ad84f1dd98ef2630ede4dcf1b90116b0d13412705e3afa69f436ea32ef2583c77b0c189ee0ab62fe8352ccf7ee992f3bcd06dac31b73d3f04d9
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Demo: Run Data Consumer Against Inferno Data Provider",
|
|
3
|
+
"id": "bulk_data_v400_submit_consumer_demo",
|
|
4
|
+
"test_suite_id": "bulk_data_v400_submit_consumer",
|
|
5
|
+
"inputs": [
|
|
6
|
+
{
|
|
7
|
+
"name": "consumer_fhir_base_url",
|
|
8
|
+
"value": "<%= Inferno::Application['base_url'] %>/custom/bulk_data_v400_submit_provider/fhir",
|
|
9
|
+
"_title": "Bulk Data Consumer Base FHIR URL",
|
|
10
|
+
"_description": "The URL Inferno should use as the base for the Data Consumer under test.",
|
|
11
|
+
"_type": "text",
|
|
12
|
+
"_optional": false
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"name": "smart_auth_info",
|
|
16
|
+
"value": {
|
|
17
|
+
"client_id": "inferno_demo_provider_client_id"
|
|
18
|
+
},
|
|
19
|
+
"_title": "Bulk Submit Data Provider Client Credentials",
|
|
20
|
+
"_description": "Inferno will use these credentials when making requests to the Data Consumer under test.",
|
|
21
|
+
"_type": "auth_info",
|
|
22
|
+
"_optional": false,
|
|
23
|
+
"_options": {
|
|
24
|
+
"mode": "auth",
|
|
25
|
+
"components": [
|
|
26
|
+
{
|
|
27
|
+
"name": "requested_scopes",
|
|
28
|
+
"default": "system/bulk-submit"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "auth_type",
|
|
32
|
+
"default": "backend_services",
|
|
33
|
+
"locked": "true"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "use_discovery",
|
|
37
|
+
"locked": true
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "submission_id",
|
|
44
|
+
"value": "123",
|
|
45
|
+
"_title": "Submission ID",
|
|
46
|
+
"_description": "Set the submission ID that will be used for the submission flow.",
|
|
47
|
+
"_type": "text",
|
|
48
|
+
"_optional": false
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "consumer_client_id",
|
|
52
|
+
"value": "inferno_demo_consumer_client_id",
|
|
53
|
+
"_title": "Data Consumer Client ID",
|
|
54
|
+
"_description": "Client ID of the Bulk Submit Data Consumer system under test.\nIf no value is provided, the Inferno session id will be used.\n",
|
|
55
|
+
"_type": "text"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "smart_jwk_set",
|
|
59
|
+
"value": "{\"keys\":[{\"kty\":\"EC\",\"crv\":\"P-384\",\"x\":\"JQKTsV6PT5Szf4QtDA1qrs0EJ1pbimQmM2SKvzOlIAqlph3h1OHmZ2i7MXahIF2C\",\"y\":\"bRWWQRJBgDa6CTgwofYrHjVGcO-A7WNEnu4oJA5OUJPPPpczgx1g2NsfinK-D2Rw\",\"use\":\"sig\",\"key_ops\":[\"verify\"],\"ext\":true,\"kid\":\"4b49a739d1eb115b3225f4cf9beb6d1b\",\"alg\":\"ES384\"},{\"kty\":\"RSA\",\"alg\":\"RS384\",\"n\":\"vjbIzTqiY8K8zApeNng5ekNNIxJfXAue9BjoMrZ9Qy9m7yIA-tf6muEupEXWhq70tC7vIGLqJJ4O8m7yiH8H2qklX2mCAMg3xG3nbykY2X7JXtW9P8VIdG0sAMt5aZQnUGCgSS3n0qaooGn2LUlTGIR88Qi-4Nrao9_3Ki3UCiICeCiAE224jGCg0OlQU6qj2gEB3o-DWJFlG_dz1y-Mxo5ivaeM0vWuodjDrp-aiabJcSF_dx26sdC9dZdBKXFDq0t19I9S9AyGpGDJwzGRtWHY6LsskNHLvo8Zb5AsJ9eRZKpnh30SYBZI9WHtzU85M9WQqdScR69Vyp-6Uhfbvw\",\"e\":\"AQAB\",\"use\":\"sig\",\"key_ops\":[\"verify\"],\"ext\":true,\"kid\":\"b41528b6f37a9500edb8a905a595bdd7\"}]}",
|
|
60
|
+
"_title": "Data Consumer JWKS",
|
|
61
|
+
"_description": "JWKS of the Data Consumer\n",
|
|
62
|
+
"_type": "text"
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Demo: Run Data Provider Against Inferno Data Consumer",
|
|
3
|
+
"id": "bulk_data_v400_submit_provider_demo",
|
|
4
|
+
"test_suite_id": "bulk_data_v400_submit_provider",
|
|
5
|
+
"inputs": [
|
|
6
|
+
{
|
|
7
|
+
"name": "client_id",
|
|
8
|
+
"value": "inferno_demo_provider_client_id",
|
|
9
|
+
"_title": "Provider Client ID",
|
|
10
|
+
"_description": "Client ID of the Bulk Data Submit Provider system under test.\nIf no value is provided, the Inferno session id will be used.\n",
|
|
11
|
+
"_type": "text",
|
|
12
|
+
"_optional": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"name": "smart_jwk_set",
|
|
16
|
+
"value": "{\"keys\":[{\"kty\":\"EC\",\"crv\":\"P-384\",\"x\":\"JQKTsV6PT5Szf4QtDA1qrs0EJ1pbimQmM2SKvzOlIAqlph3h1OHmZ2i7MXahIF2C\",\"y\":\"bRWWQRJBgDa6CTgwofYrHjVGcO-A7WNEnu4oJA5OUJPPPpczgx1g2NsfinK-D2Rw\",\"use\":\"sig\",\"key_ops\":[\"verify\"],\"ext\":true,\"kid\":\"4b49a739d1eb115b3225f4cf9beb6d1b\",\"alg\":\"ES384\"},{\"kty\":\"RSA\",\"alg\":\"RS384\",\"n\":\"vjbIzTqiY8K8zApeNng5ekNNIxJfXAue9BjoMrZ9Qy9m7yIA-tf6muEupEXWhq70tC7vIGLqJJ4O8m7yiH8H2qklX2mCAMg3xG3nbykY2X7JXtW9P8VIdG0sAMt5aZQnUGCgSS3n0qaooGn2LUlTGIR88Qi-4Nrao9_3Ki3UCiICeCiAE224jGCg0OlQU6qj2gEB3o-DWJFlG_dz1y-Mxo5ivaeM0vWuodjDrp-aiabJcSF_dx26sdC9dZdBKXFDq0t19I9S9AyGpGDJwzGRtWHY6LsskNHLvo8Zb5AsJ9eRZKpnh30SYBZI9WHtzU85M9WQqdScR69Vyp-6Uhfbvw\",\"e\":\"AQAB\",\"use\":\"sig\",\"key_ops\":[\"verify\"],\"ext\":true,\"kid\":\"b41528b6f37a9500edb8a905a595bdd7\"}]}",
|
|
17
|
+
"_title": "Provider JSON Web Key Set (JWKS)",
|
|
18
|
+
"_description": "The Bulk Data Submit Provider system's JSON Web Key Set\nincluding the key(s) Inferno will need to verify signatures on\ntoken requests made by the client. May be provided as either a\npublicly accessible url containing the JWKS, or the raw JWKS\nJSON.\n",
|
|
19
|
+
"_type": "textarea"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -4,7 +4,13 @@ module BulkDataTestKit
|
|
|
4
4
|
class Metadata < Inferno::TestKit
|
|
5
5
|
id :bulk_data_test_kit
|
|
6
6
|
title 'Bulk Data Test Kit'
|
|
7
|
-
suite_ids %w[
|
|
7
|
+
suite_ids %w[
|
|
8
|
+
bulk_data_v101
|
|
9
|
+
bulk_data_v200
|
|
10
|
+
bulk_data_v200_client
|
|
11
|
+
bulk_data_v400_submit_provider
|
|
12
|
+
bulk_data_v400_submit_consumer
|
|
13
|
+
]
|
|
8
14
|
tags ['Bulk Data']
|
|
9
15
|
last_updated ::BulkDataTestKit::LAST_UPDATED
|
|
10
16
|
version ::BulkDataTestKit::VERSION
|
|
@@ -15,14 +21,17 @@ module BulkDataTestKit
|
|
|
15
21
|
The Bulk Data Access Test Kit validates the conformance of a server
|
|
16
22
|
implementation to a specified version of the
|
|
17
23
|
[Bulk Data Access Implementation Guide](http://hl7.org/fhir/uv/bulkdata/).
|
|
18
|
-
This Test Kit currently includes tests for
|
|
24
|
+
This Test Kit currently includes export tests for
|
|
19
25
|
[STU1](http://hl7.org/fhir/uv/bulkdata/STU1.0.1/) and
|
|
20
26
|
[STU2](http://hl7.org/fhir/uv/bulkdata/STU2/) versions of this
|
|
21
|
-
implementation guide
|
|
27
|
+
implementation guide, along with Bulk Submit tests for
|
|
28
|
+
Data Provider and Data Consumer implementations of the
|
|
29
|
+
[Bulk Submit Operation](https://hl7.org/fhir/uv/bulkdata/4.0.0-202609-ballot/en/)
|
|
30
|
+
within the Bulk Data Access v4.0.0-ballot IG.
|
|
22
31
|
|
|
23
32
|
<!-- break -->
|
|
24
33
|
|
|
25
|
-
|
|
34
|
+
The export tests are split into three different types of bulk data export:
|
|
26
35
|
|
|
27
36
|
- All Patients: FHIR Operation to obtain a detailed set of FHIR resources
|
|
28
37
|
of diverse resource types pertaining to all patients
|
|
@@ -32,6 +41,13 @@ module BulkDataTestKit
|
|
|
32
41
|
- System Level Export: FHIR Operation to export data from a FHIR server,
|
|
33
42
|
whether or not it is associated with a patient
|
|
34
43
|
|
|
44
|
+
The v4.0.0-ballot Bulk Submit tests are organized as separate
|
|
45
|
+
Data Provider and Data Consumer suites. These suites target the
|
|
46
|
+
[Bulk Data Access v4.0.0-ballot IG](https://hl7.org/fhir/uv/bulkdata/4.0.0-202609-ballot/en/).
|
|
47
|
+
The ballot specification is subject to change before final publication.
|
|
48
|
+
These suites are incomplete and may change as their
|
|
49
|
+
coverage is expanded.
|
|
50
|
+
|
|
35
51
|
The Bulk Data Access Test Kit is built using the
|
|
36
52
|
[Inferno Framework](https://inferno-framework.github.io/). The Inferno
|
|
37
53
|
Framework is designed for reuse and aims to make it easier to build test
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v1.0.1 Server Short ID(s),Bulk Data Access v1.0.1 Server Full ID(s)
|
|
1
|
+
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v1.0.1 Export - Server Short ID(s),Bulk Data Access v1.0.1 Export - Server Full ID(s)
|
|
2
2
|
hl7.fhir.uv.bulkdata_1.0.0,2,https://hl7.org/fhir/uv/bulkdata/stu1/export/#security-considerations,All exchanges described herein between a client and a server SHALL be secured using Transport Layer Security (TLS) Protocol Version 1.2 (RFC5246) or a more recent version of TLS.,SHALL,Server,false,,,"",""
|
|
3
3
|
hl7.fhir.uv.bulkdata_1.0.0,3,https://hl7.org/fhir/uv/bulkdata/stu1/export/#security-considerations,Use of mutual TLS is OPTIONAL.,MAY,Server,false,,,"",""
|
|
4
4
|
hl7.fhir.uv.bulkdata_1.0.0,4,https://hl7.org/fhir/uv/bulkdata/stu1/export/#security-considerations,"With each of the requests described herein, implementers SHOULD implement OAuth 2.0 access management in accordance with the SMART Backend Services Authorization Profile.",SHOULD,Server,false,,,"",""
|
data/lib/bulk_data_test_kit/requirements/generated/bulk_data_v200_client_requirements_coverage.csv
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v2.0.0 Client Short ID(s),Bulk Data Access v2.0.0 Client Full ID(s)
|
|
1
|
+
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v2.0.0 Export - Client Short ID(s),Bulk Data Access v2.0.0 Export - Client Full ID(s)
|
|
2
2
|
hl7.fhir.uv.bulkdata_2.0.0,15,https://hl7.org/fhir/uv/bulkdata/STU2/export.html#roles,Bulk Data Client - system that requests … access tokens,SHALL,Client,false,,,3.01,bulk_data_v200_client-bulk_data_client_auth_verification-bulk_data_client_token_smart_bsca_verification
|
|
3
3
|
hl7.fhir.uv.bulkdata_2.0.0,16,https://hl7.org/fhir/uv/bulkdata/STU2/export.html#roles,Bulk Data Client - system that ... receives access tokens,SHALL,Client,false,,,3.01,bulk_data_v200_client-bulk_data_client_auth_verification-bulk_data_client_token_smart_bsca_verification
|
|
4
4
|
hl7.fhir.uv.bulkdata_2.0.0,17,https://hl7.org/fhir/uv/bulkdata/STU2/export.html#roles,[A] Bulk Data Client [is a] system that requests ... Bulk Data files,SHALL,Client,false,,,2.02,bulk_data_v200_client-bulk_data_client_export_group-bulk_data_client_kick_off
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v2.0.0 Server Short ID(s),Bulk Data Access v2.0.0 Server Full ID(s)
|
|
1
|
+
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v2.0.0 Export - Server Short ID(s),Bulk Data Access v2.0.0 Export - Server Full ID(s)
|
|
2
2
|
hl7.fhir.uv.bulkdata_2.0.0,1,https://hl7.org/fhir/uv/bulkdata/STU2/#conformance,"To declare conformance with this IG, a server should include the following URL in its CapabilityStatement.instantiates: http://hl7.org/fhir/uv/bulkdata/CapabilityStatement/bulk-data",SHOULD,Server,false,,,"",""
|
|
3
3
|
hl7.fhir.uv.bulkdata_2.0.0,2,https://hl7.org/fhir/uv/bulkdata/STU2/export.html#privacy-and-security-considerations,All exchanges described herein between a client and a server SHALL be secured using Transport Layer Security (TLS) Protocol Version 1.2 (RFC5246) or a more recent version of TLS.,SHALL,Server,false,,,1.2,bulk_data_v200-bulk_data_smart_backend_services_v200-backend_services_authorization
|
|
4
4
|
hl7.fhir.uv.bulkdata_2.0.0,3,https://hl7.org/fhir/uv/bulkdata/STU2/export.html#privacy-and-security-considerations,Use of mutual TLS is OPTIONAL.,MAY,Server,false,,,"",""
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v4.0.0-ballot Submit - Consumer Short ID(s),Bulk Data Access v4.0.0-ballot Submit - Consumer Full ID(s)
|
|
2
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,30,https://hl7.org/fhir/smart-app-launch/STU2.2/app-launch.html#response-3,The EHR responds with a SMART configuration JSON document as described in the [Conformance](https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html) section.,SHALL,Server,,,,"1.1.01, 1.1.02","bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_endpoint, bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2"
|
|
3
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,251,https://hl7.org/fhir/smart-app-launch/STU2.2/backend-services.html#issue-access-token,"If an error is encountered during the authorization process, the FHIR authorization server SHALL respond with the appropriate error message defined in [Section 5.2 of the OAuth 2.0 specification](https://tools.ietf.org/html/rfc6749#page-45)",SHALL,Server,,,,"1.2.02, 1.2.03","bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-backend_services_authorization-smart_backend_services_invalid_grant_type, bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-backend_services_authorization-smart_backend_services_invalid_client_assertion"
|
|
4
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,253,https://hl7.org/fhir/smart-app-launch/STU2.2/backend-services.html#issue-access-token,"If the access token request is valid and authorized, the FHIR authorization server SHALL issue an access token in response.",SHALL,Server,,,,1.2.05,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-backend_services_authorization-smart_backend_services_auth_request_success
|
|
5
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,254,https://hl7.org/fhir/smart-app-launch/STU2.2/backend-services.html#issue-access-token,[When responding with an access token t]he `access_token` [parameter is] `required` [and] SHALL [contain] The access token issued by the FHIR authorization server.,SHALL,Server,,,,1.2.06,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-backend_services_authorization-smart_backend_services_auth_response_body
|
|
6
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,255,https://hl7.org/fhir/smart-app-launch/STU2.2/backend-services.html#issue-access-token,[When responding with an access token t]he `token_type` [parameter is] `required` [and] SHALL [contain] Fixed value: bearer.,SHALL,Server,,,,1.2.06,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-backend_services_authorization-smart_backend_services_auth_response_body
|
|
7
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,256,https://hl7.org/fhir/smart-app-launch/STU2.2/backend-services.html#issue-access-token,[When responding with an access token t]he `expires_in` [parameter is] `required` [and] SHALL [contain] The lifetime in seconds of the access token.,SHALL,Server,,,,1.2.06,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-backend_services_authorization-smart_backend_services_auth_response_body
|
|
8
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,258,https://hl7.org/fhir/smart-app-launch/STU2.2/backend-services.html#issue-access-token,[When responding with an access token t]he `scope` [parameter is] `required` [and] SHALL [contain s]cope of access authorized.,SHALL,Server,,,,1.2.06,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-backend_services_authorization-smart_backend_services_auth_response_body
|
|
9
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,372,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#using-well-known,FHIR endpoints requiring authorization SHALL serve a JSON document at the location formed by appending `/.well-known/smart-configuration` to their base URL.,SHALL,Server,,,,1.1.01,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_endpoint
|
|
10
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,373,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#using-well-known,"The server SHALL convey the FHIR OAuth authorization endpoints and any optional SMART Capabilities it supports using this “Well-Known Uniform Resource Identifiers (URIs)” JSON document (see [RFC5785](https://datatracker.ietf.org/doc/html/rfc5785)). Contrary to RFC5785 Appendix B.4, the `.well-known` path component may be appended even if the FHIR endpoint already contains a path component",SHALL,Server,,,,1.1.02,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2
|
|
11
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,374,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#using-well-known,"Responses for `/.well-known/smart-configuration` requests SHALL be JSON, regardless of `Accept` headers provided in the request.",SHALL,Server,,,,1.1.01,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_endpoint
|
|
12
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,377,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#using-well-known,[In responses for `/.well-known/smart-configuration` requests] servers SHALL respond with application/json,SHALL,Server,,,,1.1.01,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_endpoint
|
|
13
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,381,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#metadata,[When responding to a `/.well-known/smart-configuration` request] if the server’s capabilities include `sso-openid-connect`[the] ..Metadata`issuer`[is] required ... [and SHALL contain the] String conveying this system’s OpenID Connect Issuer URL,SHALL,Server,,,,1.1.02,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2
|
|
14
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,382,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#metadata,[When responding to a `/.well-known/smart-configuration` request] if the server’s capabilities include `sso-openid-connect`[the] ...Metadata ...`jwks_uri`[is] required [and Shall contain the] string conveying this system’s JSON Web Key Set URL,SHALL,Server,,,,1.1.02,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2
|
|
15
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,383,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#metadata,[When responding to a `/.well-known/smart-configuration` request] if server supports the `launch-ehr` or `launch-standalone` capability [the] ...Metadata ...`authorization_endpoint`[is] required … [and Shall contain the] URL to the OAuth2 authorization endpoint,SHALL,Server,,,,1.1.02,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2
|
|
16
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,385,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#metadata,[When responding to a `/.well-known/smart-configuration` request the] ...Metadata ...`token_endpoint`[is] required … [and Shall contain the] URL to the OAuth2 token endpoint.,SHALL,Server,,,,1.1.02,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2
|
|
17
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,393,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#metadata,"[When responding to a `/.well-known/smart-configuration` request the] ...Metadata ...`capabilities`[is] REQUIRED … [and Shall contain the] Array of strings representing SMART capabilities (e.g., `sso-openid-connect` or `launch-standalone`) that the server supports.",SHALL,Server,,,,1.1.02,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2
|
|
18
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,394,https://hl7.org/fhir/smart-app-launch/STU2.2/conformance.html#metadata,"[When responding to a `/.well-known/smart-configuration` request the] ...Metadata ...`code_challenge_methods_supported`[is] REQUIRED … [and Shall contain the] Array of PKCE code challenge methods supported. The `S256` method SHALL be included in this list, and the `plain` method SHALL NOT be included in this list.",SHALL,Server,,,,1.1.02,bulk_data_v400_submit_consumer-bulk_data_v400_submit_consumer_backend_services-smart_discovery_stu2-well_known_capabilities_stu2
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
Req Set,ID,URL,Requirement,Conformance,Actors,Conditionality,Not Tested Reason,Not Tested Details,Bulk Data Access v4.0.0-ballot Submit - Provider Short ID(s),Bulk Data Access v4.0.0-ballot Submit - Provider Full ID(s)
|
|
2
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,22,https://hl7.org/fhir/smart-app-launch/STU2.2/app-launch.html#request,"For confidential clients, additional registration-time requirements are defined based on the client authentication method. ... For asymmetric client authentication: a [JSON Web Key Set or JWSK URL](https://hl7.org/fhir/smart-app-launch/STU2.2/client-confidential-asymmetric.html#registering-a-client-communicating-public-keys) is established",SHALL,Client,,,,1.01,bulk_data_v400_submit_provider-bulk_data_v400_submit_provider_client_registration-smart_client_registration_bsca_verification
|
|
3
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,293,https://hl7.org/fhir/smart-app-launch/STU2.2/client-confidential-asymmetric.html#registering-a-client-communicating-public-keys,[Before using the `client-confidential-asymmetric`capability t]he client SHALL register the **public key** that the client will use to authenticate itself to the FHIR authorization server.,SHALL,Client,,,,1.01,bulk_data_v400_submit_provider-bulk_data_v400_submit_provider_client_registration-smart_client_registration_bsca_verification
|
|
4
|
+
hl7.fhir.uv.smart-app-launch_2.2.0,294,https://hl7.org/fhir/smart-app-launch/STU2.2/client-confidential-asymmetric.html#registering-a-client-communicating-public-keys,"[When registering a public key for the `client-confidential-asymmetric`capability t]he public key SHALL be conveyed to the FHIR authorization server in a [JSON Web Key (JWK)](https://tools.ietf.org/html/rfc7517) structure presented within a JWK Set, as defined in JSON Web Key Set (JWKS).",SHALL,Client,,,,1.01,bulk_data_v400_submit_provider-bulk_data_v400_submit_provider_client_registration-smart_client_registration_bsca_verification
|
|
@@ -7,7 +7,7 @@ require_relative 'bulk_data_export_tests_test_group'
|
|
|
7
7
|
module BulkDataTestKit
|
|
8
8
|
module BulkDataV101
|
|
9
9
|
class BulkDataTestSuite < Inferno::TestSuite
|
|
10
|
-
title 'Bulk Data Access v1.0.1 Server'
|
|
10
|
+
title 'Bulk Data Access v1.0.1 Export - Server'
|
|
11
11
|
id :bulk_data_v101
|
|
12
12
|
links [
|
|
13
13
|
{
|
|
@@ -110,8 +110,8 @@ module BulkDataTestKit
|
|
|
110
110
|
|
|
111
111
|
description %(
|
|
112
112
|
|
|
113
|
-
The Bulk Data Access v1.0.1 suite validates the conformance
|
|
114
|
-
server to the [FHIR Bulk Data Access
|
|
113
|
+
The Bulk Data Access v1.0.1 Export - Server suite validates the conformance
|
|
114
|
+
of a FHIR® server to the [FHIR Bulk Data Access
|
|
115
115
|
IG STU1.0.1](http://hl7.org/fhir/uv/bulkdata/STU1.0.1).
|
|
116
116
|
|
|
117
117
|
This test suite is split into three different types of bulk data export:
|
|
@@ -7,7 +7,7 @@ require_relative 'bulk_data_export_tests_test_group'
|
|
|
7
7
|
module BulkDataTestKit
|
|
8
8
|
module BulkDataV200
|
|
9
9
|
class BulkDataTestSuite < Inferno::TestSuite
|
|
10
|
-
title 'Bulk Data Access v2.0.0 Server'
|
|
10
|
+
title 'Bulk Data Access v2.0.0 Export - Server'
|
|
11
11
|
id :bulk_data_v200
|
|
12
12
|
links [
|
|
13
13
|
{
|
|
@@ -115,8 +115,8 @@ module BulkDataTestKit
|
|
|
115
115
|
)
|
|
116
116
|
|
|
117
117
|
description %(
|
|
118
|
-
The Bulk Data Access v2.0.0 suite validates the conformance
|
|
119
|
-
server to the [FHIR Bulk Data Access
|
|
118
|
+
The Bulk Data Access v2.0.0 Export - Server suite validates the conformance
|
|
119
|
+
of a FHIR® server to the [FHIR Bulk Data Access
|
|
120
120
|
IG STU2](http://hl7.org/fhir/uv/bulkdata/STU2).
|
|
121
121
|
|
|
122
122
|
This test suite is split into three different types of bulk data export:
|
|
@@ -19,7 +19,7 @@ require_relative 'bulk_data_client_auth_verification_group'
|
|
|
19
19
|
module BulkDataTestKit
|
|
20
20
|
module BulkDataV200Client
|
|
21
21
|
class BulkDataClientTestSuite < Inferno::TestSuite
|
|
22
|
-
title 'Bulk Data Access v2.0.0 Client'
|
|
22
|
+
title 'Bulk Data Access v2.0.0 Export - Client'
|
|
23
23
|
|
|
24
24
|
description File.read(File.join(__dir__, 'docs', 'suite_description.md'))
|
|
25
25
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
The Bulk Data Access v2.0.0 Client test suite validates the conformance
|
|
2
|
-
to the [FHIR Bulk Data Access IG STU2](http://hl7.org/fhir/uv/bulkdata/STU2).
|
|
1
|
+
The Bulk Data Access v2.0.0 Export - Client test suite validates the conformance
|
|
2
|
+
of a client to the [FHIR Bulk Data Access IG STU2](http://hl7.org/fhir/uv/bulkdata/STU2).
|
|
3
3
|
|
|
4
4
|
## Scope
|
|
5
5
|
|
|
@@ -37,7 +37,7 @@ This collection includes requests to kick-off an export, poll the status endpoin
|
|
|
37
37
|
(respecting the `retry-after` header), download the first output result, and then delete the export.
|
|
38
38
|
|
|
39
39
|
To run the demonstration:
|
|
40
|
-
1. Start an Inferno session of the Bulk Data Client
|
|
40
|
+
1. Start an Inferno session of the Bulk Data Access v2.0.0 Export - Client suite.
|
|
41
41
|
1. In a second tab, start an instance of the SMART App Launch STU2.2 test suite and select the "Demo: Run Against the SMART
|
|
42
42
|
Client Suite (Confidential Asymmetric)" preset.
|
|
43
43
|
1. Select the "Backend Services" group and click the "RUN TESTS" button, but don't run the tests yet.
|
|
@@ -57,4 +57,4 @@ To run the demonstration:
|
|
|
57
57
|
1. Run the collection.
|
|
58
58
|
1. Once the postman collection has run, click the "Click here" link in the Inferno wait dialog modal to evaluate the requests and generate the results.
|
|
59
59
|
|
|
60
|
-
The tests should pass except for expected errors in the "Verify SMART Token Requests" test.
|
|
60
|
+
The tests should pass except for expected errors in the "Verify SMART Token Requests" test.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'smart_app_launch/smart_stu2_suite'
|
|
4
|
+
|
|
5
|
+
module BulkDataTestKit
|
|
6
|
+
module BulkDataV400
|
|
7
|
+
module Submit
|
|
8
|
+
module Consumer
|
|
9
|
+
class BackendServicesGroup < Inferno::TestGroup
|
|
10
|
+
title 'SMART Backend Services'
|
|
11
|
+
|
|
12
|
+
id :bulk_data_v400_submit_consumer_backend_services
|
|
13
|
+
|
|
14
|
+
run_as_group
|
|
15
|
+
|
|
16
|
+
optional
|
|
17
|
+
|
|
18
|
+
group from: :smart_discovery_stu2,
|
|
19
|
+
config: {
|
|
20
|
+
inputs: {
|
|
21
|
+
url: { name: :consumer_fhir_base_url },
|
|
22
|
+
smart_auth_info: {
|
|
23
|
+
options: {
|
|
24
|
+
components: [
|
|
25
|
+
{ name: :requested_scopes, default: 'system/bulk-submit' }
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
group from: :backend_services_authorization,
|
|
33
|
+
config: {
|
|
34
|
+
inputs: {
|
|
35
|
+
url: { name: :consumer_fhir_base_url },
|
|
36
|
+
smart_auth_info: {
|
|
37
|
+
options: {
|
|
38
|
+
components: [
|
|
39
|
+
{ name: :requested_scopes, default: 'system/bulk-submit' }
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
run_as_group: true
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BulkDataTestKit
|
|
4
|
+
module BulkDataV400
|
|
5
|
+
module Submit
|
|
6
|
+
module Consumer
|
|
7
|
+
class CompletePollGroup < Inferno::TestGroup
|
|
8
|
+
include URLs
|
|
9
|
+
include Helpers
|
|
10
|
+
|
|
11
|
+
title 'Bulk Data Status Polling Request - Complete'
|
|
12
|
+
|
|
13
|
+
description %(
|
|
14
|
+
This group verifies that a Data Consumer supports polling requests by a provider after a submission is complete.
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
id :bulk_data_v400_submit_consumer_poll_complete
|
|
18
|
+
|
|
19
|
+
run_as_group
|
|
20
|
+
|
|
21
|
+
input :smart_auth_info,
|
|
22
|
+
type: :auth_info,
|
|
23
|
+
options: { mode: 'access' },
|
|
24
|
+
optional: false
|
|
25
|
+
|
|
26
|
+
input :poll_url
|
|
27
|
+
|
|
28
|
+
http_client do
|
|
29
|
+
headers 'Authorization' => "Bearer #{smart_auth_info.access_token}",
|
|
30
|
+
'Accept' => 'application/json'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
test do
|
|
34
|
+
id :bulk_data_v400_submit_consumer_complete_poll_status
|
|
35
|
+
title 'Complete Poll Status'
|
|
36
|
+
|
|
37
|
+
description %(
|
|
38
|
+
This test verifies that a provider can poll for status once the Data Consumer has finished processing.
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
makes_request :complete_poll_status
|
|
42
|
+
|
|
43
|
+
run do
|
|
44
|
+
get poll_url, name: :complete_poll_status
|
|
45
|
+
|
|
46
|
+
assert_response_status(200)
|
|
47
|
+
|
|
48
|
+
content_type = request.response_header('content-type')&.value
|
|
49
|
+
media_type = content_type&.split(';')&.first&.strip
|
|
50
|
+
assert media_type&.casecmp?('application/json'),
|
|
51
|
+
'The completed poll response `Content-Type` must be `application/json`.'
|
|
52
|
+
|
|
53
|
+
assert request.response_header('x-export-status').nil?,
|
|
54
|
+
'The completed poll response included an unexpected `X-Export-Status` header.'
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
test do
|
|
59
|
+
id :bulk_data_v400_submit_consumer_complete_poll_response
|
|
60
|
+
title 'Status Response After Completion Is Valid'
|
|
61
|
+
|
|
62
|
+
description %(
|
|
63
|
+
This test verifies that the Data Consumer responded with a valid status manifest after completion.
|
|
64
|
+
|
|
65
|
+
The manifest should contain the following things:
|
|
66
|
+
- `submissionId`
|
|
67
|
+
- `transactionTime`
|
|
68
|
+
- `requiresAccessToken`
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
uses_request :complete_poll_status
|
|
72
|
+
|
|
73
|
+
run do
|
|
74
|
+
begin
|
|
75
|
+
manifest = JSON.parse(response[:body])
|
|
76
|
+
rescue JSON::ParserError, TypeError
|
|
77
|
+
assert false, 'The completed poll response body was not valid JSON.'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
assert manifest.is_a?(Hash), 'The completed poll response body must be a JSON object.'
|
|
81
|
+
|
|
82
|
+
assert manifest.key?('submissionId'), 'The status manifest was missing a `submissionId` value.'
|
|
83
|
+
manifest_submission_id = manifest['submissionId']
|
|
84
|
+
assert manifest_submission_id.is_a?(String) && manifest_submission_id.present?,
|
|
85
|
+
'The status manifest `submissionId` must be a non-empty string.'
|
|
86
|
+
assert manifest_submission_id == submission_id,
|
|
87
|
+
'The status manifest `submissionId` did not match the requested submission.'
|
|
88
|
+
|
|
89
|
+
assert manifest.key?('transactionTime'), 'The status manifest was missing a `transactionTime` value.'
|
|
90
|
+
transaction_time = manifest['transactionTime']
|
|
91
|
+
instant_regex = Regexp.new('\A' + FHIR::R4::PRIMITIVES.dig('instant', 'regex') + '\z')
|
|
92
|
+
assert transaction_time.is_a?(String) && instant_regex.match?(transaction_time),
|
|
93
|
+
'The status manifest `transactionTime` must be a valid FHIR instant.'
|
|
94
|
+
|
|
95
|
+
assert manifest.key?('requiresAccessToken'),
|
|
96
|
+
'The status manifest was missing a `requiresAccessToken` value.'
|
|
97
|
+
assert [true, false].include?(manifest['requiresAccessToken']),
|
|
98
|
+
'The status manifest `requiresAccessToken` must be a boolean.'
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
The Bulk Data Access v4.0.0-ballot Submit - Consumer test suite validates a Data Consumer
|
|
2
|
+
implementation of the [Bulk Submit Operation](https://hl7.org/fhir/uv/bulkdata/4.0.0-202609-ballot/en/)
|
|
3
|
+
within the Bulk Data Access v4.0.0-ballot IG.
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
These tests target the
|
|
8
|
+
[Bulk Data Access v4.0.0-ballot IG](https://hl7.org/fhir/uv/bulkdata/4.0.0-202609-ballot/en/).
|
|
9
|
+
The ballot specification is subject to change before final publication.
|
|
10
|
+
These tests are intended to allow implementers to perform
|
|
11
|
+
preliminary checks of their systems against the requirements stated for Bulk Submit actors
|
|
12
|
+
and [provide feedback](https://github.com/inferno-framework/bulk-data-test-kit/issues)
|
|
13
|
+
on the tests. Future versions of these tests may verify other
|
|
14
|
+
requirements and may change the test verification logic.
|
|
15
|
+
|
|
16
|
+
## Running the Tests
|
|
17
|
+
|
|
18
|
+
### Quick Start
|
|
19
|
+
|
|
20
|
+
These tests verify the behavior of a Data Consumer by simulating a Data
|
|
21
|
+
provider. The tests perform authorization, make a data submission, poll for the
|
|
22
|
+
submission status, and wait for the Data Consumer to retrieve the data.
|
|
23
|
+
|
|
24
|
+
First, the Data Consumer will likely need to register Inferno as a client. The
|
|
25
|
+
registered client id must be provided in the test inputs. A JWKS for Inferno to
|
|
26
|
+
use when signing requests can also be provided, or it will use a default key set
|
|
27
|
+
if none is provided. The FHIR endpoint of the Data Consumer and an ID to use for the
|
|
28
|
+
submission must also be provided, then the user can run the tests against the
|
|
29
|
+
Data Consumer system.
|
|
30
|
+
|
|
31
|
+
### Demonstration
|
|
32
|
+
|
|
33
|
+
You can run the Data Provider and Data Consumer suites against each other to
|
|
34
|
+
see how the tests work:
|
|
35
|
+
|
|
36
|
+
1. Start a session in the Bulk Data Access v4.0.0-ballot Submit - Provider suite.
|
|
37
|
+
1. Select the "Demo: Run Data Provider Against Inferno Data Consumer" preset.
|
|
38
|
+
1. Click the "Run All Tests" button.
|
|
39
|
+
1. In another browser tab, start a session in the Bulk Data Access v4.0.0-ballot
|
|
40
|
+
Submit - Consumer suite.
|
|
41
|
+
1. Select the "Demo: Run Data Consumer Against Inferno Data Provider" preset.
|
|
42
|
+
1. Click the "Run All Tests" button.
|
|
43
|
+
1. When the Data Consumer suite pauses after sending `completed`, advance the
|
|
44
|
+
Data Provider suite from its initial wait.
|
|
45
|
+
1. The Data Provider suite will retrieve the manifest and file synchronously,
|
|
46
|
+
then pause while waiting for the final status poll.
|
|
47
|
+
1. Advance the Data Consumer suite. It will make one final status poll.
|
|
48
|
+
1. After that poll completes, advance the Data Provider suite to finish the
|
|
49
|
+
paired workflow.
|
|
@@ -0,0 +1,39 @@
|
|
|
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 Consumer
|
|
9
|
+
module Endpoints
|
|
10
|
+
class FileDownload < Inferno::DSL::SuiteEndpoint
|
|
11
|
+
include URLs
|
|
12
|
+
|
|
13
|
+
def test_run_identifier
|
|
14
|
+
return request.params[:session_path] if request.params[:session_path].present?
|
|
15
|
+
|
|
16
|
+
SMARTAppLaunch::MockSMARTServer.issued_token_to_client_id(
|
|
17
|
+
request.headers['authorization']&.delete_prefix('Bearer ')
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def file_contents
|
|
22
|
+
"{\"resourceType\": \"Patient\"}\n"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def make_response
|
|
26
|
+
response.status = 200
|
|
27
|
+
response.body = file_contents
|
|
28
|
+
response.headers['Content-Type'] = 'application/fhir+ndjson'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def tags
|
|
32
|
+
[FILE_DOWNLOAD_TAG]
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
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 Consumer
|
|
9
|
+
module Endpoints
|
|
10
|
+
class Manifest < Inferno::DSL::SuiteEndpoint
|
|
11
|
+
include URLs
|
|
12
|
+
|
|
13
|
+
def test_run_identifier
|
|
14
|
+
return request.params[:session_path] if request.params[:session_path].present?
|
|
15
|
+
|
|
16
|
+
SMARTAppLaunch::MockSMARTServer.issued_token_to_client_id(
|
|
17
|
+
request.headers['authorization']&.delete_prefix('Bearer ')
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def download_url
|
|
22
|
+
"#{Inferno::Application['base_url']}/custom/#{TestSuite.id}#{DOWNLOAD_ROUTE}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def manifest_url
|
|
26
|
+
"#{Inferno::Application['base_url']}/custom/#{TestSuite.id}#{MANIFEST_ROUTE}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def manifest
|
|
30
|
+
{
|
|
31
|
+
transactionTime: DateTime.now,
|
|
32
|
+
requiresAccessToken: true,
|
|
33
|
+
output: [
|
|
34
|
+
{
|
|
35
|
+
type: 'Patient',
|
|
36
|
+
url: download_url
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def make_response
|
|
43
|
+
response.status = 200
|
|
44
|
+
response.headers['Content-Type'] = 'application/json'
|
|
45
|
+
response.body = manifest.to_json
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def tags
|
|
49
|
+
[MANIFEST_TAG]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|