us_core_test_kit 0.7.0 → 0.7.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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/lib/us_core_test_kit/custom_groups/base_smart_granular_scopes_group.rb +2 -1
  3. data/lib/us_core_test_kit/custom_groups/capability_statement/instantiate_test.rb +6 -2
  4. data/lib/us_core_test_kit/custom_groups/capability_statement/profile_support_test.rb +10 -7
  5. data/lib/us_core_test_kit/custom_groups/screening_assessment_category_test.rb +75 -0
  6. data/lib/us_core_test_kit/custom_groups/smart_scopes_constants.rb +6 -4
  7. data/lib/us_core_test_kit/custom_groups/v6.1.0/screening_assessment_group.rb +45 -0
  8. data/lib/us_core_test_kit/custom_groups/v6.1.0/smart_granular_scopes_group.rb +46 -93
  9. data/lib/us_core_test_kit/custom_groups/v7.0.0-ballot/screening_assessment_group.rb +48 -0
  10. data/lib/us_core_test_kit/fhir_resource_navigation.rb +11 -6
  11. data/lib/us_core_test_kit/generated/v6.1.0/condition_encounter_diagnosis/metadata.yml +22 -20
  12. data/lib/us_core_test_kit/generated/v6.1.0/condition_granular_scope1_group.rb +22 -21
  13. data/lib/us_core_test_kit/generated/v6.1.0/condition_granular_scope2_group.rb +44 -0
  14. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/condition_granular_scope_read_test.rb +32 -0
  15. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_abatement_date_granular_scope_test.rb → condition_patient_abatement_date_granular_scope_search_test.rb} +5 -5
  16. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_asserted_date_granular_scope_test.rb → condition_patient_asserted_date_granular_scope_search_test.rb} +5 -5
  17. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_category_clinical_status_granular_scope_test.rb → condition_patient_category_clinical_status_granular_scope_search_test.rb} +5 -5
  18. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_category_encounter_granular_scope_test.rb → condition_patient_category_encounter_granular_scope_search_test.rb} +5 -5
  19. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_category_granular_scope_test.rb → condition_patient_category_granular_scope_search_test.rb} +5 -5
  20. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_clinical_status_granular_scope_test.rb → condition_patient_clinical_status_granular_scope_search_test.rb} +5 -5
  21. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_code_granular_scope_test.rb → condition_patient_code_granular_scope_search_test.rb} +5 -5
  22. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_granular_scope_test.rb → condition_patient_granular_scope_search_test.rb} +5 -5
  23. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_onset_date_granular_scope_test.rb → condition_patient_onset_date_granular_scope_search_test.rb} +5 -5
  24. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/{condition_patient_recorded_date_granular_scope_test.rb → condition_patient_recorded_date_granular_scope_search_test.rb} +5 -5
  25. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/condition/metadata.yml +24 -22
  26. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/observation/metadata.yml +14 -12
  27. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/observation/observation_granular_scope_read_test.rb +32 -0
  28. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/observation/{observation_patient_category_date_granular_scope_test.rb → observation_patient_category_date_granular_scope_search_test.rb} +5 -5
  29. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/observation/{observation_patient_category_granular_scope_test.rb → observation_patient_category_granular_scope_search_test.rb} +5 -5
  30. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/observation/{observation_patient_category_status_granular_scope_test.rb → observation_patient_category_status_granular_scope_search_test.rb} +5 -5
  31. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/observation/{observation_patient_code_date_granular_scope_test.rb → observation_patient_code_date_granular_scope_search_test.rb} +5 -5
  32. data/lib/us_core_test_kit/generated/v6.1.0/granular_scope_tests/observation/{observation_patient_code_granular_scope_test.rb → observation_patient_code_granular_scope_search_test.rb} +5 -5
  33. data/lib/us_core_test_kit/generated/v6.1.0/granular_scopes1_group.rb +0 -4
  34. data/lib/us_core_test_kit/generated/v6.1.0/granular_scopes2_group.rb +51 -0
  35. data/lib/us_core_test_kit/generated/v6.1.0/metadata.yml +40 -30
  36. data/lib/us_core_test_kit/generated/v6.1.0/observation_granular_scope1_group.rb +12 -13
  37. data/lib/us_core_test_kit/generated/v6.1.0/observation_granular_scope2_group.rb +36 -0
  38. data/lib/us_core_test_kit/generated/v6.1.0/observation_lab/metadata.yml +12 -10
  39. data/lib/us_core_test_kit/generated/v6.1.0/us_core_test_suite.rb +3 -1
  40. data/lib/us_core_test_kit/generated/v7.0.0-ballot/condition_encounter_diagnosis/metadata.yml +22 -20
  41. data/lib/us_core_test_kit/generated/v7.0.0-ballot/condition_granular_scope1_group.rb +22 -20
  42. data/lib/us_core_test_kit/generated/v7.0.0-ballot/condition_granular_scope2_group.rb +22 -20
  43. data/lib/us_core_test_kit/generated/v7.0.0-ballot/diagnostic_report_granular_scope1_group.rb +14 -12
  44. data/lib/us_core_test_kit/generated/v7.0.0-ballot/diagnostic_report_granular_scope2_group.rb +14 -12
  45. data/lib/us_core_test_kit/generated/v7.0.0-ballot/diagnostic_report_note/metadata.yml +14 -12
  46. data/lib/us_core_test_kit/generated/v7.0.0-ballot/document_reference/metadata.yml +16 -14
  47. data/lib/us_core_test_kit/generated/v7.0.0-ballot/document_reference_granular_scope1_group.rb +16 -14
  48. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/condition_granular_scope_read_test.rb +32 -0
  49. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_abatement_date_granular_scope_test.rb → condition_patient_abatement_date_granular_scope_search_test.rb} +5 -5
  50. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_asserted_date_granular_scope_test.rb → condition_patient_asserted_date_granular_scope_search_test.rb} +5 -5
  51. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_category_clinical_status_granular_scope_test.rb → condition_patient_category_clinical_status_granular_scope_search_test.rb} +5 -5
  52. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_category_encounter_granular_scope_test.rb → condition_patient_category_encounter_granular_scope_search_test.rb} +5 -5
  53. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_category_granular_scope_test.rb → condition_patient_category_granular_scope_search_test.rb} +5 -5
  54. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_clinical_status_granular_scope_test.rb → condition_patient_clinical_status_granular_scope_search_test.rb} +5 -5
  55. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_code_granular_scope_test.rb → condition_patient_code_granular_scope_search_test.rb} +5 -5
  56. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_granular_scope_test.rb → condition_patient_granular_scope_search_test.rb} +5 -5
  57. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_onset_date_granular_scope_test.rb → condition_patient_onset_date_granular_scope_search_test.rb} +5 -5
  58. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/{condition_patient_recorded_date_granular_scope_test.rb → condition_patient_recorded_date_granular_scope_search_test.rb} +5 -5
  59. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/condition/metadata.yml +22 -20
  60. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/diagnostic_report_granular_scope_read_test.rb +32 -0
  61. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/{diagnostic_report_patient_category_date_granular_scope_test.rb → diagnostic_report_patient_category_date_granular_scope_search_test.rb} +5 -5
  62. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/{diagnostic_report_patient_category_granular_scope_test.rb → diagnostic_report_patient_category_granular_scope_search_test.rb} +5 -5
  63. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/{diagnostic_report_patient_code_date_granular_scope_test.rb → diagnostic_report_patient_code_date_granular_scope_search_test.rb} +5 -5
  64. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/{diagnostic_report_patient_code_granular_scope_test.rb → diagnostic_report_patient_code_granular_scope_search_test.rb} +5 -5
  65. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/{diagnostic_report_patient_granular_scope_test.rb → diagnostic_report_patient_granular_scope_search_test.rb} +5 -5
  66. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/{diagnostic_report_patient_status_granular_scope_test.rb → diagnostic_report_patient_status_granular_scope_search_test.rb} +5 -5
  67. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/diagnostic_report/metadata.yml +14 -12
  68. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/document_reference_granular_scope_read_test.rb +32 -0
  69. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/{document_reference_id_granular_scope_test.rb → document_reference_id_granular_scope_search_test.rb} +5 -5
  70. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/{document_reference_patient_category_date_granular_scope_test.rb → document_reference_patient_category_date_granular_scope_search_test.rb} +5 -5
  71. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/{document_reference_patient_category_granular_scope_test.rb → document_reference_patient_category_granular_scope_search_test.rb} +5 -5
  72. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/{document_reference_patient_granular_scope_test.rb → document_reference_patient_granular_scope_search_test.rb} +5 -5
  73. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/{document_reference_patient_status_granular_scope_test.rb → document_reference_patient_status_granular_scope_search_test.rb} +5 -5
  74. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/{document_reference_patient_type_granular_scope_test.rb → document_reference_patient_type_granular_scope_search_test.rb} +5 -5
  75. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/{document_reference_patient_type_period_granular_scope_test.rb → document_reference_patient_type_period_granular_scope_search_test.rb} +5 -5
  76. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/document_reference/metadata.yml +16 -14
  77. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/observation/metadata.yml +12 -10
  78. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/observation/observation_granular_scope_read_test.rb +32 -0
  79. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/observation/{observation_patient_category_date_granular_scope_test.rb → observation_patient_category_date_granular_scope_search_test.rb} +5 -5
  80. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/observation/{observation_patient_category_granular_scope_test.rb → observation_patient_category_granular_scope_search_test.rb} +5 -5
  81. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/observation/{observation_patient_category_status_granular_scope_test.rb → observation_patient_category_status_granular_scope_search_test.rb} +5 -5
  82. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/observation/{observation_patient_code_date_granular_scope_test.rb → observation_patient_code_date_granular_scope_search_test.rb} +5 -5
  83. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/observation/{observation_patient_code_granular_scope_test.rb → observation_patient_code_granular_scope_search_test.rb} +5 -5
  84. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/metadata.yml +16 -14
  85. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/service_request_granular_scope_read_test.rb +32 -0
  86. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/{service_request_id_granular_scope_test.rb → service_request_id_granular_scope_search_test.rb} +5 -5
  87. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/{service_request_patient_category_authored_granular_scope_test.rb → service_request_patient_category_authored_granular_scope_search_test.rb} +5 -5
  88. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/{service_request_patient_category_granular_scope_test.rb → service_request_patient_category_granular_scope_search_test.rb} +5 -5
  89. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/{service_request_patient_code_authored_granular_scope_test.rb → service_request_patient_code_authored_granular_scope_search_test.rb} +5 -5
  90. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/{service_request_patient_code_granular_scope_test.rb → service_request_patient_code_granular_scope_search_test.rb} +5 -5
  91. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/{service_request_patient_granular_scope_test.rb → service_request_patient_granular_scope_search_test.rb} +5 -5
  92. data/lib/us_core_test_kit/generated/v7.0.0-ballot/granular_scope_tests/service_request/{service_request_patient_status_granular_scope_test.rb → service_request_patient_status_granular_scope_search_test.rb} +5 -5
  93. data/lib/us_core_test_kit/generated/v7.0.0-ballot/metadata.yml +80 -70
  94. data/lib/us_core_test_kit/generated/v7.0.0-ballot/observation_granular_scope1_group.rb +12 -10
  95. data/lib/us_core_test_kit/generated/v7.0.0-ballot/observation_granular_scope2_group.rb +12 -10
  96. data/lib/us_core_test_kit/generated/v7.0.0-ballot/observation_lab/metadata.yml +12 -10
  97. data/lib/us_core_test_kit/generated/v7.0.0-ballot/service_request/metadata.yml +16 -14
  98. data/lib/us_core_test_kit/generated/v7.0.0-ballot/service_request_granular_scope1_group.rb +16 -14
  99. data/lib/us_core_test_kit/generated/v7.0.0-ballot/service_request_granular_scope2_group.rb +16 -14
  100. data/lib/us_core_test_kit/generated/v7.0.0-ballot/us_core_test_suite.rb +3 -1
  101. data/lib/us_core_test_kit/generator/granular_scope_group_generator.rb +0 -7
  102. data/lib/us_core_test_kit/generator/granular_scope_read_test_generator.rb +102 -0
  103. data/lib/us_core_test_kit/generator/granular_scope_resource_type_group_generator.rb +1 -1
  104. data/lib/us_core_test_kit/generator/granular_scope_test_generator.rb +4 -4
  105. data/lib/us_core_test_kit/generator/suite_generator.rb +9 -1
  106. data/lib/us_core_test_kit/generator.rb +2 -0
  107. data/lib/us_core_test_kit/granular_scope.rb +63 -0
  108. data/lib/us_core_test_kit/granular_scope_read_test.rb +71 -0
  109. data/lib/us_core_test_kit/{granular_scope_checker.rb → granular_scope_search_test.rb} +8 -47
  110. data/lib/us_core_test_kit/must_support_test.rb +3 -2
  111. data/lib/us_core_test_kit/primitive_type.rb +5 -0
  112. data/lib/us_core_test_kit/provenance_validator.rb +3 -4
  113. data/lib/us_core_test_kit/resource_search_param_checker.rb +139 -0
  114. data/lib/us_core_test_kit/search_test.rb +6 -2
  115. data/lib/us_core_test_kit/version.rb +1 -1
  116. metadata +73 -55
