smart_app_launch_test_kit 0.4.6 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/presets/inferno_reference_server_preset.json +103 -0
- data/config/presets/inferno_reference_server_stu2_2_preset.json +89 -0
- data/config/presets/inferno_reference_server_stu2_preset.json +89 -0
- data/config/presets/smart_access_brands.json.erb +13 -0
- data/config/presets/smart_access_brands_example_1.json +37 -0
- data/config/presets/smart_access_brands_example_2.json +37 -0
- data/config/presets/smart_access_brands_example_3.json +37 -0
- data/config/presets/smart_access_brands_example_4.json +37 -0
- data/lib/smart_app_launch/metadata.rb +75 -0
- data/lib/smart_app_launch/smart_access_brands_examples/smart_access_brands_example.json.erb +198 -0
- data/lib/smart_app_launch/smart_access_brands_suite.rb +4 -1
- data/lib/smart_app_launch/smart_stu1_suite.rb +7 -6
- data/lib/smart_app_launch/smart_stu2_2_suite.rb +3 -2
- data/lib/smart_app_launch/smart_stu2_suite.rb +11 -10
- data/lib/smart_app_launch/version.rb +2 -1
- data/lib/smart_app_launch_test_kit.rb +1 -0
- metadata +19 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 047dcb8643e2524e9bdcd7653db652640f08e672085d18fd589d4a50e717cd08
|
4
|
+
data.tar.gz: cf7fe4c64a2e9c9bb9e50bcc2176e7ee5a8c5cac6a970376fb29b8d31e50ca96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b0bd4cfc4a2d2db72017cf433482edb59aeb22ea4d538a03a44f14664631d86e9426a4b1b521175673275c7464a0b3f33f673fc488a1b2b9581c5df6a97e7bf
|
7
|
+
data.tar.gz: a99702f36d6b8501102cadfca039b0f7b6e46e65e19068da1a52971afee24758228fa59f0c3273c6bad730b47f107d80074e5b222bb9dfd5921c35473e423f1e
|
@@ -0,0 +1,103 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Reference Server",
|
3
|
+
"id": "smart_stu1_reference_server",
|
4
|
+
"test_suite_id": "smart",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "url",
|
8
|
+
"type": "text",
|
9
|
+
"value": "https://inferno.healthit.gov/reference-server/r4"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"name": "standalone_client_id",
|
13
|
+
"type": "text",
|
14
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "standalone_requested_scopes",
|
18
|
+
"type": "text",
|
19
|
+
"value": "launch/patient openid fhirUser offline_access patient/*.read"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "use_pkce",
|
23
|
+
"type": "radio",
|
24
|
+
"title": "Proof Key for Code Exchange (PKCE)",
|
25
|
+
"options": {
|
26
|
+
"list_options": [
|
27
|
+
{
|
28
|
+
"label": "Enabled",
|
29
|
+
"value": "true"
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"label": "Disabled",
|
33
|
+
"value": "false"
|
34
|
+
}
|
35
|
+
]
|
36
|
+
},
|
37
|
+
"value": "false"
|
38
|
+
},
|
39
|
+
{
|
40
|
+
"name": "pkce_code_challenge_method",
|
41
|
+
"type": "radio",
|
42
|
+
"optional": true,
|
43
|
+
"title": "PKCE Code Challenge Method",
|
44
|
+
"options": {
|
45
|
+
"list_options": [
|
46
|
+
{
|
47
|
+
"label": "S256",
|
48
|
+
"value": "S256"
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"label": "plain",
|
52
|
+
"value": "plain"
|
53
|
+
}
|
54
|
+
]
|
55
|
+
},
|
56
|
+
"value": "S256"
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"name": "client_auth_type",
|
60
|
+
"value": "public",
|
61
|
+
"_title": "Client Authentication Method",
|
62
|
+
"_type": "radio",
|
63
|
+
"_options": {
|
64
|
+
"list_options": [
|
65
|
+
{
|
66
|
+
"label": "Public",
|
67
|
+
"value": "public"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"label": "Confidential Symmetric",
|
71
|
+
"value": "confidential_symmetric"
|
72
|
+
},
|
73
|
+
{
|
74
|
+
"label": "Confidential Asymmetric",
|
75
|
+
"value": "confidential_asymmetric"
|
76
|
+
}
|
77
|
+
]
|
78
|
+
}
|
79
|
+
},
|
80
|
+
{
|
81
|
+
"name": "standalone_client_secret",
|
82
|
+
"type": "text",
|
83
|
+
"optional": true,
|
84
|
+
"value": null
|
85
|
+
},
|
86
|
+
{
|
87
|
+
"name": "ehr_client_id",
|
88
|
+
"type": "text",
|
89
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
90
|
+
},
|
91
|
+
{
|
92
|
+
"name": "ehr_requested_scopes",
|
93
|
+
"type": "text",
|
94
|
+
"value": "launch openid fhirUser offline_access user/*.read"
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"name": "ehr_client_secret",
|
98
|
+
"type": "text",
|
99
|
+
"optional": true,
|
100
|
+
"value": null
|
101
|
+
}
|
102
|
+
]
|
103
|
+
}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Reference Server",
|
3
|
+
"id": "smart_stu2_2_reference_server",
|
4
|
+
"test_suite_id": "smart_stu2_2",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "url",
|
8
|
+
"type": "text",
|
9
|
+
"value": "https://inferno.healthit.gov/reference-server/r4"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"name": "standalone_client_id",
|
13
|
+
"type": "text",
|
14
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "standalone_requested_scopes",
|
18
|
+
"type": "text",
|
19
|
+
"value": "launch/patient openid fhirUser offline_access patient/*.read"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "standalone_client_secret",
|
23
|
+
"type": "text",
|
24
|
+
"optional": true,
|
25
|
+
"value": null
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"name": "ehr_client_id",
|
29
|
+
"type": "text",
|
30
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"name": "ehr_requested_scopes",
|
34
|
+
"type": "text",
|
35
|
+
"value": "launch openid fhirUser offline_access user/*.read"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"name": "ehr_client_secret",
|
39
|
+
"type": "text",
|
40
|
+
"optional": true,
|
41
|
+
"value": null
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"name": "client_auth_encryption_method",
|
45
|
+
"value": "ES384",
|
46
|
+
"_title": "Encryption Method (Confidential Asymmetric Client Auth Only)",
|
47
|
+
"_type": "radio",
|
48
|
+
"_options": {
|
49
|
+
"list_options": [
|
50
|
+
{
|
51
|
+
"label": "ES384",
|
52
|
+
"value": "ES384"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"label": "RS384",
|
56
|
+
"value": "RS384"
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"name": "client_auth_type",
|
63
|
+
"value": "public",
|
64
|
+
"_title": "Client Authentication Method",
|
65
|
+
"_type": "radio",
|
66
|
+
"_options": {
|
67
|
+
"list_options": [
|
68
|
+
{
|
69
|
+
"label": "Public",
|
70
|
+
"value": "public"
|
71
|
+
},
|
72
|
+
{
|
73
|
+
"label": "Confidential Symmetric",
|
74
|
+
"value": "confidential_symmetric"
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"label": "Confidential Asymmetric",
|
78
|
+
"value": "confidential_asymmetric"
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"name": "backend_services_client_id",
|
85
|
+
"type": "text",
|
86
|
+
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InJlZ2lzdHJhdGlvbi10b2tlbiJ9.eyJqd2tzX3VybCI6Imh0dHA6Ly8xMC4xNS4yNTIuNzMvaW5mZXJuby8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJhY2Nlc3NUb2tlbnNFeHBpcmVJbiI6MTUsImlhdCI6MTU5NzQxMzE5NX0.q4v4Msc74kN506KTZ0q_minyapJw0gwlT6M_uiL73S4"
|
87
|
+
}
|
88
|
+
]
|
89
|
+
}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Reference Server",
|
3
|
+
"id": "smart_stu2_reference_server",
|
4
|
+
"test_suite_id": "smart_stu2",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "url",
|
8
|
+
"type": "text",
|
9
|
+
"value": "https://inferno.healthit.gov/reference-server/r4"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"name": "standalone_client_id",
|
13
|
+
"type": "text",
|
14
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "standalone_requested_scopes",
|
18
|
+
"type": "text",
|
19
|
+
"value": "launch/patient openid fhirUser offline_access patient/*.read"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "standalone_client_secret",
|
23
|
+
"type": "text",
|
24
|
+
"optional": true,
|
25
|
+
"value": null
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"name": "ehr_client_id",
|
29
|
+
"type": "text",
|
30
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"name": "ehr_requested_scopes",
|
34
|
+
"type": "text",
|
35
|
+
"value": "launch openid fhirUser offline_access user/*.read"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"name": "ehr_client_secret",
|
39
|
+
"type": "text",
|
40
|
+
"optional": true,
|
41
|
+
"value": null
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"name": "client_auth_encryption_method",
|
45
|
+
"value": "ES384",
|
46
|
+
"_title": "Encryption Method (Confidential Asymmetric Client Auth Only)",
|
47
|
+
"_type": "radio",
|
48
|
+
"_options": {
|
49
|
+
"list_options": [
|
50
|
+
{
|
51
|
+
"label": "ES384",
|
52
|
+
"value": "ES384"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"label": "RS384",
|
56
|
+
"value": "RS384"
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"name": "client_auth_type",
|
63
|
+
"value": "public",
|
64
|
+
"_title": "Client Authentication Method",
|
65
|
+
"_type": "radio",
|
66
|
+
"_options": {
|
67
|
+
"list_options": [
|
68
|
+
{
|
69
|
+
"label": "Public",
|
70
|
+
"value": "public"
|
71
|
+
},
|
72
|
+
{
|
73
|
+
"label": "Confidential Symmetric",
|
74
|
+
"value": "confidential_symmetric"
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"label": "Confidential Asymmetric",
|
78
|
+
"value": "confidential_asymmetric"
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"name": "backend_services_client_id",
|
85
|
+
"type": "text",
|
86
|
+
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InJlZ2lzdHJhdGlvbi10b2tlbiJ9.eyJqd2tzX3VybCI6Imh0dHA6Ly8xMC4xNS4yNTIuNzMvaW5mZXJuby8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJhY2Nlc3NUb2tlbnNFeHBpcmVJbiI6MTUsImlhdCI6MTU5NzQxMzE5NX0.q4v4Msc74kN506KTZ0q_minyapJw0gwlT6M_uiL73S4"
|
87
|
+
}
|
88
|
+
]
|
89
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_inferno",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "smart_access_brands_publication_url",
|
8
|
+
"value": "<%= Inferno::Application['base_url'] %>/custom/smart_access_brands/examples/smart_access_brands_example.json",
|
9
|
+
"title": "SMART Access Brands Bundle URL",
|
10
|
+
"type": "text"
|
11
|
+
}
|
12
|
+
]
|
13
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Labs with Locations Nationwide IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_1",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example1.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Regional Health System IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_2",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example2.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Different EHRs IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_3",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example3.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Co-equal Brands IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_4",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example4.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require_relative 'version'
|
2
|
+
|
3
|
+
module SMARTAppLaunch
|
4
|
+
class Metadata < Inferno::TestKit
|
5
|
+
id :smart_app_launch_test_kit
|
6
|
+
title 'SMART App Launch Test Kit'
|
7
|
+
description <<~DESCRIPTION
|
8
|
+
The SMART App Launch Test Kit primarily validates the conformance of an
|
9
|
+
authorization server implementation to a specified version of the [SMART
|
10
|
+
Application Launch Framework Implementation
|
11
|
+
Guide](http://hl7.org/fhir/smart-app-launch/index.html). This Test Kit also
|
12
|
+
provides Brand Bundle Publisher testing for the User-access Brands and Endpoints
|
13
|
+
specification. This Test Kit supports following versions of the SMART App
|
14
|
+
Launch IG: [STU1](https://hl7.org/fhir/smart-app-launch/1.0.0/),
|
15
|
+
[STU2](http://hl7.org/fhir/smart-app-launch/STU2/), and
|
16
|
+
[STU2.2](http://hl7.org/fhir/smart-app-launch/STU2.2/).
|
17
|
+
<!-- break -->
|
18
|
+
|
19
|
+
This Test Kit is [open
|
20
|
+
source](https://github.com/inferno-framework/smart-app-launch-test-kit#license)
|
21
|
+
and freely available for use or adoption by the health IT community including
|
22
|
+
EHR vendors, health app developers, and testing labs. It is built using the
|
23
|
+
[Inferno Framework](https://inferno-framework.github.io/inferno-core/). The
|
24
|
+
Inferno Framework is designed for reuse and aims to make it easier to build test
|
25
|
+
kits for any FHIR-based data exchange.
|
26
|
+
|
27
|
+
To run tests for a SMART App Launch authorization server, select one of the
|
28
|
+
"SMART App Launch" suites. To run tests for a Brand Bundle Publisher, select
|
29
|
+
the "SMART User-access Brands and Endpoints" suite.
|
30
|
+
|
31
|
+
## Status
|
32
|
+
|
33
|
+
The SMART App Launch Test Kit primarily verifies that systems correctly
|
34
|
+
implement the SMART App Launch IG for providing authorization and/or
|
35
|
+
authentication services to client applications accessing HL7 FHIR APIs.
|
36
|
+
|
37
|
+
The test kit currently tests the following requirements:
|
38
|
+
- Standalone Launch
|
39
|
+
- EHR Launch
|
40
|
+
|
41
|
+
It also tests the ability of a Brand Bundle Publisher to publish a valid brand
|
42
|
+
bundle as described in the User-access Brands and Endpoints specification.
|
43
|
+
|
44
|
+
See the test descriptions within the test kit for detail on the specific
|
45
|
+
validations performed as part of testing these requirements.
|
46
|
+
|
47
|
+
## Repository
|
48
|
+
|
49
|
+
The SMART App Launch Test Kit GitHub repository can be [found
|
50
|
+
here](https://github.com/inferno-framework/smart-app-launch-test-kit).
|
51
|
+
|
52
|
+
## Providing Feedback and Reporting Issues
|
53
|
+
|
54
|
+
We welcome feedback on the tests, including but not limited to the following
|
55
|
+
areas:
|
56
|
+
|
57
|
+
- Validation logic, such as potential bugs, lax checks, and unexpected failures.
|
58
|
+
- Requirements coverage, such as requirements that have been missed, tests that
|
59
|
+
necessitate features that the IG does not require, or other issues with the
|
60
|
+
interpretation of the IG's requirements.
|
61
|
+
- User experience, such as confusing or missing information in the test UI.
|
62
|
+
|
63
|
+
Please report any issues with this set of tests in the [issues
|
64
|
+
section](https://github.com/inferno-framework/smart-app-launch-test-kit/issues)
|
65
|
+
of the repository.
|
66
|
+
DESCRIPTION
|
67
|
+
suite_ids [:smart, :smart_stu2, :smart_stu2_2, :smart_access_brands]
|
68
|
+
tags ['SMART App Launch', 'Endpoint Publication']
|
69
|
+
last_updated LAST_UPDATED
|
70
|
+
version VERSION
|
71
|
+
maturity 'Medium'
|
72
|
+
authors ['Stephen MacVicar']
|
73
|
+
repo 'https://github.com/inferno-framework/smart-app-launch-test-kit'
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
{
|
2
|
+
"resourceType" : "Bundle",
|
3
|
+
"id" : "example3",
|
4
|
+
"type" : "collection",
|
5
|
+
"timestamp" : "2023-09-05T20:23:42.723178-07:00",
|
6
|
+
"entry" : [
|
7
|
+
{
|
8
|
+
"fullUrl" : "https://examplehospital.fhirserver.org/Organization/examplehospital",
|
9
|
+
"resource" : {
|
10
|
+
"resourceType" : "Organization",
|
11
|
+
"id" : "examplehospital",
|
12
|
+
"extension" : [
|
13
|
+
{
|
14
|
+
"extension" : [
|
15
|
+
{
|
16
|
+
"url" : "brandLogo",
|
17
|
+
"valueUrl" : "https://fhirserver.org/examplehospital-ehr1/themes/custom/logo.svg"
|
18
|
+
}
|
19
|
+
],
|
20
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/organization-brand"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"extension" : [
|
24
|
+
{
|
25
|
+
"url" : "portalName",
|
26
|
+
"valueString" : "ExampleHospital Patient Gateway"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"url" : "portalUrl",
|
30
|
+
"valueUrl" : "https://patientgateway.examplehospital.ehr1.fhirserver.org"
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"url" : "portalDescription",
|
34
|
+
"valueMarkdown" : "Patient Gateway is an online tool to help adult patients connect with health care providers, manage appointments, and refill prescriptions.\n"
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"url" : "portalEndpoint",
|
38
|
+
"valueReference" : {
|
39
|
+
"reference" : "https://ehr1.fhirserver.com/Endpoint/examplehospital-ehr1",
|
40
|
+
"display" : "FHIR R4 Endpoint for EHR1"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
],
|
44
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/organization-portal"
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"extension" : [
|
48
|
+
{
|
49
|
+
"url" : "portalName",
|
50
|
+
"valueString" : "ExampleHospital Pediatric Portal"
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"url" : "portalUrl",
|
54
|
+
"valueUrl" : "https://pediatrics.examplehospital.ehr2.fhirserver.org"
|
55
|
+
},
|
56
|
+
{
|
57
|
+
"url" : "portalDescription",
|
58
|
+
"valueMarkdown" : "Pediatric Portal is the entrypoint for pediatric patients."
|
59
|
+
},
|
60
|
+
{
|
61
|
+
"url" : "portalEndpoint",
|
62
|
+
"valueReference" : {
|
63
|
+
"reference" : "https://ehr2.fhirserver.com/Endpoint/examplehospital-ehr2",
|
64
|
+
"display" : "FHIR R4 Endpoint for EHR2"
|
65
|
+
}
|
66
|
+
}
|
67
|
+
],
|
68
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/organization-portal"
|
69
|
+
}
|
70
|
+
],
|
71
|
+
"identifier" : [
|
72
|
+
{
|
73
|
+
"system" : "urn:ietf:rfc:3986",
|
74
|
+
"value" : "https://examplehospital.fhirserver.org"
|
75
|
+
}
|
76
|
+
],
|
77
|
+
"active" : true,
|
78
|
+
"type" : [
|
79
|
+
{
|
80
|
+
"coding" : [
|
81
|
+
{
|
82
|
+
"system" : "http://terminology.hl7.org/CodeSystem/organization-type",
|
83
|
+
"code" : "prov",
|
84
|
+
"display" : "Healthcare Provider"
|
85
|
+
}
|
86
|
+
]
|
87
|
+
}
|
88
|
+
],
|
89
|
+
"name" : "ExampleHospital",
|
90
|
+
"alias" : [
|
91
|
+
"GoodHealth Healthcare"
|
92
|
+
],
|
93
|
+
"telecom" : [
|
94
|
+
{
|
95
|
+
"system" : "url",
|
96
|
+
"value" : "https://examplehospital.fhirserver.org/contact"
|
97
|
+
}
|
98
|
+
],
|
99
|
+
"address" : [
|
100
|
+
{
|
101
|
+
"city" : "Boston",
|
102
|
+
"state" : "MA"
|
103
|
+
},
|
104
|
+
{
|
105
|
+
"city" : "Newton",
|
106
|
+
"state" : "MA"
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"city" : "Waltham",
|
110
|
+
"state" : "MA"
|
111
|
+
}
|
112
|
+
],
|
113
|
+
"endpoint" : [
|
114
|
+
{
|
115
|
+
"reference" : "https://ehr1.fhirserver.com/Endpoint/examplehospital-ehr1",
|
116
|
+
"display" : "FHIR R4 Endpoint for EHR1"
|
117
|
+
},
|
118
|
+
{
|
119
|
+
"reference" : "https://ehr2.fhirserver.com/Endpoint/examplehospital-ehr2",
|
120
|
+
"display" : "FHIR R4 Endpoint for EHR2"
|
121
|
+
}
|
122
|
+
]
|
123
|
+
}
|
124
|
+
},
|
125
|
+
{
|
126
|
+
"fullUrl" : "https://ehr1.fhirserver.com/Endpoint/examplehospital-ehr1",
|
127
|
+
"resource" : {
|
128
|
+
"resourceType" : "Endpoint",
|
129
|
+
"id" : "examplehospital-ehr1",
|
130
|
+
"extension" : [
|
131
|
+
{
|
132
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/endpoint-fhir-version",
|
133
|
+
"valueCode" : "4.0.1"
|
134
|
+
}
|
135
|
+
],
|
136
|
+
"status" : "active",
|
137
|
+
"connectionType" : {
|
138
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-connection-type",
|
139
|
+
"code" : "hl7-fhir-rest"
|
140
|
+
},
|
141
|
+
"name" : "FHIR R4 Endpoint for ExampleHospital's EHR1 Patient Gateway",
|
142
|
+
"contact" : [
|
143
|
+
{
|
144
|
+
"system" : "url",
|
145
|
+
"value" : "https://open.ehr1.fhirserver.com"
|
146
|
+
}
|
147
|
+
],
|
148
|
+
"payloadType" : [
|
149
|
+
{
|
150
|
+
"coding" : [
|
151
|
+
{
|
152
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-payload-type",
|
153
|
+
"code" : "none"
|
154
|
+
}
|
155
|
+
]
|
156
|
+
}
|
157
|
+
],
|
158
|
+
"address" : "<%= Inferno::Application['base_url'] %>/custom/smart_access_brands/examples/r4_capability_statement"
|
159
|
+
}
|
160
|
+
},
|
161
|
+
{
|
162
|
+
"fullUrl" : "https://ehr2.fhirserver.com/Endpoint/examplehospital-ehr2",
|
163
|
+
"resource" : {
|
164
|
+
"resourceType" : "Endpoint",
|
165
|
+
"id" : "examplehospital-ehr2",
|
166
|
+
"extension" : [
|
167
|
+
{
|
168
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/endpoint-fhir-version",
|
169
|
+
"valueCode" : "4.0.1"
|
170
|
+
}
|
171
|
+
],
|
172
|
+
"status" : "active",
|
173
|
+
"connectionType" : {
|
174
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-connection-type",
|
175
|
+
"code" : "hl7-fhir-rest"
|
176
|
+
},
|
177
|
+
"name" : "FHIR R4 Endpoint for ExampleHospital's EHR2 Pediatric Portal",
|
178
|
+
"contact" : [
|
179
|
+
{
|
180
|
+
"system" : "url",
|
181
|
+
"value" : "https://open.ehr2.fhirserver.com"
|
182
|
+
}
|
183
|
+
],
|
184
|
+
"payloadType" : [
|
185
|
+
{
|
186
|
+
"coding" : [
|
187
|
+
{
|
188
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-payload-type",
|
189
|
+
"code" : "none"
|
190
|
+
}
|
191
|
+
]
|
192
|
+
}
|
193
|
+
],
|
194
|
+
"address" : "<%= Inferno::Application['base_url'] %>/custom/smart_access_brands/examples/r4_capability_statement"
|
195
|
+
}
|
196
|
+
}
|
197
|
+
]
|
198
|
+
}
|
@@ -5,7 +5,6 @@ module SMARTAppLaunch
|
|
5
5
|
id 'smart_access_brands'
|
6
6
|
title 'SMART User-access Brands and Endpoints STU2.2'
|
7
7
|
short_title 'SMART User-access Brands'
|
8
|
-
version VERSION
|
9
8
|
|
10
9
|
description <<~DESCRIPTION
|
11
10
|
The SMART User-access Brands Test Suite verifies that Brand Bundle Publishers publish valid User-access
|
@@ -34,6 +33,10 @@ module SMARTAppLaunch
|
|
34
33
|
Bundle as an input and leaving the User Access Brand Publication URL input blank.
|
35
34
|
INSTRUCTIONS
|
36
35
|
|
36
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
37
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
38
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
39
|
+
|
37
40
|
VALIDATION_MESSAGE_FILTERS = [
|
38
41
|
/\A\S+: \S+: URL value '.*' does not resolve/,
|
39
42
|
%r{\A\S+: \S+: Bundled or contained reference not found within the bundle/resource} # Validator issue with Brand profile: https://chat.fhir.org/#narrow/stream/291844-FHIR-Validator/topic/SMART.20v2.2E2.20User.20Access.20Brands.3A.20Brand.20validation.20error.3F/near/466321024
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tls_test_kit'
|
2
2
|
|
3
3
|
require_relative 'jwks'
|
4
|
-
require_relative 'version'
|
5
4
|
require_relative 'discovery_stu1_group'
|
6
5
|
require_relative 'standalone_launch_group'
|
7
6
|
require_relative 'ehr_launch_group'
|
@@ -12,7 +11,6 @@ module SMARTAppLaunch
|
|
12
11
|
class SMARTSTU1Suite < Inferno::TestSuite
|
13
12
|
id 'smart'
|
14
13
|
title 'SMART App Launch STU1'
|
15
|
-
version VERSION
|
16
14
|
|
17
15
|
resume_test_route :get, '/launch' do |request|
|
18
16
|
request.query_parameters['iss']
|
@@ -34,15 +32,18 @@ module SMARTAppLaunch
|
|
34
32
|
}
|
35
33
|
|
36
34
|
description <<~DESCRIPTION
|
37
|
-
The SMART App Launch Test Suite verifies that systems correctly implement
|
38
|
-
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/1.0.0/)
|
39
|
-
for providing authorization and/or authentication services to client
|
40
|
-
applications accessing HL7® FHIR® APIs. To get started, please first register
|
35
|
+
The SMART App Launch Test Suite verifies that systems correctly implement
|
36
|
+
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/1.0.0/)
|
37
|
+
for providing authorization and/or authentication services to client
|
38
|
+
applications accessing HL7® FHIR® APIs. To get started, please first register
|
41
39
|
the Inferno client as a SMART App with the following information:
|
42
40
|
|
43
41
|
* SMART Launch URI: `#{config.options[:launch_uri]}`
|
44
42
|
* OAuth Redirect URI: `#{config.options[:redirect_uri]}`
|
45
43
|
DESCRIPTION
|
44
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
45
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
46
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
46
47
|
|
47
48
|
group do
|
48
49
|
title 'Standalone Launch'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tls_test_kit'
|
2
2
|
|
3
3
|
require_relative 'jwks'
|
4
|
-
require_relative 'version'
|
5
4
|
require_relative 'discovery_stu2_2_group'
|
6
5
|
require_relative 'standalone_launch_group_stu2_2'
|
7
6
|
require_relative 'ehr_launch_group_stu2_2'
|
@@ -13,7 +12,6 @@ module SMARTAppLaunch
|
|
13
12
|
class SMARTSTU22Suite < Inferno::TestSuite
|
14
13
|
id 'smart_stu2_2'
|
15
14
|
title 'SMART App Launch STU2.2'
|
16
|
-
version VERSION
|
17
15
|
|
18
16
|
resume_test_route :get, '/launch' do |request|
|
19
17
|
request.query_parameters['iss']
|
@@ -72,6 +70,9 @@ module SMARTAppLaunch
|
|
72
70
|
If the token introspection endpoint of the system under test is NOT available at .well-known/smart-configuration,
|
73
71
|
please run the test groups individually and group 3 Token Introspection will include the introspection endpoint as a manual input.
|
74
72
|
)
|
73
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
74
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
75
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
75
76
|
|
76
77
|
group do
|
77
78
|
title 'Standalone Launch'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tls_test_kit'
|
2
2
|
|
3
3
|
require_relative 'jwks'
|
4
|
-
require_relative 'version'
|
5
4
|
require_relative 'discovery_stu2_group'
|
6
5
|
require_relative 'standalone_launch_group_stu2'
|
7
6
|
require_relative 'ehr_launch_group_stu2'
|
@@ -14,7 +13,6 @@ module SMARTAppLaunch
|
|
14
13
|
class SMARTSTU2Suite < Inferno::TestSuite
|
15
14
|
id 'smart_stu2'
|
16
15
|
title 'SMART App Launch STU2'
|
17
|
-
version VERSION
|
18
16
|
|
19
17
|
resume_test_route :get, '/launch' do |request|
|
20
18
|
request.query_parameters['iss']
|
@@ -42,10 +40,10 @@ module SMARTAppLaunch
|
|
42
40
|
}
|
43
41
|
|
44
42
|
description <<~DESCRIPTION
|
45
|
-
The SMART App Launch Test Suite verifies that systems correctly implement
|
46
|
-
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/STU2/)
|
47
|
-
for providing authorization and/or authentication services to client
|
48
|
-
applications accessing HL7® FHIR® APIs. To get started, please first register
|
43
|
+
The SMART App Launch Test Suite verifies that systems correctly implement
|
44
|
+
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/STU2/)
|
45
|
+
for providing authorization and/or authentication services to client
|
46
|
+
applications accessing HL7® FHIR® APIs. To get started, please first register
|
49
47
|
the Inferno client as a SMART App with the following information:
|
50
48
|
|
51
49
|
* SMART Launch URI: `#{config.options[:launch_uri]}`
|
@@ -59,17 +57,20 @@ module SMARTAppLaunch
|
|
59
57
|
|
60
58
|
input_instructions %(
|
61
59
|
When running tests at this level, the token introspection endpoint is not available as a manual input.
|
62
|
-
Instead, group 3 Token Introspection will assume the token introspection endpoint
|
60
|
+
Instead, group 3 Token Introspection will assume the token introspection endpoint
|
63
61
|
will be output from group 1 Standalone Launch tests, specifically the SMART On FHIR Discovery tests that query
|
64
62
|
the .well-known/smart-configuration endpoint. However, including the token introspection
|
65
63
|
endpoint as part of the well-known ouput is NOT required and is not formally checked in the SMART On FHIR Discovery
|
66
64
|
tests. RFC-7662 on Token Introspection says that "The means by which the protected resource discovers the location of the introspection
|
67
65
|
endpoint are outside the scope of this specification" and the Token Introspection IG does not add any further
|
68
|
-
requirements to this.
|
66
|
+
requirements to this.
|
69
67
|
|
70
|
-
If the token introspection endpoint of the system under test is NOT available at .well-known/smart-configuration,
|
71
|
-
please run the test groups individually and group 3 Token Introspection will include the introspection endpoint as a manual input.
|
68
|
+
If the token introspection endpoint of the system under test is NOT available at .well-known/smart-configuration,
|
69
|
+
please run the test groups individually and group 3 Token Introspection will include the introspection endpoint as a manual input.
|
72
70
|
)
|
71
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
72
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
73
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
73
74
|
|
74
75
|
group do
|
75
76
|
title 'Standalone Launch'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_app_launch_test_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen MacVicar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inferno_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.6.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.6.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json-jwt
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.3.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.3.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: database_cleaner-sequel
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,6 +145,14 @@ extensions: []
|
|
145
145
|
extra_rdoc_files: []
|
146
146
|
files:
|
147
147
|
- LICENSE
|
148
|
+
- config/presets/inferno_reference_server_preset.json
|
149
|
+
- config/presets/inferno_reference_server_stu2_2_preset.json
|
150
|
+
- config/presets/inferno_reference_server_stu2_preset.json
|
151
|
+
- config/presets/smart_access_brands.json.erb
|
152
|
+
- config/presets/smart_access_brands_example_1.json
|
153
|
+
- config/presets/smart_access_brands_example_2.json
|
154
|
+
- config/presets/smart_access_brands_example_3.json
|
155
|
+
- config/presets/smart_access_brands_example_4.json
|
148
156
|
- lib/smart_app_launch/app_launch_test.rb
|
149
157
|
- lib/smart_app_launch/app_redirect_test.rb
|
150
158
|
- lib/smart_app_launch/app_redirect_test_stu2.rb
|
@@ -169,6 +177,7 @@ files:
|
|
169
177
|
- lib/smart_app_launch/ehr_launch_group_stu2_2.rb
|
170
178
|
- lib/smart_app_launch/jwks.rb
|
171
179
|
- lib/smart_app_launch/launch_received_test.rb
|
180
|
+
- lib/smart_app_launch/metadata.rb
|
172
181
|
- lib/smart_app_launch/openid_connect_group.rb
|
173
182
|
- lib/smart_app_launch/openid_connect_group_stu2_2.rb
|
174
183
|
- lib/smart_app_launch/openid_decode_id_token_test.rb
|
@@ -180,6 +189,7 @@ files:
|
|
180
189
|
- lib/smart_app_launch/openid_token_payload_test.rb
|
181
190
|
- lib/smart_app_launch/post_auth.html
|
182
191
|
- lib/smart_app_launch/smart_access_brands_examples/r4_capability_statement.json
|
192
|
+
- lib/smart_app_launch/smart_access_brands_examples/smart_access_brands_example.json.erb
|
183
193
|
- lib/smart_app_launch/smart_access_brands_group.rb
|
184
194
|
- lib/smart_app_launch/smart_access_brands_retrieval_group.rb
|
185
195
|
- lib/smart_app_launch/smart_access_brands_retrieve_bundle_test.rb
|
@@ -224,6 +234,7 @@ homepage: https://github.com/inferno-framework/smart-app-launch-test-kit
|
|
224
234
|
licenses:
|
225
235
|
- Apache-2.0
|
226
236
|
metadata:
|
237
|
+
inferno_test_kit: 'true'
|
227
238
|
homepage_uri: https://github.com/inferno-framework/smart-app-launch-test-kit
|
228
239
|
source_code_uri: https://github.com/inferno-framework/smart-app-launch-test-kit
|
229
240
|
post_install_message:
|
@@ -234,14 +245,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
245
|
requirements:
|
235
246
|
- - ">="
|
236
247
|
- !ruby/object:Gem::Version
|
237
|
-
version: 3.
|
248
|
+
version: 3.3.6
|
238
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
250
|
requirements:
|
240
251
|
- - ">="
|
241
252
|
- !ruby/object:Gem::Version
|
242
253
|
version: '0'
|
243
254
|
requirements: []
|
244
|
-
rubygems_version: 3.5.
|
255
|
+
rubygems_version: 3.5.22
|
245
256
|
signing_key:
|
246
257
|
specification_version: 4
|
247
258
|
summary: Inferno Tests for the SMART Application Launch Framework Implementation Guide
|