davinci_pas_test_kit 0.12.2 → 0.13.1
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/pas_server_subscription_creation_against_pas_client.json +32 -0
- data/lib/davinci_pas_test_kit/certs/InfernoCA.key +52 -0
- data/lib/davinci_pas_test_kit/certs/InfernoCA.pem +35 -0
- data/lib/davinci_pas_test_kit/certs/TestKit.pem +32 -0
- data/lib/davinci_pas_test_kit/certs/TestKitPrivateKey.key +28 -0
- data/lib/davinci_pas_test_kit/client_suite.rb +141 -100
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/claim_response_decision/pas_claim_response_decision_test.rb +26 -75
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_other_display_test.rb +46 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_smart_display_test.rb +37 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_udap_display_test.rb +37 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/other_auth_attest_test.rb +36 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_test.rb +21 -10
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_test.rb +20 -10
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_must_support_test.rb +21 -9
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_test.rb +24 -14
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_response_attest.rb +4 -9
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_submit_must_support_test.rb +21 -9
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_create_test.rb +23 -13
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_pas_conformance_test.rb +5 -24
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_inquiry_error_test.rb +1 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_submission_error_test.rb +3 -1
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/notification/pas_subscription_notification_test.rb +24 -20
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_approval_group.rb +6 -4
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_auth_smart_group.rb +32 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_auth_udap_group.rb +31 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_denial_group.rb +10 -4
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_must_support_group.rb +29 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_options.rb +25 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_pended_group.rb +11 -4
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_registration_group.rb +63 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_subscription_setup_group.rb +23 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_workflows_group.rb +21 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_server_subscription_input_conformance.rb +35 -0
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_server_subscription_setup.rb +43 -0
- data/lib/davinci_pas_test_kit/descriptions.rb +10 -0
- data/lib/davinci_pas_test_kit/docs/client_suite_description_v201.md +203 -79
- data/lib/davinci_pas_test_kit/docs/demo/PAS Client Suite Demonstration.postman_collection.json +246 -0
- data/lib/davinci_pas_test_kit/docs/server_suite_description_v201.md +21 -10
- data/lib/davinci_pas_test_kit/endpoints/claim_endpoint.rb +13 -1
- data/lib/davinci_pas_test_kit/endpoints/subscription_create_endpoint.rb +13 -1
- data/lib/davinci_pas_test_kit/endpoints/subscription_status_endpoint.rb +10 -1
- data/lib/davinci_pas_test_kit/endpoints/token_endpoint.rb +29 -15
- data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/metadata.yml +2 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +1 -2
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/metadata.yml +28 -17
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +1 -2
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/client_inquire_request_claim_inquiry_must_support_test.rb +4 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/metadata.yml +7 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/server_inquire_request_claim_inquiry_must_support_test.rb +3 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb +9 -3
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/metadata.yml +28 -17
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb +9 -3
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/metadata.yml +6 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/server_inquire_response_claiminquiryresponse_must_support_test.rb +1 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/metadata.yml +8 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb +1 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/metadata.yml +4 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/metadata.yml +11 -5
- data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/metadata.yml +2 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/metadata.yml +6 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/metadata.yml +4 -2
- data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/metadata.yml +2 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/metadata.yml +153 -53
- data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/metadata.yml +2 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/metadata.yml +2 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +0 -2
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/metadata.yml +2 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +2 -3
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/metadata.yml +2 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +0 -2
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/metadata.yml +2 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +2 -3
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +0 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +0 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +3 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +10 -3
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/metadata.yml +2 -1
- data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/metadata.yml +4 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/metadata.yml +4 -2
- data/lib/davinci_pas_test_kit/generated/v2.0.1/server_suite.rb +8 -5
- data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/metadata.yml +2 -0
- data/lib/davinci_pas_test_kit/generated/v2.0.1/task/metadata.yml +4 -0
- data/lib/davinci_pas_test_kit/generator/group_generator.rb +20 -4
- data/lib/davinci_pas_test_kit/generator/group_metadata_extractor.rb +2 -2
- data/lib/davinci_pas_test_kit/generator/ig_resources.rb +4 -0
- data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +14 -3
- data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +16 -3
- data/lib/davinci_pas_test_kit/generator/templates/group.rb.erb +10 -3
- data/lib/davinci_pas_test_kit/generator/templates/must_support.rb.erb +3 -0
- data/lib/davinci_pas_test_kit/generator/templates/operation.rb.erb +4 -1
- data/lib/davinci_pas_test_kit/generator/templates/suite.rb.erb +8 -5
- data/lib/davinci_pas_test_kit/generator/templates/validation.rb.erb +5 -4
- data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +12 -1
- data/lib/davinci_pas_test_kit/must_support_test.rb +2 -202
- data/lib/davinci_pas_test_kit/pas_subscription_verification.rb +30 -0
- data/lib/davinci_pas_test_kit/requirements/generated/davinci-pas-test-kit_requirements_coverage.csv +58 -58
- data/lib/davinci_pas_test_kit/session_identification.rb +45 -0
- data/lib/davinci_pas_test_kit/tags.rb +1 -0
- data/lib/davinci_pas_test_kit/urls.rb +61 -9
- data/lib/davinci_pas_test_kit/version.rb +2 -2
- data/lib/requirements_config.yaml +1 -1
- metadata +54 -8
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_request_test.rb +0 -31
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_validation_test.rb +0 -18
- data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_authentication_group.rb +0 -49
- data/lib/davinci_pas_test_kit/generator/must_support_metadata_extractor.rb +0 -327
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b36c102526c99da6d1220766f4b5213d30497f8369271c68e2b41370296b874c
|
4
|
+
data.tar.gz: 2a8a894dcf8c6fab84e41ffa5f626b0499b6d3aa554f88bfb8b3e41495000e92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '07862eba661759fcae73127b68026deeb106ff203f84ed3a503b641de2d03d1fccd24d05b94a86e5dff88500e5e199b0b1284326b83d4fcbc8407ec7c7c35da5'
|
7
|
+
data.tar.gz: 5f78a7193457b07a74159f37dc2357b48173ffc9a7fbc40474d6c16c3881ce6ed981f1ce496e55d64dfca28609943a5e7ad83a3821dfe6f15622e6ee6a912df5
|
@@ -0,0 +1,32 @@
|
|
1
|
+
{
|
2
|
+
"title": "Subscription Creation Against PAS Client Tests",
|
3
|
+
"id": "pas-server-subscription-creation-against-pas-client-tests",
|
4
|
+
"test_suite_id": "davinci_pas_server_suite_v201",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "server_endpoint",
|
8
|
+
"description": "Insert the FHIR server endpoint URL for PAS",
|
9
|
+
"title": "FHIR Server Endpoint URL",
|
10
|
+
"type": "text",
|
11
|
+
"value": "http://localhost:4567/custom/davinci_pas_client_suite_v201/fhir"
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"name": "smart_credentials",
|
15
|
+
"type": "auth_info",
|
16
|
+
"title": "OAuth Credentials",
|
17
|
+
"value": "{\"access_token\":\"SAMPLE_TOKEN\"}"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"name": "access_token",
|
21
|
+
"type": "text",
|
22
|
+
"title": "Access Token",
|
23
|
+
"value": "SAMPLE_TOKEN"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"name": "subscription_resource",
|
27
|
+
"type": "textarea",
|
28
|
+
"title": "Workflow Subscription Resource",
|
29
|
+
"value": "{\n \"resourceType\" : \"Subscription\",\n \"meta\" : {\n \"profile\" : [\"http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-subscription\"]\n },\n \"status\" : \"requested\",\n \"end\" : \"2020-12-31T12:00:00Z\",\n \"reason\" : \"R4 Topic-Based Workflow Subscription for Patient Admission\",\n \"criteria\" : \"http://hl7.org/fhir/us/davinci-pas/SubscriptionTopic/PASSubscriptionTopic\",\n \"_criteria\" : {\n \"extension\" : [{\n \"url\" : \"http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-filter-criteria\",\n \"valueString\" : \"Encounter.patient=Patient/123\"\n }]\n },\n \"channel\" : {\n \"extension\" : [{\n \"url\" : \"http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-timeout\",\n \"valueUnsignedInt\" : 60\n },\n {\n \"url\" : \"http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-max-count\",\n \"valuePositiveInt\" : 20\n }],\n \"type\" : \"rest-hook\",\n \"header\": [\"Authorization: Bearer SAMPLE_TOKEN\"],\n \"endpoint\" : \"http://localhost:4567/custom/subscriptions_r5_backport_r4_server/subscription/channel/notification_listener\",\n \"payload\" : \"application/fhir+json\",\n \"_payload\" : {\n \"extension\" : [{\n \"url\" : \"http://hl7.org/fhir/uv/subscriptions-backport/StructureDefinition/backport-payload-content\",\n \"valueCode\" : \"id-only\"\n }]\n }\n }\n}"
|
30
|
+
}
|
31
|
+
]
|
32
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
2
|
+
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC6lH0mfCT1ewJC
|
3
|
+
or6Dl3uD7TpLraeyzKytROCjfjD5pg0WoezMo7LUkXZAKIWqq2L3TqAVqmUzMzZR
|
4
|
+
kkCxUeUAS9fMlH+1dItv3LxqABwLwisvMk7DXPddmsmghSuFtSsZXAnTx+qQtwKq
|
5
|
+
32d8ZdZK3b7Qz1GDeCwjmfwSpuC3u+NwDAtqZa2yEXdFv+b/bNzoSJ2GeuIZtwt9
|
6
|
+
K4g7UU3AJfaRC9+gHzAT0OzGSyXw591Hyk37XvSeXFIawY0axCggAMMrDEcDU1ZR
|
7
|
+
/4zVvfn1UYKNx7jScatNJrRWiElt+SZv0uIoEkscZJZq277eOe6csDv6H6TQb9Fy
|
8
|
+
2wSqrrazoaNTIxq77CdUckISvzZmsFWb36SaHYbJUw6SXNjrF4QRbolbb113svwM
|
9
|
+
wguJ+jDzVhXgv5MdAVrhnghoNl+8I6H1CG34meVGpqyCT+n+tqLuELsJ/XMKU5Mw
|
10
|
+
X7wL2zSgoFpM15vUNv+foU01DUgrXAxjq/dg+9iyP+ZMrMDSiEr5P/iVmAhWkzJE
|
11
|
+
SPFqtQNz7t+xMpWNjeLVmTSXQZz8Os74aC7wmcN6JwaZK39a3DLeYAjbMufLDe+N
|
12
|
+
IhkvteyeBOHfMub1jviBffzddPGUJzBbiTyaliNE0RIVyTIzY5UFqKxR2AGoDFK7
|
13
|
+
lZfBMvTNaawZhYN0jxyTaaP/7c7G2wIDAQABAoICAAbs2QJTLEoCQVC42qpmtnps
|
14
|
+
lTPW47kSuLwLqOzYk7fIbobvBquHzezu4z05Y9C0YM1+GRoEw5HVbkgzzfvm5sGO
|
15
|
+
jxl0T5MsGrrRrhqfG2tiTxkG3H6K1lGem6o+FyH02f8sd97o9i9d45b1CNHIs93+
|
16
|
+
ggUdFND05mqB3iXRFNks+6GeiNPvpzVLSaqIl2nWoBJtE4+4wuiibyY7tehBucmO
|
17
|
+
fyreDnRShAXQROGNS4C4EnIGM8PHP/wawB9nHLYoHrclYBkacQ5SCwurGQ6b6Qmu
|
18
|
+
d1KM3bLN7kZEUABAOb1/uGoBIUzMdQY+Q4j+1ARKkS02q1s6znLAG72QHIm7R2Ou
|
19
|
+
DNIotnQe7HB0U12cyt5r2n/Jq7sr/tTKUKqsm0YJ1Ne4bwPnTMBcuVn8c3hwvp8E
|
20
|
+
/qlw9zZAh4oki6Zh4o/bTcB7ToYUTbbbtwloumoyKBDCHl8MDNHN8dHmDk+SG/pp
|
21
|
+
+PWWV78WWKPTDufsnOHRKMh06Yn6vyeAL1BrnyY5cjsFH/ddxqx9/2IOgg6UP7n4
|
22
|
+
SLQVVAypkgRh6KyXaeeGpnUkJzfPIct6hAzrFEteZKrqjumD1D/TrSzsKaBUlABp
|
23
|
+
pvq3vqxuU03EHra22fbNsEX1Hb0IgkHJf+HL+q1WbwhuA+1Rlp6IAgCMI0G+nwdf
|
24
|
+
T88KiXaknBXWHxU+C4R5AoIBAQD+OHCwkrWFHFHKZpYUU4Z1lDDQhKLsaL39AQC0
|
25
|
+
gbxX0Pk7EB1Lrfanny2ZMZico4oUmL3fhnvC5VZQN8S/DaWN9YU2YaAicjkD6ShF
|
26
|
+
h7nTS4raodKYr3PhnmOvC5+x2DKJsZila/5A9f2hk7GkSafYTQGghvegHGFi8eGR
|
27
|
+
uFcl3oixKqKJapKP+ECgdWKX2/3AnY4vHVIozxcww4oickynvrqWgwGgDz75EJj/
|
28
|
+
JIg8Vrv114Yc7qkagr5Y1tOqbfcbNTdXhOsDvc/avSUt8KOmk+387lGjmizgEWFL
|
29
|
+
1REW7xua6pi7K/N2m9IHLG9Q6fnLsxiMwIDL5Hpv1xIQ7CyzAoIBAQC74tZ/ujCr
|
30
|
+
fw1PUMkA7FM8L0aFuuXNnHY/AneU4FmEuWdQSPQ6CHf/But+XVkp31Ban1ixW80a
|
31
|
+
su84ydupUPUvQxzU1ih+oKiPCpZQ6gnkhi0mglXRElLaL1SR78O7HYu4HOJdguDy
|
32
|
+
9jKh7iLL45RL2pNh5T20po61nSl+iBp/5V2hK6r+Z6SvajWN2LAMEqdGVyV7vypw
|
33
|
+
Nr3WQVL+LIiulfkIM5gCUqkfzYrQuDrmKEv2IR4SXf1+FJrd1CwjdHHNYDYeskTz
|
34
|
+
+PYABXxw0YMI/vii6YAe3UFupLFY2QXEbTQWCIP2y+fFfZo9+5DUiuf/gzOOd5SQ
|
35
|
+
XQsCcFS5E2E5AoIBAG0XFSyAWEqdo2+CZCamzQ1JoUTplexy6gxW0NGk1oiskTbK
|
36
|
+
LHgcV7sIcI3LnZyiBQ/fl6MC17sDpO1ZcSE3HvLzB84VSJ1ffJ30AKcNni1Qvm4h
|
37
|
+
gPiqWcTYrhggmc+8Ybt6rXFXDU0dAlDCyzkfrloAeZFEOaDIbPYDq/NXMnZ6rxev
|
38
|
+
nv3u8KO9OSZiGQPnkFWGhswq/eWrMF1pm646dDCLhRAveZQQ1soUWEMsjxWtdo0B
|
39
|
+
hniF5aUNs9b1oPECrUZMqMnyrNL3MenAvuKe3+sMkdS3A+t7roQckS70aJf51VO+
|
40
|
+
FfpD2v7r0M3pQH9tWBcUbJWBygM0sWGq3gLLBkcCggEABXD6WVShGDZjwkpKp/Yw
|
41
|
+
KuwLlM/m29+OJSEDKZKdxRRBg7e5Kv0XzJD8vPojHO1UvGsk/G32MLHB79kYvXyU
|
42
|
+
vTuqWBejsJciipH57Hn6s12XbSgVKCrpr1vzjQ5ukrq2Uyyy+ZZSwXaT3NCyvUjo
|
43
|
+
AJJh9lHXSaYRN/1HOFzkt5OC9Kn5F8kUoefniSYfYxofMhBQC5druTg8ozndF3Ne
|
44
|
+
uf+p6Kzl2BtgvoULYiQTwJqmKIipAEssjjw2h/ofFR/IM/R3XMg46v/oz/NYuUO4
|
45
|
+
EciglsdAaKRrwrKOWE5gtmGbQpAYkksxeSy8DNN+TEmBkorQMW4RJWUsbnOmYH3J
|
46
|
+
MQKCAQEAkCfKAaRFeTQVSjE23+Qx8QKoQoA6xFwzJJcl4yLvj3c0STLqoJqs3+0b
|
47
|
+
tQCMoVNmP3u8LwMPOCTcArHAF9oaqrcimrUZwVT8NllP1guR6a0SdRPK1wGhm2He
|
48
|
+
Ur6gZtkylcKwskS3ER1crVEsAVfvZSryPwPM+z3bxcATUgPK1j3xt0Bot6Y+uJgX
|
49
|
+
n2Zn8bVwWUwXTPzSqXKfJvfZWWO4BhwFl41xR6n8LKwmLjh082+5wHdDLBU5zgJv
|
50
|
+
pdd659dbH5eqdDCSG3hgG+Q0ylh1fsF25Hq3gLznsU7eu3LUoUOeAi6NvtgIFIMs
|
51
|
+
tbg7yWJO968aAfYz/sU2dfXaRuLD1w==
|
52
|
+
-----END PRIVATE KEY-----
|
@@ -0,0 +1,35 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIGDTCCA/WgAwIBAgIUeD85cIG8zgCvXxeKCdVjOkyK7uMwDQYJKoZIhvcNAQEL
|
3
|
+
BQAwgYUxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNQTEQMA4GA1UEBwwHQmVkZm9y
|
4
|
+
ZDEQMA4GA1UECgwHSW5mZXJubzEcMBoGA1UEAwwTSW5mZXJuby1QMlAtUm9vdC1D
|
5
|
+
QTEnMCUGCSqGSIb3DQEJARYYaW5mZXJub0Bncm91cHMubWl0cmUub3JnMB4XDTI1
|
6
|
+
MDIwNzEzMzI0OVoXDTM1MDIwNTEzMzI0OVowgYUxCzAJBgNVBAYTAlVTMQswCQYD
|
7
|
+
VQQIDAJNQTEQMA4GA1UEBwwHQmVkZm9yZDEQMA4GA1UECgwHSW5mZXJubzEcMBoG
|
8
|
+
A1UEAwwTSW5mZXJuby1QMlAtUm9vdC1DQTEnMCUGCSqGSIb3DQEJARYYaW5mZXJu
|
9
|
+
b0Bncm91cHMubWl0cmUub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
|
10
|
+
AgEAupR9Jnwk9XsCQqK+g5d7g+06S62nssysrUTgo34w+aYNFqHszKOy1JF2QCiF
|
11
|
+
qqti906gFaplMzM2UZJAsVHlAEvXzJR/tXSLb9y8agAcC8IrLzJOw1z3XZrJoIUr
|
12
|
+
hbUrGVwJ08fqkLcCqt9nfGXWSt2+0M9Rg3gsI5n8Eqbgt7vjcAwLamWtshF3Rb/m
|
13
|
+
/2zc6EidhnriGbcLfSuIO1FNwCX2kQvfoB8wE9Dsxksl8OfdR8pN+170nlxSGsGN
|
14
|
+
GsQoIADDKwxHA1NWUf+M1b359VGCjce40nGrTSa0VohJbfkmb9LiKBJLHGSWatu+
|
15
|
+
3jnunLA7+h+k0G/RctsEqq62s6GjUyMau+wnVHJCEr82ZrBVm9+kmh2GyVMOklzY
|
16
|
+
6xeEEW6JW29dd7L8DMILifow81YV4L+THQFa4Z4IaDZfvCOh9Qht+JnlRqasgk/p
|
17
|
+
/rai7hC7Cf1zClOTMF+8C9s0oKBaTNeb1Db/n6FNNQ1IK1wMY6v3YPvYsj/mTKzA
|
18
|
+
0ohK+T/4lZgIVpMyREjxarUDc+7fsTKVjY3i1Zk0l0Gc/DrO+Ggu8JnDeicGmSt/
|
19
|
+
Wtwy3mAI2zLnyw3vjSIZL7XsngTh3zLm9Y74gX383XTxlCcwW4k8mpYjRNESFcky
|
20
|
+
M2OVBaisUdgBqAxSu5WXwTL0zWmsGYWDdI8ck2mj/+3OxtsCAwEAAaNzMHEwHQYD
|
21
|
+
VR0OBBYEFLcwjOuPsSAg5iRXeYiEl7U1OowfMB8GA1UdIwQYMBaAFLcwjOuPsSAg
|
22
|
+
5iRXeYiEl7U1OowfMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgGGMBEGA1Ud
|
23
|
+
IAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQsFAAOCAgEAJ/EUPAdACrA2QdC7bnTZ
|
24
|
+
+VHUiHW21UobVvFpRmeFSZj/uCDpKv/pm0gaXY44Tkic6WtaG3ilMOk3ueZE4b/S
|
25
|
+
OjlL4LJ+s3XT9Upx7cFWx4W5wPhJfhuh+Rp3xdXkEEETzBtY4io4i67b7CZ/Uuh4
|
26
|
+
ds2aeDobVxg64HBTuKrFUbuWqyo3Iy0Uu8gUXK5pJ2uoaQlr6zYadjPp3Mea3CHI
|
27
|
+
aI9eajYroCFsa79KwRaDTYhgD+jugtqpjEy/WO7scqLBYjCHs8BhS3dQ1PxEQf+2
|
28
|
+
XnO+Jugw9LkVSm47VySeo31J0B67S/Ue9WBNn6tkF+XYXMmVybFf+U7uMSentMGZ
|
29
|
+
O5+gVAvk6kTu2VgTf2mC/3vBeB2zxQU2n1T/b1F6d9fmNnEsLTA7j0eClbi9gE0a
|
30
|
+
7bKQqzaOz1+Ok34eO9lXeOGWOuVKaLFBgxeegbNXQ6tqnA11vGL+mwe4Irwcd0qR
|
31
|
+
Deu/wTUot8aFmEOZQo3DpR8s69FdbYHtAcQ3ygb3ddq3Sx29be4ZSMnYV2zIR1Md
|
32
|
+
ED23wtWw+YiZmYWxMjGHVojdWcuHKBxfCOHN0h4y9SJRqUD/3zoQP47O1VpxH3TY
|
33
|
+
CXpj2DAEu5UWLtfrpBjOW1RKp+MMDFaCTAv9n3tQZ2Qbmrtbw8Ac4IZGlslZyCQF
|
34
|
+
ScZNbTfukq9AETyyB0BmWm4=
|
35
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,32 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIFlTCCA32gAwIBAgIUBZi9O27NwJC28apoBJDcNgriNz8wDQYJKoZIhvcNAQEL
|
3
|
+
BQAwgYUxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNQTEQMA4GA1UEBwwHQmVkZm9y
|
4
|
+
ZDEQMA4GA1UECgwHSW5mZXJubzEcMBoGA1UEAwwTSW5mZXJuby1QMlAtUm9vdC1D
|
5
|
+
QTEnMCUGCSqGSIb3DQEJARYYaW5mZXJub0Bncm91cHMubWl0cmUub3JnMB4XDTI1
|
6
|
+
MDIwNzEzMzI1MFoXDTM1MDIwNTEzMzI1MFowaTELMAkGA1UEBhMCVVMxCzAJBgNV
|
7
|
+
BAgMAk1BMRAwDgYDVQQHDAdCZWRmb3JkMRAwDgYDVQQKDAdJbmZlcm5vMSkwJwYD
|
8
|
+
VQQDDCBQYXllciB0byBQYXllciBTZXJ2ZXIgU2ltdWxhdGlvbjCCASIwDQYJKoZI
|
9
|
+
hvcNAQEBBQADggEPADCCAQoCggEBAOaiFxMO+o76qVNKfGUIeqSRxfli/jAe7Q7g
|
10
|
+
2N14sQEHNtAiIlMIXQT73UMHM9/N5X+akkESwlkQ0/wXx23RDuLCCJKM7nwrh+n4
|
11
|
+
JF+eX7LBovJEV2bW1C2Xo/zycEKMo8dfdF9Feb+K33cWSF3LGA2UFuYfQ8T/WRDx
|
12
|
+
1GFOqekQ0nBIzssGrZ9o/oEdHU3avu4I1bTTBp5NnORP9bGfJF8r4eapZbFidpG5
|
13
|
+
5kz9YeP4hMjU8c3MIsqpUF2ZILU2nvdlW2HC8SdcKBuHXk3JeqQ82wrHqkduN0LT
|
14
|
+
xw+S/Okoffm8g5OFpxWUQHCXrjsdpTcvRx91tNR/PE86lQIyJI8CAwEAAaOCARYw
|
15
|
+
ggESMEkGA1UdEQRCMECGPmh0dHBzOi8vaW5mZXJuby5oZWFsdGhpdC5nb3Yvc3Vp
|
16
|
+
dGVzL2N1c3RvbS9nMzNfdGVzdF9zdWl0ZS9maGlyMDEGA1UdJQQqMCgGCCsGAQUF
|
17
|
+
BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEMDoGA1UdHwQzMDEwL6At
|
18
|
+
oCuGKWh0dHBzOi8vaW5mZXJuby5jb20vbW9ja19jcmxfZW5kcG9pbnQuY3JsMAkG
|
19
|
+
A1UdEwQCMAAwCwYDVR0PBAQDAgeAMB0GA1UdDgQWBBRcKEh8tAM2/D0KmqO0UfxH
|
20
|
+
bDjGtTAfBgNVHSMEGDAWgBS3MIzrj7EgIOYkV3mIhJe1NTqMHzANBgkqhkiG9w0B
|
21
|
+
AQsFAAOCAgEAcgeZ3tuBJA3tHTB115scynQOoG69JiK4UdIwcro9sgwif7LWVIpP
|
22
|
+
L44ThJiriMNpFiEXtXXCzsvDfXabknOn6XuS0h+b2HLo6h7dWUY1VVqXpHXkux5L
|
23
|
+
HCQ5Hu1KHUXstZ1P+WMRaHnApuvmMq+nP2Bmjtpy83zZBX62JQR9xjolwYaN1EVS
|
24
|
+
GL4jNxY1Nlo/X1HySIky2ovuAZUcDv6PUGggzihvRR7qwLAxTdeUtmurWvxvZjVT
|
25
|
+
vHTXkFAsa3wUh/AebH9Qx02c0WPk2PSuy3gODGdv7T2BHGKga//EtTKR40GrkuHC
|
26
|
+
R4VplchOCkQDQHTAlYpgMDKDyrsTY+Yjp8UGxdanIYF6XNLqu1ZyWXkwx/+y1jTX
|
27
|
+
Uc6RQ5XvqTVEPhifBaNKVWRulThkmfL75PPLel+i2lsZDqsKlY+Iy2/ZOAhMYrBx
|
28
|
+
EiFgXU5C2QT6oTdBL52LRcQF91ROt8/MPrTrdAYrD8Lj0tKH6/zqe36qyJGm4KUX
|
29
|
+
Ypb1lbSSK0HjTN/BNQJnnRj2xe+jWoksHns7mS16W5UBx1C7K85BkufyGfx72ps8
|
30
|
+
SBqeSwCMJQG/XNeR/TLFMEIPfI0JLBYVaR5dwOn5izKB2IUUwrKq7fWDLtlL3aJ0
|
31
|
+
m9AQT/lJ1rtRtwhcT3owDUZdpl2E/EnpqsclHLGmKY/hTomRFORtxUQ=
|
32
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,28 @@
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
2
|
+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDmohcTDvqO+qlT
|
3
|
+
SnxlCHqkkcX5Yv4wHu0O4NjdeLEBBzbQIiJTCF0E+91DBzPfzeV/mpJBEsJZENP8
|
4
|
+
F8dt0Q7iwgiSjO58K4fp+CRfnl+ywaLyRFdm1tQtl6P88nBCjKPHX3RfRXm/it93
|
5
|
+
FkhdyxgNlBbmH0PE/1kQ8dRhTqnpENJwSM7LBq2faP6BHR1N2r7uCNW00waeTZzk
|
6
|
+
T/WxnyRfK+HmqWWxYnaRueZM/WHj+ITI1PHNzCLKqVBdmSC1Np73ZVthwvEnXCgb
|
7
|
+
h15NyXqkPNsKx6pHbjdC08cPkvzpKH35vIOThacVlEBwl647HaU3L0cfdbTUfzxP
|
8
|
+
OpUCMiSPAgMBAAECggEAHu2Io50kG41grJM2CERxUeVcg5tzU9ep2Y9sdZKsReOG
|
9
|
+
RbX2HWVnN/Zgjw8FtVMCnjCHwWM3HcOEce9sZn0c/mqfxKtSheM+iDEnC42M7sdJ
|
10
|
+
xyxD/j372RtXOeH3DO2YPvG9hNMnxvhkDC+4R5+nG5cK1RRHPcEyW/PaE6x9W4wN
|
11
|
+
SJEgsUr/0/xU6TjN5SWjp570uVdQQsnPBrlRJvKZzSMRz/ltndXBpA3iUGhuTHng
|
12
|
+
7ptkF7GV5cQGzvpbuyckmrjtSVVUF6/LQVStaVc5w3igCcNueICAOqH5KnDHtaUe
|
13
|
+
uVX3/D20YXiTY/AGsyEHl0EpnC4enYPhOWy2YpxktQKBgQD0etIofs0cOkWT9a2B
|
14
|
+
z00Cc6KFyMlAvb5TterdWzjD1HvsIlHyjCTVYMtVx2sw9qFZbU3CJkvyVdcTXbCY
|
15
|
+
q0+uP3WKAUObwqXJ6xpvGliB4K/S2A4YjCb3Uo8vUcRe5vK1mSW9gZS5sXYdi1WJ
|
16
|
+
IWynx8ELULS2MXIy8W/xl8PxswKBgQDxgDyLV1i3xd77DU0dg1Czxoohe1ZKs80P
|
17
|
+
K4BKY0+tqxja3XVVXjTGcCQbgI3B61cKfGQFi8ANSZTcgoDTfzkErP95dUcO/PzG
|
18
|
+
O/ZqhJczUmrOIf29IrsPUYJWZKFcaZCNa+od7niXivofU6yXv1sRUnRXD/eLbYqI
|
19
|
+
JDDbgjw7tQKBgQDMEm20kcvCgT2s+QlA7vp4Tm/ePrEHUps5owOOjGPAy3A5tpgy
|
20
|
+
3xqr5mU0kAaA043xaNTceD0y5sZmCvGrLmyPpbcGYHG/5eWfu5jQHuy8VQJO/Dwf
|
21
|
+
73VjQ030EMva7+qu/UxMeIrdyi0vEixvEDBziMEyIccGwhVyQqjPwIA2EwKBgAD5
|
22
|
+
C0VkbK8Q1P0d6Jmd1c1jl1rbLFXQs5rEChhCnieM8OSwz7AwWPYTrZGOywNk90zL
|
23
|
+
g3uiPHvROBBLVkmD0a77I2xR1J9y1XHW+/8h2ZoTUurRqDwCz84X/fZrIVtF8Zcg
|
24
|
+
QCkutL2niapmo+NYmf1P37gaEF03a79wpeG8fJGhAoGAT7GaqlSqp0SvFRsWlvtA
|
25
|
+
vDq4PuSWXsLMpZGrJTClIqvOsSWzfkhDfvh40TtVERQTu/fIgvVcHH+EYWDmKq9c
|
26
|
+
ZU996W/upEZsUfq4hdSdcw0bXX9Frz6gbf2Fi+x3i3UtrvHbtukadPIirhxWuUo8
|
27
|
+
1530zLLw5Ff3whhd4zG5KeE=
|
28
|
+
-----END PRIVATE KEY-----
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'subscriptions_test_kit'
|
2
|
+
require 'udap_security_test_kit'
|
3
|
+
require 'smart_app_launch_test_kit'
|
2
4
|
require_relative 'validator_suppressions'
|
3
5
|
require_relative 'tags'
|
4
6
|
require_relative 'urls'
|
@@ -6,124 +8,163 @@ require_relative 'endpoints/claim_endpoint'
|
|
6
8
|
require_relative 'endpoints/token_endpoint'
|
7
9
|
require_relative 'endpoints/subscription_create_endpoint'
|
8
10
|
require_relative 'endpoints/subscription_status_endpoint'
|
9
|
-
require_relative 'custom_groups/v2.0.1/
|
10
|
-
require_relative 'custom_groups/v2.0.1/
|
11
|
-
require_relative 'custom_groups/v2.0.1/
|
12
|
-
require_relative 'custom_groups/v2.0.1/
|
13
|
-
require_relative 'custom_groups/v2.0.1/
|
14
|
-
require_relative 'custom_groups/v2.0.1/
|
15
|
-
require_relative '
|
16
|
-
require_relative '
|
11
|
+
require_relative 'custom_groups/v2.0.1/pas_client_options'
|
12
|
+
require_relative 'custom_groups/v2.0.1/pas_client_workflows_group'
|
13
|
+
require_relative 'custom_groups/v2.0.1/pas_client_must_support_group'
|
14
|
+
require_relative 'custom_groups/v2.0.1/pas_client_subscription_setup_group'
|
15
|
+
require_relative 'custom_groups/v2.0.1/pas_client_registration_group'
|
16
|
+
require_relative 'custom_groups/v2.0.1/pas_client_auth_smart_group'
|
17
|
+
require_relative 'custom_groups/v2.0.1/pas_client_auth_udap_group'
|
18
|
+
require_relative 'descriptions'
|
17
19
|
|
18
20
|
module DaVinciPASTestKit
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
module DaVinciPASV201
|
22
|
+
class ClientSuite < Inferno::TestSuite
|
23
|
+
id :davinci_pas_client_suite_v201
|
24
|
+
title 'Da Vinci PAS Client Suite v2.0.1'
|
25
|
+
description File.read(File.join(__dir__, 'docs', 'client_suite_description_v201.md'))
|
23
26
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
27
|
+
links [
|
28
|
+
{
|
29
|
+
label: 'Report Issue',
|
30
|
+
url: 'https://github.com/inferno-framework/davinci-pas-test-kit/issues/'
|
31
|
+
},
|
32
|
+
{
|
33
|
+
label: 'Open Source',
|
34
|
+
url: 'https://github.com/inferno-framework/davinci-pas-test-kit/'
|
35
|
+
},
|
36
|
+
{
|
37
|
+
label: 'Download',
|
38
|
+
url: 'https://github.com/inferno-framework/davinci-pas-test-kit/releases'
|
39
|
+
},
|
40
|
+
{
|
41
|
+
label: 'Implementation Guide',
|
42
|
+
url: 'https://hl7.org/fhir/us/davinci-pas/STU2/'
|
43
|
+
}
|
44
|
+
]
|
42
45
|
|
43
|
-
|
44
|
-
|
46
|
+
fhir_resource_validator do
|
47
|
+
igs 'hl7.fhir.us.davinci-pas#2.0.1'
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
exclude_message do |message|
|
50
|
+
# Messages expected of the form `<ResourceType>: <FHIRPath>: <message>`
|
51
|
+
# We strip `<ResourceType>: <FHIRPath>: ` for the sake of matching
|
52
|
+
SUPPRESSED_MESSAGES.match?(message.message.sub(/\A\S+: \S+: /, ''))
|
53
|
+
end
|
50
54
|
end
|
51
|
-
end
|
52
55
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
suite_option :client_type,
|
57
|
+
title: 'Client Security Type',
|
58
|
+
list_options: [
|
59
|
+
{
|
60
|
+
label: 'SMART Backend Services',
|
61
|
+
value: PASClientOptions::SMART_BACKEND_SERVICES_CONFIDENTIAL_ASYMMETRIC
|
62
|
+
},
|
63
|
+
{
|
64
|
+
label: 'UDAP B2B Client Credentials',
|
65
|
+
value: PASClientOptions::UDAP_CLIENT_CREDENTIALS
|
66
|
+
},
|
67
|
+
{
|
68
|
+
label: 'Other Authentication',
|
69
|
+
value: PASClientOptions::OTHER_AUTH
|
70
|
+
}
|
71
|
+
]
|
61
72
|
|
62
|
-
|
63
|
-
|
64
|
-
|
73
|
+
route(:get, UDAPSecurityTestKit::UDAP_DISCOVERY_PATH, lambda { |_env|
|
74
|
+
UDAPSecurityTestKit::MockUDAPServer.udap_server_metadata(id)
|
75
|
+
})
|
76
|
+
route(:get, SMARTAppLaunch::SMART_DISCOVERY_PATH, lambda { |_env|
|
77
|
+
SMARTAppLaunch::MockSMARTServer.smart_server_metadata(id)
|
78
|
+
})
|
65
79
|
|
66
|
-
|
67
|
-
|
68
|
-
|
80
|
+
suite_endpoint :post, UDAPSecurityTestKit::REGISTRATION_PATH,
|
81
|
+
UDAPSecurityTestKit::MockUDAPServer::RegistrationEndpoint
|
82
|
+
suite_endpoint :post, UDAPSecurityTestKit::TOKEN_PATH, MockUdapSmartServer::TokenEndpoint
|
69
83
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
that will tell the Payer how to notify the client when pended claims
|
85
|
-
are updated.
|
86
|
-
)
|
87
|
-
run_as_group
|
84
|
+
suite_endpoint :post, SUBMIT_PATH, ClaimEndpoint
|
85
|
+
suite_endpoint :post, SESSION_SUBMIT_PATH, ClaimEndpoint
|
86
|
+
suite_endpoint :post, INQUIRE_PATH, ClaimEndpoint
|
87
|
+
suite_endpoint :post, SESSION_INQUIRE_PATH, ClaimEndpoint
|
88
|
+
suite_endpoint :post, FHIR_SUBSCRIPTION_PATH, SubscriptionCreateEndpoint
|
89
|
+
suite_endpoint :post, SESSION_FHIR_SUBSCRIPTION_PATH, SubscriptionCreateEndpoint
|
90
|
+
suite_endpoint :get, FHIR_SUBSCRIPTION_INSTANCE_PATH, SubscriptionsTestKit::SubscriptionReadEndpoint
|
91
|
+
suite_endpoint :get, SESSION_FHIR_SUBSCRIPTION_INSTANCE_PATH, SubscriptionsTestKit::SubscriptionReadEndpoint
|
92
|
+
suite_endpoint :post, FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SubscriptionStatusEndpoint
|
93
|
+
suite_endpoint :post, SESSION_FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SubscriptionStatusEndpoint
|
94
|
+
suite_endpoint :get, FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SubscriptionStatusEndpoint
|
95
|
+
suite_endpoint :get, SESSION_FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SubscriptionStatusEndpoint
|
96
|
+
suite_endpoint :post, FHIR_SUBSCRIPTION_RESOURCE_STATUS_PATH, SubscriptionStatusEndpoint
|
97
|
+
suite_endpoint :post, SESSION_FHIR_SUBSCRIPTION_RESOURCE_STATUS_PATH, SubscriptionStatusEndpoint
|
88
98
|
|
89
|
-
|
90
|
-
|
91
|
-
test from: :pas_client_v201_subscription_pas_conformance_test
|
92
|
-
test from: :subscriptions_r4_client_handshake_notification_verification
|
99
|
+
resume_test_route :get, RESUME_PASS_PATH do |request|
|
100
|
+
request.query_parameters['token']
|
93
101
|
end
|
94
102
|
|
95
|
-
|
96
|
-
|
97
|
-
description %(
|
98
|
-
The workflow tests validate that the client can participate in complete end-to-end prior
|
99
|
-
authorization interactions, initiating requests and reacting appropriately to the
|
100
|
-
responses returned.
|
101
|
-
)
|
102
|
-
group from: :pas_client_v201_approval_group
|
103
|
-
group from: :pas_client_v201_denial_group
|
104
|
-
group from: :pas_client_v201_pended_group
|
103
|
+
resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
|
104
|
+
request.query_parameters['token']
|
105
105
|
end
|
106
106
|
|
107
|
-
group
|
108
|
-
title 'Demonstrate Element Support'
|
109
|
-
description %(
|
110
|
-
Demonstrate the ability of the client to support all PAS-defined profiles and the must support elements
|
111
|
-
defined in them. This includes
|
107
|
+
group from: :pas_client_v201_registration
|
112
108
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
109
|
+
# SMART test groups (with :session_url_path input removed)
|
110
|
+
group from: :pas_client_v201_subscription_setup, id: :pas_client_v201_subscription_setup_smart do
|
111
|
+
required_suite_options client_type: PASClientOptions::SMART_BACKEND_SERVICES_CONFIDENTIAL_ASYMMETRIC
|
112
|
+
PASClientOptions.recursive_remove_input(self, :session_url_path)
|
113
|
+
config(inputs: { client_id: { optional: false } })
|
114
|
+
end
|
115
|
+
group from: :pas_client_v201_workflows, id: :pas_client_v201_workflows_smart do
|
116
|
+
required_suite_options client_type: PASClientOptions::SMART_BACKEND_SERVICES_CONFIDENTIAL_ASYMMETRIC
|
117
|
+
PASClientOptions.recursive_remove_input(self, :session_url_path)
|
118
|
+
config(inputs: { client_id: { optional: false } })
|
119
|
+
end
|
120
|
+
group from: :pas_client_v201_must_support, id: :pas_client_v201_must_support_smart do
|
121
|
+
required_suite_options client_type: PASClientOptions::SMART_BACKEND_SERVICES_CONFIDENTIAL_ASYMMETRIC
|
122
|
+
PASClientOptions.recursive_remove_input(self, :session_url_path)
|
123
|
+
config(inputs: { client_id: { optional: false } })
|
124
|
+
end
|
118
125
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
)
|
124
|
-
|
125
|
-
|
126
|
+
# UDAP test groups (with :session_url_path input removed)
|
127
|
+
group from: :pas_client_v201_subscription_setup, id: :pas_client_v201_subscription_setup_udap do
|
128
|
+
required_suite_options client_type: PASClientOptions::UDAP_CLIENT_CREDENTIALS
|
129
|
+
PASClientOptions.recursive_remove_input(self, :session_url_path)
|
130
|
+
config(inputs: { client_id: { optional: false } })
|
131
|
+
end
|
132
|
+
group from: :pas_client_v201_workflows, id: :pas_client_v201_workflows_udap do
|
133
|
+
required_suite_options client_type: PASClientOptions::UDAP_CLIENT_CREDENTIALS
|
134
|
+
PASClientOptions.recursive_remove_input(self, :session_url_path)
|
135
|
+
config(inputs: { client_id: { optional: false } })
|
126
136
|
end
|
137
|
+
group from: :pas_client_v201_must_support, id: :pas_client_v201_must_support_udap do
|
138
|
+
required_suite_options client_type: PASClientOptions::UDAP_CLIENT_CREDENTIALS
|
139
|
+
PASClientOptions.recursive_remove_input(self, :session_url_path)
|
140
|
+
config(inputs: { client_id: { optional: false } })
|
141
|
+
end
|
142
|
+
|
143
|
+
# Dedicated Endpoints test groups (with :client_id input removed)
|
144
|
+
group from: :pas_client_v201_subscription_setup, id: :pas_client_v201_subscription_setup_no_auth do
|
145
|
+
required_suite_options client_type: PASClientOptions::OTHER_AUTH
|
146
|
+
PASClientOptions.recursive_remove_input(self, :client_id)
|
147
|
+
config(inputs: { session_url_path: { optional: false } })
|
148
|
+
end
|
149
|
+
group from: :pas_client_v201_workflows, id: :pas_client_v201_workflows_no_auth do
|
150
|
+
required_suite_options client_type: PASClientOptions::OTHER_AUTH
|
151
|
+
PASClientOptions.recursive_remove_input(self, :client_id)
|
152
|
+
config(inputs: { session_url_path: { optional: false } })
|
153
|
+
end
|
154
|
+
group from: :pas_client_v201_must_support, id: :pas_client_v201_must_support_no_auth do
|
155
|
+
required_suite_options client_type: PASClientOptions::OTHER_AUTH
|
156
|
+
PASClientOptions.recursive_remove_input(self, :client_id)
|
157
|
+
config(inputs: { session_url_path: { optional: false } })
|
158
|
+
end
|
159
|
+
|
160
|
+
group from: :pas_client_v201_auth_smart,
|
161
|
+
required_suite_options: {
|
162
|
+
client_type: PASClientOptions::SMART_BACKEND_SERVICES_CONFIDENTIAL_ASYMMETRIC
|
163
|
+
}
|
164
|
+
group from: :pas_client_v201_auth_udap,
|
165
|
+
required_suite_options: {
|
166
|
+
client_type: PASClientOptions::UDAP_CLIENT_CREDENTIALS
|
167
|
+
}
|
127
168
|
end
|
128
169
|
end
|
129
170
|
end
|
@@ -1,91 +1,42 @@
|
|
1
|
-
# require 'securerandom' //used for attestation experiment - see below
|
2
|
-
# require_relative '../../../urls' // used for attestation experiment - see below
|
3
|
-
|
4
1
|
module DaVinciPASTestKit
|
5
2
|
module DaVinciPASV201
|
6
3
|
class PasClaimResponseDecisionTest < Inferno::Test
|
7
|
-
|
4
|
+
X12_ADJUDICATION_CODES = {
|
5
|
+
approval: 'A1',
|
6
|
+
denial: 'A3',
|
7
|
+
pended: 'A4'
|
8
|
+
}.freeze
|
8
9
|
|
9
10
|
id :prior_auth_claim_response_decision_validation
|
10
11
|
title 'Server response includes the expected decision code in the ClaimResponse instance'
|
11
12
|
description %(
|
12
|
-
This test
|
13
|
+
This test checks that the decision in the returned ClaimResponse matches
|
13
14
|
the decision code required for the workflow under examination.
|
14
|
-
This test is not yet implemented due to limitations in the IG (see details
|
15
|
-
[here](https://github.com/inferno-framework/davinci-pas-test-kit/blob/main/lib/davinci_pas_test_kit/docs/server_suite_description_v201.md#testing-limitations)).
|
16
|
-
It is currently optional and will always be skipped, but will be implemented in the future.
|
17
15
|
)
|
18
16
|
uses_request :pa_submit
|
19
|
-
optional # optional and skipped until implemented
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
'
|
24
|
-
|
25
|
-
|
18
|
+
run do
|
19
|
+
adjudication_code_present = resource&.resourceType == 'Bundle' && resource.entry.any? do |entry|
|
20
|
+
entry.resource&.resourceType == 'ClaimResponse' && entry.resource.item.any? do |item|
|
21
|
+
item.adjudication.any? do |adjudication|
|
22
|
+
adjudication.extension.any? do |adjudication_ext|
|
23
|
+
next unless adjudication_ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewAction'
|
24
|
+
|
25
|
+
adjudication_ext.extension.any? do |review_action_ext|
|
26
|
+
next unless review_action_ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewActionCode'
|
27
|
+
|
28
|
+
review_action_ext.valueCodeableConcept&.coding&.any? do |coding|
|
29
|
+
coding.system == 'https://codesystem.x12.org/005010/306' &&
|
30
|
+
coding.code == X12_ADJUDICATION_CODES[use_case.to_sym]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
26
36
|
end
|
27
|
-
end
|
28
37
|
|
29
|
-
|
30
|
-
|
31
|
-
# Experiment with extraction of statuses and use in an attestation
|
32
|
-
# Not used due to the following problems:
|
33
|
-
# - no real clients to test with
|
34
|
-
# - how to express the location we're looking for? The spec never mentions it explicitly.
|
35
|
-
#
|
36
|
-
# # Extract the response status
|
37
|
-
# status_values = []
|
38
|
-
# if resource.resourceType == 'Bundle'
|
39
|
-
# resource.entry.each do |one_entry|
|
40
|
-
# next unless one_entry.resource.resourceType == 'ClaimResponse'
|
41
|
-
#
|
42
|
-
# one_entry.resource.item.each do |one_item|
|
43
|
-
# one_item.adjudication.each do |one_adjudication|
|
44
|
-
# one_adjudication.extension
|
45
|
-
# .select { |ext| ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewAction' }
|
46
|
-
# .each do |review_action_ext|
|
47
|
-
# review_action_ext.extension.select { |ext| ext.url == 'http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-reviewActionCode' }
|
48
|
-
# .each do |review_action_code_ext|
|
49
|
-
# review_action_code_ext.valueCodeableConcept.coding.select { |coding| coding.system == 'https://codesystem.x12.org/005010/306' }
|
50
|
-
# .each do |one_code|
|
51
|
-
# if one_code.code
|
52
|
-
# status_values << "#{one_code.code}#{one_code.display ? " (#{one_code.display})" : ''}"
|
53
|
-
# end
|
54
|
-
# end
|
55
|
-
# end
|
56
|
-
# end
|
57
|
-
# end
|
58
|
-
# end
|
59
|
-
# end
|
60
|
-
# end
|
61
|
-
#
|
62
|
-
# assert !status_values.empty?, 'No status values found **where??**'
|
63
|
-
#
|
64
|
-
# # Attestation
|
65
|
-
# attestation_key = SecureRandom.uuid
|
66
|
-
# status_display = status_values.reduce('') { |result, status| result + "- #{status}\n" }
|
67
|
-
# wait(
|
68
|
-
# identifier: attestation_key,
|
69
|
-
# message: %(
|
70
|
-
# **Status Validation for `#{status}`**:
|
71
|
-
#
|
72
|
-
# The following adjudication status
|
73
|
-
# #{status_values.length > 1 ? 'values were' : 'value was'}
|
74
|
-
# found in the response **where??**:
|
75
|
-
#
|
76
|
-
# #{status_display}
|
77
|
-
#
|
78
|
-
# I attest that
|
79
|
-
# #{status_values.length > 1 ? 'one of the status values' : 'the status value'}
|
80
|
-
# returned by the server indicates that the request was #{status}
|
81
|
-
#
|
82
|
-
# [Click here](#{resume_pass_url}?token=#{attestation_key}) if the above statement is **true**.
|
83
|
-
#
|
84
|
-
# [Click here](#{resume_fail_url}?token=#{attestation_key}) if the above statement is **false**.
|
85
|
-
# )
|
86
|
-
# )
|
87
|
-
#
|
88
|
-
# end of experiment with attestation code
|
38
|
+
assert adjudication_code_present, 'Claim Response did not contain expected adjudication status ' \
|
39
|
+
"code '#{X12_ADJUDICATION_CODES[use_case.to_sym]}'"
|
89
40
|
end
|
90
41
|
end
|
91
42
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative '../../../urls'
|
2
|
+
|
3
|
+
module DaVinciPASTestKit
|
4
|
+
module DaVinciPASV201
|
5
|
+
class PASClientRegistrationConfigurationOtherDisplay < Inferno::Test
|
6
|
+
include URLs
|
7
|
+
|
8
|
+
id :pas_client_v201_reg_config_other_display
|
9
|
+
title 'Confirm client configuration'
|
10
|
+
description %(
|
11
|
+
This test provides all the information needed for testers to configure
|
12
|
+
the client under test to communicate with Inferno's simulated PAS server
|
13
|
+
using dedicated endpoints.
|
14
|
+
)
|
15
|
+
input :session_url_path,
|
16
|
+
title: 'Session-specific URL path extension',
|
17
|
+
type: 'text',
|
18
|
+
optional: true,
|
19
|
+
description: %(
|
20
|
+
Inferno will use this value to setup dedicated session-specific FHIR endpoints
|
21
|
+
to use during these tests. If not provided a value will be generated.
|
22
|
+
)
|
23
|
+
output :session_url_path
|
24
|
+
|
25
|
+
run do
|
26
|
+
if session_url_path.blank?
|
27
|
+
new_session_url_path = test_session_id
|
28
|
+
output(session_url_path: new_session_url_path)
|
29
|
+
end
|
30
|
+
wait_identifier = session_url_path || new_session_url_path
|
31
|
+
|
32
|
+
wait(
|
33
|
+
identifier: wait_identifier,
|
34
|
+
message: %(
|
35
|
+
**Inferno Simulated Server Details**:
|
36
|
+
|
37
|
+
FHIR Base URL: `#{session_fhir_base_url(wait_identifier)}`
|
38
|
+
|
39
|
+
[Click here](#{resume_pass_url}?token=#{wait_identifier}) once you have configured
|
40
|
+
the client to connect to Inferno at the above endpoints.
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|