@@ -328,20 +328,22 @@
328
328
  - :id: us_core_v700_ballot_service_request_reference_resolution_test
329
329
  :file_name: service_request_reference_resolution_test.rb
330
330
  :granular_scope_tests:
331
- - :id: us_core_v700_ballot_ServiceRequest_patient_granular_scope_test
332
- :file_name: service_request_patient_granular_scope_test.rb
333
- - :id: us_core_v700_ballot_ServiceRequest__id_granular_scope_test
334
- :file_name: service_request_id_granular_scope_test.rb
335
- - :id: us_core_v700_ballot_ServiceRequest_patient_category_authored_granular_scope_test
336
- :file_name: service_request_patient_category_authored_granular_scope_test.rb
337
- - :id: us_core_v700_ballot_ServiceRequest_patient_category_granular_scope_test
338
- :file_name: service_request_patient_category_granular_scope_test.rb
339
- - :id: us_core_v700_ballot_ServiceRequest_patient_code_authored_granular_scope_test
340
- :file_name: service_request_patient_code_authored_granular_scope_test.rb
341
- - :id: us_core_v700_ballot_ServiceRequest_patient_code_granular_scope_test
342
- :file_name: service_request_patient_code_granular_scope_test.rb
343
- - :id: us_core_v700_ballot_ServiceRequest_patient_status_granular_scope_test
344
- :file_name: service_request_patient_status_granular_scope_test.rb
331
+ - :id: us_core_v700_ballot_ServiceRequest_patient_granular_scope_search_test
332
+ :file_name: service_request_patient_granular_scope_search_test.rb
333
+ - :id: us_core_v700_ballot_ServiceRequest__id_granular_scope_search_test
334
+ :file_name: service_request_id_granular_scope_search_test.rb
335
+ - :id: us_core_v700_ballot_ServiceRequest_patient_category_authored_granular_scope_search_test
336
+ :file_name: service_request_patient_category_authored_granular_scope_search_test.rb
337
+ - :id: us_core_v700_ballot_ServiceRequest_patient_category_granular_scope_search_test
338
+ :file_name: service_request_patient_category_granular_scope_search_test.rb
339
+ - :id: us_core_v700_ballot_ServiceRequest_patient_code_authored_granular_scope_search_test
340
+ :file_name: service_request_patient_code_authored_granular_scope_search_test.rb
341
+ - :id: us_core_v700_ballot_ServiceRequest_patient_code_granular_scope_search_test
342
+ :file_name: service_request_patient_code_granular_scope_search_test.rb
343
+ - :id: us_core_v700_ballot_ServiceRequest_patient_status_granular_scope_search_test
344
+ :file_name: service_request_patient_status_granular_scope_search_test.rb
345
+ - :id: us_core_v700_ballot_ServiceRequest_granular_scope_read_test
346
+ :file_name: service_request_granular_scope_read_test.rb
345
347
  :id: us_core_v700_ballot_service_request
