davinci_pas_test_kit 0.12.1 → 0.13.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.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/pas_server_subscription_creation_against_pas_client.json +32 -0
  3. data/lib/davinci_pas_test_kit/certs/InfernoCA.key +52 -0
  4. data/lib/davinci_pas_test_kit/certs/InfernoCA.pem +35 -0
  5. data/lib/davinci_pas_test_kit/certs/TestKit.pem +32 -0
  6. data/lib/davinci_pas_test_kit/certs/TestKitPrivateKey.key +28 -0
  7. data/lib/davinci_pas_test_kit/client_suite.rb +141 -100
  8. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_other_display_test.rb +46 -0
  9. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_smart_display_test.rb +37 -0
  10. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/configuration_udap_display_test.rb +37 -0
  11. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_registration/other_auth_attest_test.rb +36 -0
  12. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_approval_submit_test.rb +24 -10
  13. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_denial_submit_test.rb +23 -10
  14. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_must_support_test.rb +21 -9
  15. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_inquire_request_bundle_validation_test.rb +4 -0
  16. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_pended_submit_test.rb +30 -14
  17. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_request_bundle_validation_test.rb +6 -0
  18. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_response_attest.rb +4 -9
  19. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_submit_must_support_test.rb +24 -9
  20. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_create_test.rb +26 -13
  21. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_subscription_pas_conformance_test.rb +6 -24
  22. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_inquiry_error_test.rb +1 -0
  23. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/error_tests/pas_submission_error_test.rb +3 -0
  24. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/notification/pas_subscription_notification_test.rb +24 -20
  25. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_approval_group.rb +6 -4
  26. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_auth_smart_group.rb +32 -0
  27. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_auth_udap_group.rb +31 -0
  28. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_denial_group.rb +10 -4
  29. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_must_support_group.rb +29 -0
  30. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_options.rb +25 -0
  31. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_pended_group.rb +11 -4
  32. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_registration_group.rb +63 -0
  33. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_subscription_setup_group.rb +23 -0
  34. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_workflows_group.rb +21 -0
  35. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_server_subscription_input_conformance.rb +35 -0
  36. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_server_subscription_setup.rb +43 -0
  37. data/lib/davinci_pas_test_kit/descriptions.rb +10 -0
  38. data/lib/davinci_pas_test_kit/docs/client_suite_description_v201.md +203 -79
  39. data/lib/davinci_pas_test_kit/docs/demo/PAS Client Suite Demonstration.postman_collection.json +246 -0
  40. data/lib/davinci_pas_test_kit/docs/server_suite_description_v201.md +21 -10
  41. data/lib/davinci_pas_test_kit/endpoints/claim_endpoint.rb +13 -1
  42. data/lib/davinci_pas_test_kit/endpoints/subscription_create_endpoint.rb +13 -1
  43. data/lib/davinci_pas_test_kit/endpoints/subscription_status_endpoint.rb +10 -1
  44. data/lib/davinci_pas_test_kit/endpoints/token_endpoint.rb +29 -15
  45. data/lib/davinci_pas_test_kit/generated/v2.0.1/beneficiary/metadata.yml +2 -1
  46. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/claim_operation_test.rb +1 -1
  47. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim/metadata.yml +28 -17
  48. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/claim_inquiry_operation_test.rb +1 -2
  49. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/client_inquire_request_claim_inquiry_must_support_test.rb +4 -1
  50. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/metadata.yml +7 -1
  51. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_inquiry/server_inquire_request_claim_inquiry_must_support_test.rb +3 -1
  52. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/client_submit_request_claim_update_must_support_test.rb +9 -3
  53. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/metadata.yml +28 -17
  54. data/lib/davinci_pas_test_kit/generated/v2.0.1/claim_update/server_submit_request_claim_update_must_support_test.rb +9 -3
  55. data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/metadata.yml +6 -0
  56. data/lib/davinci_pas_test_kit/generated/v2.0.1/claiminquiryresponse/server_inquire_response_claiminquiryresponse_must_support_test.rb +1 -0
  57. data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/metadata.yml +8 -0
  58. data/lib/davinci_pas_test_kit/generated/v2.0.1/claimresponse/server_submit_response_claimresponse_must_support_test.rb +1 -0
  59. data/lib/davinci_pas_test_kit/generated/v2.0.1/communication_request/metadata.yml +4 -0
  60. data/lib/davinci_pas_test_kit/generated/v2.0.1/coverage/metadata.yml +11 -5
  61. data/lib/davinci_pas_test_kit/generated/v2.0.1/device_request/metadata.yml +2 -0
  62. data/lib/davinci_pas_test_kit/generated/v2.0.1/encounter/metadata.yml +6 -0
  63. data/lib/davinci_pas_test_kit/generated/v2.0.1/insurer/metadata.yml +4 -2
  64. data/lib/davinci_pas_test_kit/generated/v2.0.1/medication_request/metadata.yml +2 -0
  65. data/lib/davinci_pas_test_kit/generated/v2.0.1/metadata.yml +153 -53
  66. data/lib/davinci_pas_test_kit/generated/v2.0.1/nutrition_order/metadata.yml +2 -0
  67. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/metadata.yml +2 -1
  68. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_request_bundle/server_pas_inquiry_request_bundle_validation_test.rb +0 -2
  69. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/metadata.yml +2 -1
  70. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_inquiry_response_bundle/server_pas_inquiry_response_bundle_validation_test.rb +2 -3
  71. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/metadata.yml +2 -1
  72. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_request_bundle/server_pas_request_bundle_validation_test.rb +0 -2
  73. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/metadata.yml +2 -1
  74. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_response_bundle/server_pas_response_bundle_validation_test.rb +2 -3
  75. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_approval_use_case_group.rb +0 -1
  76. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_denial_use_case_group.rb +0 -1
  77. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_must_support_use_case_group.rb +3 -0
  78. data/lib/davinci_pas_test_kit/generated/v2.0.1/pas_server_pended_use_case_group.rb +10 -3
  79. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner/metadata.yml +2 -1
  80. data/lib/davinci_pas_test_kit/generated/v2.0.1/practitioner_role/metadata.yml +4 -0
  81. data/lib/davinci_pas_test_kit/generated/v2.0.1/requestor/metadata.yml +4 -2
  82. data/lib/davinci_pas_test_kit/generated/v2.0.1/server_suite.rb +8 -5
  83. data/lib/davinci_pas_test_kit/generated/v2.0.1/service_request/metadata.yml +2 -0
  84. data/lib/davinci_pas_test_kit/generated/v2.0.1/task/metadata.yml +4 -0
  85. data/lib/davinci_pas_test_kit/generator/group_generator.rb +20 -4
  86. data/lib/davinci_pas_test_kit/generator/group_metadata_extractor.rb +2 -2
  87. data/lib/davinci_pas_test_kit/generator/ig_resources.rb +4 -0
  88. data/lib/davinci_pas_test_kit/generator/must_support_test_generator.rb +14 -3
  89. data/lib/davinci_pas_test_kit/generator/operation_test_generator.rb +16 -3
  90. data/lib/davinci_pas_test_kit/generator/templates/group.rb.erb +10 -3
  91. data/lib/davinci_pas_test_kit/generator/templates/must_support.rb.erb +3 -0
  92. data/lib/davinci_pas_test_kit/generator/templates/operation.rb.erb +4 -1
  93. data/lib/davinci_pas_test_kit/generator/templates/suite.rb.erb +8 -5
  94. data/lib/davinci_pas_test_kit/generator/templates/validation.rb.erb +5 -4
  95. data/lib/davinci_pas_test_kit/generator/validation_test_generator.rb +12 -1
  96. data/lib/davinci_pas_test_kit/must_support_test.rb +2 -202
  97. data/lib/davinci_pas_test_kit/pas_bundle_validation.rb +4 -4
  98. data/lib/davinci_pas_test_kit/pas_subscription_verification.rb +30 -0
  99. data/lib/davinci_pas_test_kit/requirements/davinci-pas-test-kit_out_of_scope_requirements.csv +11 -0
  100. data/lib/davinci_pas_test_kit/requirements/davinci-pas-test-kit_requirements.csv +214 -0
  101. data/lib/davinci_pas_test_kit/requirements/generated/davinci-pas-test-kit_requirements_coverage.csv +214 -0
  102. data/lib/davinci_pas_test_kit/session_identification.rb +45 -0
  103. data/lib/davinci_pas_test_kit/tags.rb +1 -0
  104. data/lib/davinci_pas_test_kit/urls.rb +61 -9
  105. data/lib/davinci_pas_test_kit/version.rb +2 -2
  106. data/lib/davinci_pas_test_kit.rb +1 -0
  107. data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +22 -0
  108. data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +284 -0
  109. data/lib/requirements_config.yaml +17 -0
  110. metadata +62 -10
  111. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_request_test.rb +0 -31
  112. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/client_tests/pas_client_token_validation_test.rb +0 -18
  113. data/lib/davinci_pas_test_kit/custom_groups/v2.0.1/pas_client_authentication_group.rb +0 -49
  114. 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: 62baa1ef3d1f180bb4ca13321592b2068377bc014a075338b2a2549f72b9a471
