smart_app_launch_test_kit 1.0.1 → 1.0.2

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/execution_scripts/README.md +16 -0
  3. data/execution_scripts/client_vs_server/access_data_and_continue_client.rb +37 -0
  4. data/execution_scripts/client_vs_server/smart_v22_backend_services_with_commands.yaml +69 -0
  5. data/execution_scripts/client_vs_server/smart_v22_backend_services_with_commands_client_expected.json +1 -0
  6. data/execution_scripts/client_vs_server/smart_v22_backend_services_with_commands_server_expected.json +478 -0
  7. data/execution_scripts/client_vs_server/smart_v22_backend_services_with_commands_server_no_tls_expected.json +479 -0
  8. data/execution_scripts/client_vs_server/smart_v22_confidential_symmetric_with_commands.yaml +122 -0
  9. data/execution_scripts/client_vs_server/smart_v22_confidential_symmetric_with_commands_client_expected.json +1 -0
  10. data/execution_scripts/client_vs_server/smart_v22_confidential_symmetric_with_commands_client_no_tls_expected.json +1 -0
  11. data/execution_scripts/client_vs_server/smart_v22_confidential_symmetric_with_commands_server_expected.json +1 -0
  12. data/execution_scripts/client_vs_server/smart_v22_confidential_symmetric_with_commands_server_no_tls_expected.json +1 -0
  13. data/execution_scripts/client_vs_server/smart_v22_public_with_commands.yaml +123 -0
  14. data/execution_scripts/client_vs_server/smart_v22_public_with_commands_client_expected.json +1 -0
  15. data/execution_scripts/client_vs_server/smart_v22_public_with_commands_client_no_tls_expected.json +1 -0
  16. data/execution_scripts/client_vs_server/smart_v22_public_with_commands_server_expected.json +1 -0
  17. data/execution_scripts/client_vs_server/smart_v22_public_with_commands_server_no_tls_expected.json +1 -0
  18. data/execution_scripts/client_vs_server/visit_and_wait_to_return_to_inferno.rb +17 -0
  19. data/execution_scripts/reference_server/base_ref_server_authorize.rb +24 -0
  20. data/execution_scripts/reference_server/base_ref_server_ehr_launch.rb +24 -0
  21. data/execution_scripts/reference_server/ref_server_authorize_85_all_scopes.rb +3 -0
  22. data/execution_scripts/reference_server/ref_server_authorize_launched_all_scopes.rb +3 -0
  23. data/execution_scripts/reference_server/ref_server_ehr_launch_85.rb +3 -0
  24. data/execution_scripts/reference_server/smart_v1_vs_reference_server_with_commands.yaml +60 -0
  25. data/execution_scripts/reference_server/smart_v1_vs_reference_server_with_commands_expected.json +1 -0
  26. data/execution_scripts/reference_server/smart_v22_vs_reference_server_with_commands.yaml +93 -0
  27. data/execution_scripts/reference_server/smart_v22_vs_reference_server_with_commands_expected.json +1 -0
  28. data/execution_scripts/reference_server/smart_v22_vs_reference_server_with_commands_same_host_expected.json +4166 -0
  29. data/execution_scripts/reference_server/smart_v2_vs_reference_server_with_commands.yaml +81 -0
  30. data/execution_scripts/reference_server/smart_v2_vs_reference_server_with_commands_expected.json +1 -0
  31. data/lib/smart_app_launch/app_launch_test.rb +4 -0
  32. data/lib/smart_app_launch/app_redirect_test.rb +2 -1
  33. data/lib/smart_app_launch/client_suite/access_alca_interaction_test.rb +5 -1
  34. data/lib/smart_app_launch/client_suite/access_alcs_interaction_test.rb +5 -1
  35. data/lib/smart_app_launch/client_suite/access_alp_interaction_test.rb +6 -2
  36. data/lib/smart_app_launch/client_suite/access_bsca_interaction_test.rb +4 -1
  37. data/lib/smart_app_launch/client_suite/authentication_verification.rb +1 -1
  38. data/lib/smart_app_launch/client_suite/client_descriptions.rb +4 -3
  39. data/lib/smart_app_launch/cors_metadata_request_test.rb +11 -4
  40. data/lib/smart_app_launch/cors_openid_fhir_user_claim_test.rb +8 -4
  41. data/lib/smart_app_launch/cors_token_exchange_test.rb +8 -4
  42. data/lib/smart_app_launch/cors_well_known_endpoint_test.rb +8 -4
  43. data/lib/smart_app_launch/version.rb +2 -2
  44. metadata +34 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21424366eca8716c4cc57feb07c162f7165c8075d4b086e9df170612d877822a