346
348
  :file_name: service_request_group.rb
347
349
  :delayed_references:
@@ -1,10 +1,11 @@
1
- require_relative './granular_scope_tests/service_request/service_request_patient_granular_scope_test'
2
- require_relative './granular_scope_tests/service_request/service_request_id_granular_scope_test'
3
- require_relative './granular_scope_tests/service_request/service_request_patient_category_authored_granular_scope_test'
4
- require_relative './granular_scope_tests/service_request/service_request_patient_category_granular_scope_test'
5
- require_relative './granular_scope_tests/service_request/service_request_patient_code_authored_granular_scope_test'
6
- require_relative './granular_scope_tests/service_request/service_request_patient_code_granular_scope_test'
7
- require_relative './granular_scope_tests/service_request/service_request_patient_status_granular_scope_test'
1
+ require_relative './granular_scope_tests/service_request/service_request_patient_granular_scope_search_test'
2
+ require_relative './granular_scope_tests/service_request/service_request_id_granular_scope_search_test'
3
+ require_relative './granular_scope_tests/service_request/service_request_patient_category_authored_granular_scope_search_test'
4
+ require_relative './granular_scope_tests/service_request/service_request_patient_category_granular_scope_search_test'
5
+ require_relative './granular_scope_tests/service_request/service_request_patient_code_authored_granular_scope_search_test'
6
+ require_relative './granular_scope_tests/service_request/service_request_patient_code_granular_scope_search_test'
7
+ require_relative './granular_scope_tests/service_request/service_request_patient_status_granular_scope_search_test'
8
+ require_relative './granular_scope_tests/service_request/service_request_granular_scope_read_test'
8
9
 