4
- data.tar.gz: 032b4d39b5f4e5b82912f46dce3ae2d22431d14119c036c528f6620249299e16
3
+ metadata.gz: bcd1fe3d909acb2221969db4b45584b4ae3f2561b4e08cb312862f577ce80c4b
4
+ data.tar.gz: a6c61fe356af3382dc1b9f6da2c7c512a02840e94b55a69ae492c7945b60e8d3
5
5
  SHA512:
6
- metadata.gz: 9d32c1fc5e23da501b1b708a18b564f8f722c0759994c87c04c2ebbebb5806361ba0893af1178ee2de99ba0ecd17aeb36cfab9af0e42eba2f286884138e7edbd
7
- data.tar.gz: cfbdece1e0e3d1dc963d0335608a698bb3c7e8cfb8e9a337e89a90fa0756f8c23f8732cdd986303dee3ac1b3a788cc1b3efe723aa5d973572d2d37346f876348
6
+ metadata.gz: d52966e92c12af47546cb76ea555d3c1ba293d050cd261519401547c332d9749cceb62ce9df47d57a85b32bd85034b2475615ace06ccaa09e4ca6d54b7c0c1fc
7
+ data.tar.gz: 896f31d121de68770e0a13350a378d4e1a665346c2e18b7f555b61d2d2e4c3a3b99669a55058fc27fa54fc89b0c7abac4282ad7eb8e4ba72e39dc005ee09037b
@@ -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
+ 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
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/pas_client_authentication_group'
10
- require_relative 'custom_groups/v2.0.1/pas_client_approval_group'
11
- require_relative 'custom_groups/v2.0.1/pas_client_denial_group'
12
- require_relative 'custom_groups/v2.0.1/pas_client_pended_group'
13
- require_relative 'custom_groups/v2.0.1/client_tests/pas_client_subscription_create_test'
14
- require_relative 'custom_groups/v2.0.1/client_tests/pas_client_subscription_pas_conformance_test'
15
- require_relative 'generated/v2.0.1/pas_client_submit_must_support_use_case_group'
16
- require_relative 'generated/v2.0.1/pas_client_inquiry_must_support_use_case_group'
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
- class ClientSuite < Inferno::TestSuite
20
- id :davinci_pas_client_suite_v201
21
- title 'Da Vinci PAS Client Suite v2.0.1'
22
- description File.read(File.join(__dir__, 'docs', 'client_suite_description_v201.md'))
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
- links [
25
- {
26
- label: 'Report Issue',
27
- url: 'https://github.com/inferno-framework/davinci-pas-test-kit/issues/'
28
- },
29
- {
30
- label: 'Open Source',
31
- url: 'https://github.com/inferno-framework/davinci-pas-test-kit/'
32
- },
33
- {
34
- label: 'Download',
35
- url: 'https://github.com/inferno-framework/davinci-pas-test-kit/releases'
36
- },
37
- {
38
- label: 'Implementation Guide',
39
- url: 'https://hl7.org/fhir/us/davinci-pas/STU2/'
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
- fhir_resource_validator do
44
- igs 'hl7.fhir.us.davinci-pas#2.0.1'
46
+ fhir_resource_validator do
47
+ igs 'hl7.fhir.us.davinci-pas#2.0.1'
45
48
 
46
- exclude_message do |message|
47
- # Messages expected of the form `<ResourceType>: <FHIRPath>: <message>`
48
- # We strip `<ResourceType>: <FHIRPath>: ` for the sake of matching
49
- SUPPRESSED_MESSAGES.match?(message.message.sub(/\A\S+: \S+: /, ''))
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
- suite_endpoint :post, TOKEN_PATH, TokenEndpoint
54
- suite_endpoint :post, SUBMIT_PATH, ClaimEndpoint
55
- suite_endpoint :post, INQUIRE_PATH, ClaimEndpoint
56
- suite_endpoint :post, FHIR_SUBSCRIPTION_PATH, SubscriptionCreateEndpoint
57
- suite_endpoint :get, FHIR_SUBSCRIPTION_INSTANCE_PATH, SubscriptionsTestKit::SubscriptionReadEndpoint
58
- suite_endpoint :post, FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SubscriptionStatusEndpoint
59
- suite_endpoint :get, FHIR_SUBSCRIPTION_INSTANCE_STATUS_PATH, SubscriptionStatusEndpoint
60
- suite_endpoint :post, FHIR_SUBSCRIPTION_RESOURCE_STATUS_PATH, SubscriptionStatusEndpoint
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
- resume_test_route :get, RESUME_PASS_PATH do |request|
63
- request.query_parameters['token']
64
- end
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
- resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
67
- request.query_parameters['token']
68
- end
80
+ suite_endpoint :post, UDAPSecurityTestKit::REGISTRATION_PATH,
81
+ UDAPSecurityTestKit::MockUDAPServer::RegistrationEndpoint
82
+ suite_endpoint :post, UDAPSecurityTestKit::TOKEN_PATH, MockUdapSmartServer::TokenEndpoint
69
83
 
70
- group from: :pas_client_v201_authentication_group
71
- group do
72
- title 'PAS Client Validation'
73
- description %(
74
- These tests perform the functional validation of the client under test.
75
- For requests to be recognized by Inferno to be part of this test session
76
- they must include the configured bearer token
77
- (user provided or generated during the authorization tests)
78
- in the Authorization HTTP header with prefix "Bearer: ".
79
- )
80
- group do
81
- title 'PAS Subscription Setup'
82
- description %(
83
- These tests verify that the client can create a Subscription instance
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
- test from: :pas_client_v201_subscription_create_test
90
- test from: :subscriptions_r4_client_subscription_verification
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
- group do
96
- title 'Demonstrate Workflow Support'
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 do
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
- - the ability to make prior authorization submission and inquiry requests that contain all
114
- PAS-defined profiles and their must support elements.
115
- - the ability to receive in responses to those requests all PAS-defined profiles and their
116
- must support elements and continue the prior authorization workflow as appropriate (not currently
117
- implemented in these tests).
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
- Clients under test will be asked to make additional requests to Inferno demonstrating coverage
120
- of all must support items in the requests. Note that Inferno will consider requests made during
121
- the workflow group of tests, so only profiles and must support elements not demonstrated during
122
- those tests need to be submitted as a part of these.
123
- )
124
- group from: :pas_client_v201_submit_must_support_use_case
125
- group from: :pas_client_v201_inquiry_must_support_use_case
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
@@ -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
@@ -0,0 +1,37 @@
1
+ require_relative '../../../urls'
2
+
3
+ module DaVinciPASTestKit
4
+ module DaVinciPASV201
5
+ class PASClientRegistrationConfigurationSMARTDisplay < Inferno::Test
6
+ include URLs
7
+
8
+ id :pas_client_v201_reg_config_smart_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
+ including SMART endpoints to obtain access tokens.
14
+ )
15
+
16
+ input :client_id
17
+
18
+ run do
19
+ wait(
20
+ identifier: client_id,
21
+ message: %(
22
+ **Inferno Simulated Server Details**:
23
+
24
+ FHIR Base URL: `#{fhir_base_url}`
25
+
26
+ Authentication Details:
27
+ - SMART Client Id: `#{client_id}`
28
+ - Token endpoint: `#{token_url}`
29
+
30
+ [Click here](#{resume_pass_url}?token=#{client_id}) once you have configured
31
+ the client to connect to Inferno at the above endpoints.
32
+ )
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../../../urls'
2
+
3
+ module DaVinciPASTestKit
4
+ module DaVinciPASV201
5
+ class PASClientRegistrationConfigurationUDAPDisplay < Inferno::Test
6
+ include URLs
7
+
8
+ id :pas_client_v201_reg_config_udap_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
+ including UDAP endpoints to obtain access tokens.
14
+ )
15
+
16
+ input :client_id
17
+
18
+ run do
19
+ wait(
20
+ identifier: client_id,
21
+ message: %(
22
+ **Inferno Simulated Server Details**:
23
+
24
+ FHIR Base URL: `#{fhir_base_url}`
25
+
26
+ Authentication Details:
27
+ - UDAP Client Id: `#{client_id}`
28
+ - Token endpoint: `#{token_url}`
29
+
30
+ [Click here](#{resume_pass_url}?token=#{client_id}) once you have configured
31
+ the client to connect to Inferno at the above endpoints.
32
+ )
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../../../urls'
2
+
3
+ module DaVinciPASTestKit
4
+ module DaVinciPASV201
5
+ class PASClientRegistrationOtherAuthAttest < Inferno::Test
6
+ include URLs
7
+
8
+ id :pas_client_v201_reg_other_auth_attest
9
+ title 'Verify that the client supports an approach for authenticating itself to the server (Attestation)'
10
+ description %(
11
+ Since a standard auth approach was not chosen for this session, this test provides testers with an
12
+ opportunity to attest to their client's ability to authenticate itself to a server
13
+ using a method that this Inferno test suite does not support, such as mutual authentication
14
+ TLS.
15
+ )
16
+
17
+ run do
18
+ identifier = SecureRandom.hex(32)
19
+ wait(
20
+ identifier:,
21
+ message: %(
22
+ **Other Authentication Attestation**:
23
+
24
+ I attest that the client system can authenticate itself with a PAS server using
25
+ a mechanism other than the SMART Backend Services or UDAP B2B client credentials
26
+ flows.
27
+
28
+ [Click here](#{resume_pass_url}?token=#{identifier}) if the above statement is true.
29
+
30
+ [Click here](#{resume_fail_url}?token=#{identifier}) if the above statement is false.
31
+ )
32
+ )
33
+ end
34
+ end
35
+ end
36
+ end