4
- data.tar.gz: d2f9cdf39968fe9fc9ef55e4dd22ea149efd49d2037ef3287b71a62ed280cebc
3
+ metadata.gz: d447427f008c3e0b93992b96bd18039b5c8819c1ac017820c33c6e755ce9b2e8
4
+ data.tar.gz: de45b6b42de7a104fd051fa80a91ecfd580650643ba4179ecd7655e81c6b3d34
5
5
  SHA512:
6
- metadata.gz: 549de4e5b1ba8ffb722bea7c836a4cb2b76448468c6a23aacce51f6308ba79a4ca0376337d28d5a9c291bab8b6a5cb3161500fcce6cde726564ee2ba91d6219f
7
- data.tar.gz: feb62ad828bed3008a14dcb731a93dec19720aba821eda08ebda4777813bb197282c3c9a9fe50d9981a392381ea0e9114da1c6dcf0cfe7abb7cb29c8ab34d802
6
+ metadata.gz: 1718dffebfcb4d79b3967a137781a8f9e85c60e55a9f2921faf1c5b3d3bb81c5887d778ade46d3492a121b039748e8317af102a0612bec080a82145f061efac6
7
+ data.tar.gz: 5bd03aa14bb3912820a1ca7d25c944644d4995e250f7b6c74aed826effa6236827ce326d121652d73816a48f70c48dea65b03fa18d889eb2712f5049b7bc2c7a
@@ -0,0 +1,16 @@
1
+ # Using Core Execution Scripts
2
+
3
+ This directory contains [execution scripts](https://inferno-framework.github.io/docs/advanced-test-features/scripting-execution.html)
4
+ that demonstrate and validate the behavior of suites defined
5
+ by this test kit in the context of running Inferno services
6
+ allowing for end-to-end executions that check for expected suite execution
7
+ results when using Inferno services like the FHIR Validator and FHIR Path
8
+ Service as well as dependency services that Inferno does not control such
9
+ as `tx.fhir.org`.
10
+
11
+ Execution scripts defined here will
12
+ be [executed](https://inferno-framework.github.io/docs/advanced-test-features/scripting-execution.html#execution)
13
+ automatically on pull requests as a part of the github
14
+ workflows and can also be executed locally using the
15
+ [`execute_script` CLI](https://inferno-framework.github.io/docs/getting-started/inferno-cli.html#complex-scripted-execution)
16
+ on individual scripts or the `execute_scripts:run_all` rake task.
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'selenium-webdriver'
3
+ rescue LoadError
4
+ warn 'selenium-webdriver is required to run this command script.'
5
+ warn "Add it to your Gemfile: gem 'selenium-webdriver'"
6
+ exit(1)
7
+ end
8
+ require 'faraday'
9
+ require 'json'
10
+
11
+ session_id = ARGV[0]
12
+ target_suite = ARGV[1]
13
+ continuation_url = ARGV[2]
14
+ patient_id = ARGV[3]
15
+ inferno_host = ARGV[4]
16
+
17
+ inputs_cli_command = "bundle exec inferno session data #{session_id}#{" -I #{inferno_host}" unless inferno_host.nil?}"
18
+ inputs = JSON.parse(`#{inputs_cli_command}`)
19
+ token = inputs.find { |input| input['name'] == 'bearer_token' }&.dig('value')
20
+ raise StandardError, 'could not find access token to revoke' if token.nil? || token == ''
21
+
22
+ suite_base_url = continuation_url.split(target_suite).first
23
+ read_url = "#{suite_base_url}#{target_suite}/fhir/Patient/#{patient_id}"
24
+
25
+ Faraday.get(read_url, nil, :Authorization => "Bearer #{token}")
26
+ options = Selenium::WebDriver::Options.chrome(args: ['--headless=new'])
27
+ driver = Selenium::WebDriver.for(:chrome, options: options)
28
+ wait = Selenium::WebDriver::Wait.new(timeout: 10)
29
+ driver.get continuation_url
30
+ wait.until { driver.find_element(:xpath, '//title') }
31
+ driver.quit
32
+ exit(0)
33
+
34
+
35
+
36
+
37
+
@@ -0,0 +1,69 @@
1
+ sessions:
2
+ - suite: smart_client_stu2_2
3
+ name: client
4
+ preset: smart_run_client_against_server_v2_2
5
+ suite_options:
6
+ SMART Client Type: SMART Backend Services Confidential Asymmetric Client
7
+ - suite: smart_stu2_2
8
+ name: server
9
+ preset: smart_run_server_against_ca_client_v2_2
10
+
11
+ comparison_config:
12
+ normalized_strings:
13
+ - replacement: <INFERNO_HOST>
14
+ patterns:
15
+ - http://localhost:4567/inferno # local inferno core ruby
16
+ - http://localhost:4567 # local ruby
17
+ - http://localhost # local docker
18
+ - https://inferno.healthit.gov/suites # prod
19
+ - https://inferno-qa.healthit.gov/suites # qa
20
+ - replacement: <REFERENCE_SERVER_URL>
21
+ patterns:
22
+ - https://inferno.healthit.gov/reference-server # prod reference server
23
+ - https://inferno-qa.healthit.gov/reference-server # qa reference server
24
+ - replacement: code_challenge=<CODE_CHALLENGE>
25
+ pattern: /code_challenge=[A-Za-z0-9+\/=_-]{43}/
26
+ - replacement: <UUID>
27
+ pattern: /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i
28
+ sessions:
29
+ server:
30
+ alternate_expected_files:
31
+ - file: smart_v22_backend_services_with_commands_server_no_tls_expected.json
32
+ when:
33
+ - field: inputs.url
34
+ matches: ^http://
35
+
36
+ steps:
37
+ - state_description: Session Created
38
+ session: client
39
+ status: created
40
+ start_run:
41
+ session: client
42
+ runnable: suite
43
+ action_description: Run the client suite
44
+
45
+ - state_description: Wait at Client test 5.04 Access a secured FHIR endpoint using SMART Backend Services
46
+ session: client
47
+ status: waiting
48
+ last_completed: 5.04
49
+ start_run:
50
+ session: server
51
+ runnable: 3
52
+ next_poll_session: server
53
+ action_description: Run server group 3 Backend Services
54
+
55
+ - state_description: Finished server group 3 Backend Services
56
+ session: server
57
+ status: done
58
+ last_completed: 3
59
+ command: bundle exec ruby execution_scripts/client_vs_server/access_data_and_continue_client.rb {session_id} smart_client_stu2_2 '{client.wait_outputs.continuation_url}' example {inferno_base_url}
60
+ next_poll_session: client
61
+ action_description: Perform access and tell the client tests the access was performed
62
+
63
+ - state_description: Finished Client Suite
64
+ session: client
65
+ status: done
66
+ last_completed: suite
67
+ action: END_SCRIPT
68
+ action_description: Finished Script
69
+
@@ -0,0 +1 @@
1
+ [{"id":"0b88aedc-40d9-430a-b0e0-d2fe1873cc03","created_at":"2026-04-03T12:23:06.734-04:00","inputs":[{"name":"client_id","value":"smart_client_test_demo","type":"text"},{"name":"smart_jwk_set","value":"http://localhost:4567/custom/smart_stu2_2/.well-known/jwks.json","type":"textarea"}],"optional":false,"outputs":[],"requests":[],"result":"pass","test_id":"smart_client_stu2_2-smart_client_registration_bsca-smart_client_registration_bsca_verification","test_run_id":"b0c3b58f-115c-4dc1-a526-0f94bcfd5575","test_session_id":"4UK5MliAu7N","updated_at":"2026-04-03T12:23:06.734-04:00"},{"id":"1507b727-47a8-4109-b172-864c8586f4f4","created_at":"2026-04-03T12:23:06.740-04:00","inputs":[{"name":"client_id","value":"smart_client_test_demo","type":"text"},{"name":"fhir_read_resources_bundle","value":"{\n \"resourceType\": \"Bundle\",\n \"entry\": [\n {\n \"resource\": {\n \"resourceType\": \"Patient\",\n \"id\": \"example\",\n \"name\": [\n {\n \"family\": \"Chalmers\",\n \"given\": [\n \"Peter\",\n \"James\"\n ]\n }\n ],\n \"gender\": \"male\",\n \"birthDate\": \"1974-12-25\",\n \"address\": [\n {\n \"line\": [\n \"534 Erewhon St\"\n ],\n \"city\": \"Ann Arbor\",\n \"state\": \"MI\",\n \"postalCode\": \"48108\"\n }\n ]\n }\n }\n ]\n}","type":"textarea"},{"name":"echoed_fhir_response","value":null,"type":"textarea"}],"optional":false,"outputs":[{"name":"continuation_url","type":"text","value":"http://localhost:4567/custom/smart_client_stu2_2/resume_pass?token=smart_client_test_demo"}],"requests":[],"result":"pass","test_id":"smart_client_stu2_2-smart_client_access-smart_client_access_bsca_interaction","test_run_id":"b0c3b58f-115c-4dc1-a526-0f94bcfd5575","test_session_id":"4UK5MliAu7N","updated_at":"2026-04-03T12:23:16.988-04:00"},{"id":"59f85e35-b76e-42e0-9c2d-80146a3224cb","created_at":"2026-04-03T12:23:17.008-04:00","inputs":[{"name":"client_id","label":"Client Id","description":"Testers may provide a specific value for Inferno to assign as the client id. If no value is provided, the Inferno session id will be used.","value":"smart_client_test_demo","type":"text"},{"name":"smart_jwk_set","label":"SMART Confidential Asymmetric JSON Web Key Set (JWKS)","description":"The SMART client's JSON Web Key Set including the key(s) Inferno will need to verify signatures on token requests made by the client. May be provided as either a publicly accessible url containing the JWKS, or the raw JWKS JSON.","value":"http://localhost:4567/custom/smart_stu2_2/.well-known/jwks.json","type":"textarea"}],"optional":false,"outputs":[],"requests":[],"result":"pass","test_group_id":"smart_client_stu2_2-smart_client_registration_bsca","test_run_id":"b0c3b58f-115c-4dc1-a526-0f94bcfd5575","test_session_id":"4UK5MliAu7N","updated_at":"2026-04-03T12:23:17.008-04:00"},{"id":"bc761706-8711-4d95-b9b3-bd87db5ad58f","created_at":"2026-04-03T12:23:17.031-04:00","inputs":[{"name":"client_id","value":"smart_client_test_demo","type":"text"},{"name":"smart_jwk_set","value":"http://localhost:4567/custom/smart_stu2_2/.well-known/jwks.json","type":"textarea"}],"messages":[{"message":"Confidential asymmetric token request 1 had an incorrect `client_assertion_type`: expected 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer', but got 'not_an_assertion_type'","type":"error"},{"message":"Confidential asymmetric token request 2 had an incorrect `client_assertion_type`: expected 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer', but got 'not_an_assertion_type'","type":"error"}],"optional":false,"outputs":[{"name":"smart_tokens","type":"text","value":"eyJjbGllbnRfaWQiOiJzbWFydF9jbGllbnRfdGVzdF9kZW1vIiwiZXhwaXJhdGlvbiI6MTc3NTIzNjk4OSwibm9uY2UiOiJkMjc3MjIzMjE5M2ZhNmVhIn0\neyJjbGllbnRfaWQiOiJzbWFydF9jbGllbnRfdGVzdF9kZW1vIiwiZXhwaXJhdGlvbiI6MTc3NTIzNjk4OSwibm9uY2UiOiJjZWQ0NDI5OWU1OWMxMjExIn0\neyJjbGllbnRfaWQiOiJzbWFydF9jbGllbnRfdGVzdF9kZW1vIiwiZXhwaXJhdGlvbiI6MTc3NTIzNjk4OSwibm9uY2UiOiI4ZmZiYzc4OGRjODZkMjAxIn0"}],"requests":[{"id":"12bd00ab-6bfc-46f2-a83e-93d1c308d672","direction":"incoming","index":839,"result_id":"1507b727-47a8-4109-b172-864c8586f4f4","status":200,"timestamp":"2026-04-03T12:23:09.885-04:00","url":"http://localhost:4567/custom/smart_client_stu2_2/auth/token","verb":"POST"},{"id":"926ba6ac-3a3a-4080-bdfa-24b4346332c0","direction":"incoming","index":840,"result_id":"1507b727-47a8-4109-b172-864c8586f4f4","status":200,"timestamp":"2026-04-03T12:23:09.920-04:00","url":"http://localhost:4567/custom/smart_client_stu2_2/auth/token","verb":"POST"},{"id":"cd358d10-549f-4c0e-a6f5-9a565b8267d2","direction":"incoming","index":842,"result_id":"1507b727-47a8-4109-b172-864c8586f4f4","status":200,"timestamp":"2026-04-03T12:23:09.944-04:00","url":"http://localhost:4567/custom/smart_client_stu2_2/auth/token","verb":"POST"}],"result":"fail","result_message":"Invalid token requests received. See messages for details.","test_id":"smart_client_stu2_2-smart_client_access-smart_client_token_request_bsca_verification","test_run_id":"b0c3b58f-115c-4dc1-a526-0f94bcfd5575","test_session_id":"4UK5MliAu7N","updated_at":"2026-04-03T12:23:17.031-04:00"},{"id":"0460df72-7dcf-4d89-8147-b8006ea8d466","created_at":"2026-04-03T12:23:17.037-04:00","inputs":[{"name":"smart_tokens","value":"eyJjbGllbnRfaWQiOiJzbWFydF9jbGllbnRfdGVzdF9kZW1vIiwiZXhwaXJhdGlvbiI6MTc3NTIzNjk4OSwibm9uY2UiOiJkMjc3MjIzMjE5M2ZhNmVhIn0\neyJjbGllbnRfaWQiOiJzbWFydF9jbGllbnRfdGVzdF9kZW1vIiwiZXhwaXJhdGlvbiI6MTc3NTIzNjk4OSwibm9uY2UiOiJjZWQ0NDI5OWU1OWMxMjExIn0\neyJjbGllbnRfaWQiOiJzbWFydF9jbGllbnRfdGVzdF9kZW1vIiwiZXhwaXJhdGlvbiI6MTc3NTIzNjk4OSwibm9uY2UiOiI4ZmZiYzc4OGRjODZkMjAxIn0","type":"text"}],"optional":false,"outputs":[],"requests":[{"id":"ad7961cc-bba0-462c-abc6-229fb5e845e4","direction":"incoming","index":844,"result_id":"1507b727-47a8-4109-b172-864c8586f4f4","status":200,"timestamp":"2026-04-03T12:23:15.531-04:00","url":"http://localhost:4567/custom/smart_client_stu2_2/fhir/Patient/example","verb":"GET"}],"result":"pass","test_id":"smart_client_stu2_2-smart_client_access-smart_client_token_use_verification","test_run_id":"b0c3b58f-115c-4dc1-a526-0f94bcfd5575","test_session_id":"4UK5MliAu7N","updated_at":"2026-04-03T12:23:17.037-04:00"},{"id":"8be4315c-8415-4797-9f31-76f19192f369","created_at":"2026-04-03T12:23:17.038-04:00","inputs":[{"name":"client_id","label":"Client Id","description":"The registered Client Id for use in obtaining access tokens. Create a new session and re-run the Client Registration group if you need to change this value.","value":"smart_client_test_demo","type":"text"},{"name":"smart_launch_urls","label":"SMART App Launch URL(s)","description":"Registered Launch URLs in the form of a comma-separated list of zero or more URLs. If present, Inferno will provide an option to use each to launch the app. Create a new session and re-run the Client Registration group if you need to change this value.","value":"http://localhost:4567/custom/smart_stu2_2/launch","type":"textarea"},{"name":"launch_context","label":"Launch Context","description":"Launch context details to be included in access token responses, specified as a JSON array. If provided, the contents will be merged into Inferno's token responses.","value":"{ \"patient\": \"example\" }","type":"textarea"},{"name":"fhir_user_relative_reference","label":"FHIR User Relative Reference","description":"A FHIR relative reference (\u003cresource type\u003e/\u003cid\u003e) for the FHIR user record to return when the openid and fhirUser scopes are requested. Include this resource in the **Available Resources** input so that it can be accessed via FHIR read.","value":"Patient/example","type":"text"},{"name":"fhir_read_resources_bundle","label":"Available Resources","description":"Resources to make available in Inferno's simulated FHIR server provided as a FHIR bundle. Each entry must contain a resource with the id element populated. Each instance present will be available for retrieval from Inferno at the endpoint: \u003cfhir-base\u003e/\u003cresource type\u003e/\u003cinstance id\u003e. These will only be available through the read interaction.","value":"{\n \"resourceType\": \"Bundle\",\n \"entry\": [\n {\n \"resource\": {\n \"resourceType\": \"Patient\",\n \"id\": \"example\",\n \"name\": [\n {\n \"family\": \"Chalmers\",\n \"given\": [\n \"Peter\",\n \"James\"\n ]\n }\n ],\n \"gender\": \"male\",\n \"birthDate\": \"1974-12-25\",\n \"address\": [\n {\n \"line\": [\n \"534 Erewhon St\"\n ],\n \"city\": \"Ann Arbor\",\n \"state\": \"MI\",\n \"postalCode\": \"48108\"\n }\n ]\n }\n }\n ]\n}","type":"textarea"},{"name":"echoed_fhir_response","label":"Default FHIR Response","description":"JSON representation of a default FHIR resource for Inferno to echo when a request is made to the simulated FHIR server. Reads targetting resources in the **Available Resources** input will return that resource instead of this. Otherwise, the content here will be echoed back exactly and no check will be made that it is appropriate for the request made. If nothing is provided, an OperationOutcome indicating nothing to echo will be returned.","value":null,"type":"textarea"},{"name":"smart_redirect_uris","label":"SMART App Launch Redirect URI(s)","description":"Registered Redirect URIs in the form of a comma-separated list of one or more URIs. Redirect URIs specified in authorization requests must come from this list. Create a new session and re-run the Client Registration group if you need to change this value.","value":"http://localhost:4567/custom/smart_stu2_2/redirect","type":"textarea"},{"name":"smart_jwk_set","label":"JSON Web Key Set (JWKS)","description":"The SMART client's JSON Web Key Set in the form of either a publicly accessible url containing the JWKS, or the raw JWKS JSON. Must include the key(s) Inferno will need to verify signatures on token requests made by the client. Create a new session and re-run the Client Registration group if you need to change this value.","value":"http://localhost:4567/custom/smart_stu2_2/.well-known/jwks.json","type":"textarea"},{"name":"smart_client_secret","label":"SMART Confidential Symmetric Client Secret","description":"The registered client secret that will be provided during token requests to authenticate the client to Inferno. Create a new session and re-run the Client Registration group if you need to change this value.","value":"SAMPLE_SECRET","type":"text"}],"optional":false,"outputs":[],"requests":[],"result":"fail","test_group_id":"smart_client_stu2_2-smart_client_access","test_run_id":"b0c3b58f-115c-4dc1-a526-0f94bcfd5575","test_session_id":"4UK5MliAu7N","updated_at":"2026-04-03T12:23:17.038-04:00"},{"id":"14527436-499a-4383-b37e-a49c39ae6b42","created_at":"2026-04-03T12:23:17.041-04:00","inputs":[{"name":"client_id","label":"Client Id","description":"Testers may provide a specific value for Inferno to assign as the client id. If no value is provided, the Inferno session id will be used.","value":"smart_client_test_demo","type":"text"},{"name":"smart_launch_urls","label":"SMART App Launch URL(s)","description":"If the client app supports EHR launch, a comma-delimited list of one or more URLs that Inferno can use to launch the app.","value":"http://localhost:4567/custom/smart_stu2_2/launch","type":"textarea"},{"name":"smart_redirect_uris","label":"SMART App Launch Redirect URI(s)","description":"A comma-separated list of one or more URIs that the app will sepcify as the target of the redirect for Inferno to use when providing the authorization code.","value":"http://localhost:4567/custom/smart_stu2_2/redirect","type":"textarea"},{"name":"smart_jwk_set","label":"SMART Confidential Asymmetric JSON Web Key Set (JWKS)","description":"The SMART client's JSON Web Key Set including the key(s) Inferno will need to verify signatures on token requests made by the client. May be provided as either a publicly accessible url containing the JWKS, or the raw JWKS JSON.","value":"http://localhost:4567/custom/smart_stu2_2/.well-known/jwks.json","type":"textarea"},{"name":"smart_client_secret","label":"SMART Confidential Symmetric Client Secret","description":"Provide the client secret that the confidential symmetric client will send with token requests to authenticate the client to Inferno.","value":"SAMPLE_SECRET","type":"text"},{"name":"launch_context","label":"Launch Context","description":"Launch context details to be included in access token responses, specified as a JSON array. If provided, the contents will be merged into Inferno's token responses.","value":"{ \"patient\": \"example\" }","type":"textarea"},{"name":"fhir_user_relative_reference","label":"FHIR User Relative Reference","description":"A FHIR relative reference (\u003cresource type\u003e/\u003cid\u003e) for the FHIR user record to return when the openid and fhirUser scopes are requested. Include this resource in the **Available Resources** input so that it can be accessed via FHIR read.","value":"Patient/example","type":"text"},{"name":"fhir_read_resources_bundle","label":"Available Resources","description":"Resources to make available in Inferno's simulated FHIR server provided as a FHIR bundle. Each entry must contain a resource with the id element populated. Each instance present will be available for retrieval from Inferno at the endpoint: \u003cfhir-base\u003e/\u003cresource type\u003e/\u003cinstance id\u003e. These will only be available through the read interaction.","value":"{\n \"resourceType\": \"Bundle\",\n \"entry\": [\n {\n \"resource\": {\n \"resourceType\": \"Patient\",\n \"id\": \"example\",\n \"name\": [\n {\n \"family\": \"Chalmers\",\n \"given\": [\n \"Peter\",\n \"James\"\n ]\n }\n ],\n \"gender\": \"male\",\n \"birthDate\": \"1974-12-25\",\n \"address\": [\n {\n \"line\": [\n \"534 Erewhon St\"\n ],\n \"city\": \"Ann Arbor\",\n \"state\": \"MI\",\n \"postalCode\": \"48108\"\n }\n ]\n }\n }\n ]\n}","type":"textarea"},{"name":"echoed_fhir_response","label":"Default FHIR Response","description":"JSON representation of a default FHIR resource for Inferno to echo when a request is made to the simulated FHIR server. Reads targetting resources in the **Available Resources** input will return that resource instead of this. Otherwise, the content here will be echoed back exactly and no check will be made that it is appropriate for the request made. If nothing is provided, an OperationOutcome indicating nothing to echo will be returned.","value":null,"type":"textarea"}],"optional":false,"outputs":[],"requests":[],"result":"fail","test_run_id":"b0c3b58f-115c-4dc1-a526-0f94bcfd5575","test_session_id":"4UK5MliAu7N","test_suite_id":"smart_client_stu2_2","updated_at":"2026-04-03T12:23:17.041-04:00"}]