9
10
  module USCoreTestKit
10
11
  module USCoreV700_BALLOT
@@ -24,13 +25,14 @@ based on the following granular scopes:
24
25
  run_as_group
25
26
 
26
27
 
27
- test from: :us_core_v700_ballot_ServiceRequest_patient_granular_scope_test
28
- test from: :us_core_v700_ballot_ServiceRequest__id_granular_scope_test
29
- test from: :us_core_v700_ballot_ServiceRequest_patient_category_authored_granular_scope_test
30
- test from: :us_core_v700_ballot_ServiceRequest_patient_category_granular_scope_test
31
- test from: :us_core_v700_ballot_ServiceRequest_patient_code_authored_granular_scope_test
32
- test from: :us_core_v700_ballot_ServiceRequest_patient_code_granular_scope_test
33
- test from: :us_core_v700_ballot_ServiceRequest_patient_status_granular_scope_test
28
+ test from: :us_core_v700_ballot_ServiceRequest_patient_granular_scope_search_test
29
+ test from: :us_core_v700_ballot_ServiceRequest__id_granular_scope_search_test
30
+ test from: :us_core_v700_ballot_ServiceRequest_patient_category_authored_granular_scope_search_test
31
+ test from: :us_core_v700_ballot_ServiceRequest_patient_category_granular_scope_search_test
32
+ test from: :us_core_v700_ballot_ServiceRequest_patient_code_authored_granular_scope_search_test
33
+ test from: :us_core_v700_ballot_ServiceRequest_patient_code_granular_scope_search_test
34
+ test from: :us_core_v700_ballot_ServiceRequest_patient_status_granular_scope_search_test
35
+ test from: :us_core_v700_ballot_ServiceRequest_granular_scope_read_test
34
36
  end
35
37
  end
36
38
  end
@@ -1,10 +1,11 @@
1
- require_relative './granular_scope_tests/service_request/service_request_patient_granular_scope_test'
2
- require_relative './granular_scope_tests/service_request/service_request_id_granular_scope_test'
3
- require_relative './granular_scope_tests/service_request/service_request_patient_category_authored_granular_scope_test'
4
- require_relative './granular_scope_tests/service_request/service_request_patient_category_granular_scope_test'
5
- require_relative './granular_scope_tests/service_request/service_request_patient_code_authored_granular_scope_test'
6
- require_relative './granular_scope_tests/service_request/service_request_patient_code_granular_scope_test'
7
- require_relative './granular_scope_tests/service_request/service_request_patient_status_granular_scope_test'
1
+ require_relative './granular_scope_tests/service_request/service_request_patient_granular_scope_search_test'
2
+ require_relative './granular_scope_tests/service_request/service_request_id_granular_scope_search_test'
3
+ require_relative './granular_scope_tests/service_request/service_request_patient_category_authored_granular_scope_search_test'
4
+ require_relative './granular_scope_tests/service_request/service_request_patient_category_granular_scope_search_test'
5
+ require_relative './granular_scope_tests/service_request/service_request_patient_code_authored_granular_scope_search_test'
6
+ require_relative './granular_scope_tests/service_request/service_request_patient_code_granular_scope_search_test'
7
+ require_relative './granular_scope_tests/service_request/service_request_patient_status_granular_scope_search_test'
8
+ require_relative './granular_scope_tests/service_request/service_request_granular_scope_read_test'
8
9
 
9
10
  module USCoreTestKit
10
11
  module USCoreV700_BALLOT
@@ -25,13 +26,14 @@ based on the following granular scopes:
25
26
  run_as_group
26
27
 
27
28
 
28
- test from: :us_core_v700_ballot_ServiceRequest_patient_granular_scope_test
29
- test from: :us_core_v700_ballot_ServiceRequest__id_granular_scope_test
30
- test from: :us_core_v700_ballot_ServiceRequest_patient_category_authored_granular_scope_test
31
- test from: :us_core_v700_ballot_ServiceRequest_patient_category_granular_scope_test
32
- test from: :us_core_v700_ballot_ServiceRequest_patient_code_authored_granular_scope_test
33
- test from: :us_core_v700_ballot_ServiceRequest_patient_code_granular_scope_test
34
- test from: :us_core_v700_ballot_ServiceRequest_patient_status_granular_scope_test
29
+ test from: :us_core_v700_ballot_ServiceRequest_patient_granular_scope_search_test
30
+ test from: :us_core_v700_ballot_ServiceRequest__id_granular_scope_search_test
31
+ test from: :us_core_v700_ballot_ServiceRequest_patient_category_authored_granular_scope_search_test
32
+ test from: :us_core_v700_ballot_ServiceRequest_patient_category_granular_scope_search_test
33
+ test from: :us_core_v700_ballot_ServiceRequest_patient_code_authored_granular_scope_search_test
34
+ test from: :us_core_v700_ballot_ServiceRequest_patient_code_granular_scope_search_test
35
+ test from: :us_core_v700_ballot_ServiceRequest_patient_status_granular_scope_search_test
36
+ test from: :us_core_v700_ballot_ServiceRequest_granular_scope_read_test
35
37
  end
36
38
  end
37
39
  end
@@ -5,6 +5,7 @@ require_relative '../../custom_groups/v4.0.0/clinical_notes_guidance_group'
5
5
  require_relative '../../custom_groups/data_absent_reason_group'
6
6
  require_relative '../../custom_groups/smart_app_launch_group'
7
7
  require_relative '../../custom_groups/v7.0.0-ballot/smart_granular_scopes_group'
8
+ require_relative '../../custom_groups/v7.0.0-ballot/screening_assessment_group'
8
9
  require_relative '../../provenance_validator'
9
10
  require_relative '../../us_core_options'
10
11
 
@@ -207,10 +208,11 @@ module USCoreTestKit
207
208
  group from: :us_core_v700_ballot_related_person
208
209
  group from: :us_core_v700_ballot_specimen
209
210
  group from: :us_core_v400_clinical_notes_guidance
211
+ group from: :us_core_v700_ballot_screening_assessment
210
212
  group from: :us_core_311_data_absent_reason
211
213
  end
212
214
 
213
- group from: :'us_core_v700_ballot_smart_granular_scopes',
215
+ group from: :us_core_v700_ballot_smart_granular_scopes,
214
216
  required_suite_options: USCoreOptions::SMART_2_REQUIREMENT
215
217
 
216
218
  end
@@ -4,18 +4,11 @@ require_relative '../custom_groups/smart_scopes_constants'
4
4
  module USCoreTestKit
5
5
  class Generator
6
6
  class GranularScopeGroupGenerator
7
- include SmartScopesConstants
8
-
9
7
  class << self
10
8
  def generate(ig_metadata, base_output_dir)
11
9
  return unless ['6', '7'].include? ig_metadata.ig_version[1]
12
10
 
13
11
  [1, 2].each do |group_number|
14
- scopes =
15
- SmartScopesConstants
16
- .const_get("SMART_GRANULAR_SCOPES_GROUP#{group_number}")[ig_metadata.reformatted_version]
17
- next if scopes.blank?
18
-
19
12
  new(ig_metadata, base_output_dir, group_number).generate
20
13
  end
21
14
  end
@@ -0,0 +1,102 @@
1
+ require_relative 'naming'
2
+ require_relative 'special_cases'
3
+ require_relative '../custom_groups/smart_scopes_constants'
4
+
5
+ module USCoreTestKit
6
+ class Generator
7
+ class GranularScopeReadTestGenerator
8
+ class << self
9
+ def generate(ig_metadata, base_output_dir)
10
+
11
+ return unless ['6', '7'].include? ig_metadata.ig_version[1]
12
+
13
+ scopes =
14
+ SmartScopesConstants::SMART_GRANULAR_SCOPES_GROUP1[ig_metadata.reformatted_version] +
15
+ (SmartScopesConstants::SMART_GRANULAR_SCOPES_GROUP2[ig_metadata.reformatted_version] || [])
16
+
17
+ SmartScopesConstants::SMART_GRANULAR_SCOPE_RESOURCES.each do |resource_type|
18
+ group = ig_metadata.groups.find { |group| group.resource == resource_type }
19
+
20
+ next if scopes.none? { |scope| scope.start_with? "patient/#{group.resource}" }
21
+
22
+ new(group, base_output_dir).generate
23
+ end
24
+ end
25
+ end
26
+
27
+ attr_accessor :group_metadata, :base_output_dir, :group_number
28
+
29
+ def initialize(group_metadata, base_output_dir)
30
+ self.group_metadata = group_metadata
31
+ self.base_output_dir = base_output_dir
32
+ end
33
+
34
+ def template
35
+ @template ||= File.read(File.join(__dir__, 'templates', 'granular_scope_read_test.rb.erb'))
36
+ end
37
+
38
+ def output
39
+ @output ||= ERB.new(template).result(binding)
40
+ end
41
+
42
+ def base_output_file_name
43
+ "#{class_name.underscore}.rb"
44
+ end
45
+
46
+ def output_file_directory
47
+ File.join(base_output_dir, 'granular_scope_tests', resource_type.underscore)
48
+ end
49
+
50
+ def output_file_name
51
+ File.join(output_file_directory, base_output_file_name)
52
+ end
53
+
54
+ def profile_identifier
55
+ Naming.snake_case_for_profile(group_metadata)
56
+ end
57
+
58
+ def test_id
59
+ "us_core_#{group_metadata.reformatted_version}_#{resource_type}_granular_scope_read_test"
60
+ end
61
+
62
+ def class_name
63
+ "#{resource_type}GranularScopeReadTest"
64
+ end
65
+
66
+ def module_name
67
+ "USCore#{group_metadata.reformatted_version.upcase}"
68
+ end
69
+
70
+ def resource_type
71
+ group_metadata.resource
72
+ end
73
+
74
+ def path_for_value(path)
75
+ path == 'class' ? 'local_class' : path
76
+ end
77
+
78
+ def array_of_strings(array)
79
+ quoted_strings = array.map { |element| "'#{element}'" }
80
+ "[#{quoted_strings.join(', ')}]"
81
+ end
82
+
83
+ def generate
84
+ FileUtils.mkdir_p(output_file_directory)
85
+ File.open(output_file_name, 'w') { |f| f.write(output) }
86
+
87
+ group_metadata.add_granular_scope_test(
88
+ id: test_id,
89
+ file_name: base_output_file_name
90
+ )
91
+ end
92
+
93
+ def description
94
+ <<~DESCRIPTION.gsub(/\n{3,}/, "\n\n")
95
+ This test attempts #{resource_type} reads
96
+ and verifies that the results have been
97
+ filtered based on the granted granular scopes.
98
+ DESCRIPTION
99
+ end
100
+ end
101
+ end
102
+ end
@@ -16,7 +16,7 @@ module USCoreTestKit
16
16
  .const_get("SMART_GRANULAR_SCOPES_GROUP#{group_number}")[ig_metadata.reformatted_version]
17
17
 
18
18
  groups.each do |group_metadata|
19
- next if scopes.blank? || scopes.none? { |scope| scope.start_with? "patient/#{group_metadata.resource}" }
19
+ next if scopes.none? { |scope| scope.start_with? "patient/#{group_metadata.resource}" }
20
20
 
21
21
  new(GroupMetadata.new(group_metadata.to_hash), ig_metadata, base_output_dir, group_number).generate
22
22
  end
@@ -11,12 +11,12 @@ module USCoreTestKit
11
11
 
12
12
  scopes =
13
13
  SmartScopesConstants::SMART_GRANULAR_SCOPES_GROUP1[ig_metadata.reformatted_version] +
14
- (SmartScopesConstants::SMART_GRANULAR_SCOPES_GROUP2[ig_metadata.reformatted_version] || [])
14
+ SmartScopesConstants::SMART_GRANULAR_SCOPES_GROUP2[ig_metadata.reformatted_version]
15
15
 
16
16
  SmartScopesConstants::SMART_GRANULAR_SCOPE_RESOURCES.each do |resource_type|
17
17
  group = ig_metadata.groups.find { |group| group.resource == resource_type }
18
18
 
19
- next if scopes.blank? || scopes.none? { |scope| scope.start_with? "patient/#{group.resource}" }
19
+ next if scopes.none? { |scope| scope.start_with? "patient/#{group.resource}" }
20
20
 
21
21
  group.searches
22
22
  .each { |search| new(group, search, base_output_dir).generate }
@@ -57,7 +57,7 @@ module USCoreTestKit
57
57
  end
58
58
 
59
59
  def test_id
60
- "us_core_#{group_metadata.reformatted_version}_#{resource_type}_#{search_identifier}_granular_scope_test"
60
+ "us_core_#{group_metadata.reformatted_version}_#{resource_type}_#{search_identifier}_granular_scope_search_test"
61
61
  end
62
62
 
63
63
  def search_identifier
@@ -69,7 +69,7 @@ module USCoreTestKit
69
69
  end
70
70
 
71
71
  def class_name
72
- "#{resource_type}#{search_title}GranularScopeTest"
72
+ "#{resource_type}#{search_title}GranularScopeSearchTest"
73
73
  end
74
74
 
75
75
  def module_name
@@ -75,7 +75,7 @@ module USCoreTestKit
75
75
  end
76
76
  end
77
77
 
78
- def test_granular_scopes?
78
+ def us_core_6_and_above?
79
79
  ig_metadata.ig_version[1].to_i > 5
80
80
  end
81
81
 
@@ -129,6 +129,14 @@ module USCoreTestKit
129
129
  def granular_scopes_id
130
130
  "us_core_#{ig_metadata.reformatted_version}_smart_granular_scopes"
131
131
  end
132
+
133
+ def screening_assessment_file_name
134
+ "../../custom_groups/#{ig_metadata.ig_version}/screening_assessment_group"
135
+ end
136
+
137
+ def screening_assessment_id
138
+ "us_core_#{ig_metadata.reformatted_version}_screening_assessment"
139
+ end
132
140
  end
133
141
  end
134
142
  end
@@ -6,6 +6,7 @@ require_relative 'generator/ig_metadata_extractor'
6
6
  require_relative 'generator/granular_scope_group_generator'
7
7
  require_relative 'generator/granular_scope_resource_type_group_generator'
8
8
  require_relative 'generator/granular_scope_test_generator'
9
+ require_relative 'generator/granular_scope_read_test_generator'
9
10
  require_relative 'generator/group_generator'
10
11
  require_relative 'generator/must_support_test_generator'
11
12
  require_relative 'generator/provenance_revinclude_search_test_generator'
@@ -104,6 +105,7 @@ module USCoreTestKit
104
105
 
105
106
  def generate_granular_scope_tests
106
107
  GranularScopeTestGenerator.generate(ig_metadata, base_output_dir)
108
+ GranularScopeReadTestGenerator.generate(ig_metadata, base_output_dir)
107
109
  end
108
110
 
109
111
  def generate_groups
@@ -0,0 +1,63 @@
1
+ module USCoreTestKit
2
+ module GranularScope
3
+
4
+ def granular_scopes
5
+ @granular_scopes ||=
6
+ received_scopes
7
+ .split(' ')
8
+ .select do |scope|
9
+ (scope.start_with?("patient/#{resource_type}") || scope.start_with?("user/#{resource_type}")) &&
10
+ scope.include?('?')
11
+ end
12
+ end
13
+
14
+ def granular_scope_search_params
15
+ @granular_scope_search_params ||=
16
+ granular_scopes.map do |scope|
17
+ _, granular_scope = scope.split('?')
18
+ name, value = granular_scope.split('=')
19
+
20
+ {
21
+ name:,
22
+ value:
23
+ }
24
+ end
25
+ end
26
+
27
+ def resource_specific_granular_scope_search_params
28
+ @resource_specific_granular_scope_search_params ||=
29
+ granular_scopes.select {|scope| scope.include?(resource_type)}.map do |scope|
30
+ _, granular_scope = scope.split('?')
31
+ name, value = granular_scope.split('=')
32
+ _, value = value.split('|')
33
+ {
34
+ name:,
35
+ value:
36
+ }
37
+ end
38
+ end
39
+
40
+ def previous_request_resources
41
+ first_request = previous_requests.first
42
+ next_page_url = nil
43
+ hash = Hash.new { |hash, key| hash[key] = [] }
44
+ previous_requests.each_with_object(hash) do |request, request_resource_hash|
45
+ request_resources =
46
+ if request.status == 200
47
+ request.resource.entry.map(&:resource).select { |resource| resource.resourceType == resource_type }
48
+ else
49
+ []
50
+ end
51
+
52
+ first_request = request if request.url != next_page_url
53
+
54
+ request_resource_hash[first_request].concat(request_resources)
55
+
56
+ next if request.resource&.resourceType != 'Bundle'
57
+
58
+ next_page_url = request.resource&.link&.find { |link| link.relation == 'next' }&.url
59
+ end
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,71 @@
1
+ require_relative 'resource_search_param_checker'
2
+ require_relative 'granular_scope'
3
+
4
+ module USCoreTestKit
5
+ module GranularScopeReadTest
6
+ extend Forwardable
7
+ include ResourceSearchParamChecker
8
+ include GranularScope
9
+
10
+ def_delegators 'self.class', :metadata
11
+ def self.included(klass)
12
+ klass.input(:received_scopes)
13
+ klass.attr_accessor :previous_requests
14
+ end
15
+
16
+ def run_scope_read_test
17
+ assert granular_scopes.present?, "No granular scopes were received for #{resource_type} resources"
18
+ resource_scopes = granular_scopes.select {|scope| scope.include?(resource_type)}
19
+
20
+ load_previous_requests
21
+ skip_if previous_requests.blank?,
22
+ "No #{resource_type} reads found"
23
+ previous_resources_for_reads = previous_request_resources.values.flatten
24
+
25
+ resource_specific_granular_scope_search_params.each do |scope|
26
+ current_scope = granular_scopes.find {|granular| granular.include?(scope[:name]) && granular.include?(scope[:value])}
27
+
28
+ resource_matching_scope = previous_resources_for_reads.find do |prev_resource|
29
+ resource_matches_param?(prev_resource, scope[:name], scope[:value])
30
+ end
31
+ skip_if resource_matching_scope.nil?, "Unable to find any resources to match scope #{current_scope}"
32
+
33
+ fhir_read resource_type, resource_matching_scope.id
34
+
35
+ assert_response_status(200)
36
+ assert_resource_type(resource_type)
37
+ end
38
+
39
+ nonmatching_resource = previous_resources_for_reads.find do |prev_resource|
40
+ resource_specific_granular_scope_search_params.none? do |scope|
41
+ resource_matches_param?(prev_resource, scope[:name], scope[:value])
42
+ end
43
+ end
44
+ if nonmatching_resource
45
+ fhir_read resource_type, nonmatching_resource.id
46
+ assert (response && response[:status]) != 200, "Server incorrectly responded with a successful status, read should fail due to scopes."
47
+ assert (resource && resource.resourceType != resource_type), "Server incorrectly returned a #{resource_type}, read should fail due to scopes"
48
+ else
49
+ info "Unable to find a resource that does not match scopes."
50
+ end
51
+ end
52
+
53
+ def load_previous_requests
54
+ params = metadata.searches.first[:names]
55
+ search_params_as_hash = params.each_with_object({}) do |name, hash|
56
+ hash[name] = nil
57
+ end
58
+ @previous_requests ||=
59
+ load_tagged_requests(search_params_tag(search_params_as_hash))
60
+ .sort_by { |request| request.index }
61
+ end
62
+
63
+ def unescape_search_value(value)
64
+ value&.gsub('\\,', ',')
65
+ end
66
+
67
+ def search_params_tag(params)
68
+ "#{resource_type}?#{params.keys.join('&')}"
69
+ end
70
+ end
71
+ end
@@ -1,11 +1,17 @@
1
+ require_relative 'resource_search_param_checker'
2
+ require_relative 'granular_scope'
3
+
1
4
  module USCoreTestKit
2
- module GranularScopeChecker
5
+ module GranularScopeSearchTest
6
+ include ResourceSearchParamChecker
7
+ include GranularScope
8
+
3
9
  def self.included(klass)
4
10
  klass.input(:received_scopes)
5
11
  klass.attr_accessor :previous_requests
6
12
  end
7
13
 
8
- def run_scope_check_test
14
+ def run_scope_search_test
9
15
  assert granular_scopes.present?, "No granular scopes were received for #{resource_type} resources"
10
16
 
11
17
  load_previous_requests
@@ -47,51 +53,6 @@ module USCoreTestKit
47
53
  end
48
54
  end
49
55
 
50
- def previous_request_resources
51
- first_request = previous_requests.first
52
- next_page_url = nil
53
- hash = Hash.new { |hash, key| hash[key] = [] }
54
- previous_requests.each_with_object(hash) do |request, request_resource_hash|
55
- request_resources =
56
- if request.status == 200
57
- request.resource.entry.map(&:resource).select { |resource| resource.resourceType == resource_type }
58
- else
59
- []
60
- end
61
-
62
- first_request = request if request.url != next_page_url
63
-
64
- request_resource_hash[first_request].concat(request_resources)
65
-
66
- next if request.resource&.resourceType != 'Bundle'
67
-
68
- next_page_url = request.resource&.link&.find { |link| link.relation == 'next' }&.url
69
- end
70
- end
71
-
72
- def granular_scopes
73
- @granular_scopes ||=
74
- received_scopes
75
- .split(' ')
76
- .select do |scope|
77
- (scope.start_with?("patient/#{resource_type}") || scope.start_with?("user/#{resource_type}")) &&
78
- scope.include?('?')
79
- end
80
- end
81
-
82
- def granular_scope_search_params
83
- @granular_scope_search_params ||=
84
- granular_scopes.map do |scope|
85
- _, granular_scope = scope.split('?')
86
- name, value = granular_scope.split('=')
87
-
88
- {
89
- name:,
90
- value:
91
- }
92
- end
93
- end
94
-
95
56
  def load_previous_requests
96
57
  search_params_as_hash = search_param_names.each_with_object({}) do |name, hash|
97
58
  hash[name] = nil
@@ -115,12 +115,13 @@ module USCoreTestKit
115
115
  .map { |ex| ex[:url] }
116
116
 
117
117
  value_found = find_a_value_at(resource, path) do |value|
118
- if value.respond_to?(:extension) && ms_extension_urls.present?
119
- urls = value.extension.map(&:url)
118
+ if value.instance_of?(USCoreTestKit::PrimitiveType) && ms_extension_urls.present?
119
+ urls = value.extension&.map(&:url)
120
120
  has_ms_extension = (urls & ms_extension_urls).present?
121
121
  end
122
122
 
123
123
  unless has_ms_extension
124
+ value = value.value if value.instance_of?(USCoreTestKit::PrimitiveType)
124
125
  value_without_extensions =
125
126
  value.respond_to?(:to_hash) ? value.to_hash.reject { |key, _| key == 'extension' } : value
126
127
  end
@@ -0,0 +1,5 @@
1
+ module USCoreTestKit
2
+ class PrimitiveType < FHIR::Element
3
+ attr_accessor :value
4
+ end
5
+ end
@@ -19,11 +19,10 @@ module USCoreTestKit
19
19
 
20
20
  failed_provenance =
21
21
  find_a_value_at(resource, 'agent') do |agent|
22
- ['Practitioner', 'Device'].any? { |resource_type| agent.who.reference&.include?(resource_type) } &&
23
- agent.onBehalfOf.nil?
22
+ ['Practitioner', 'Device'].any? { |resource_type| agent.who&.reference&.include?(resource_type) } &&
23
+ agent.onBehalfOf.nil?
24
24
  end
25
25
 
26
-
27
26
  if failed_provenance.present?
28
27
  validation_messages << {
29
28
  type: 'error',
@@ -34,4 +33,4 @@ module USCoreTestKit
34
33
  validation_messages
35
34
  end
36
35
  end
37
- end
36
+ end