au_ps_inferno 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/au_ps_inferno/generator/constants.rb +61 -0
  4. data/lib/au_ps_inferno/generator/generator.rb +76 -0
  5. data/lib/au_ps_inferno/generator/generator_group_based_metadata_module.rb +113 -0
  6. data/lib/au_ps_inferno/generator/ig_resources_extractor.rb +149 -0
  7. data/lib/au_ps_inferno/generator/metadata_manager.rb +608 -0
  8. data/lib/au_ps_inferno/generator/naming.rb +52 -0
  9. data/lib/au_ps_inferno/generator/sections_validation_group_generator.rb +182 -0
  10. data/lib/au_ps_inferno/generator/test_file_generator.rb +77 -0
  11. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_bundle_instance.rb +56 -0
  12. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_bundle_must_support_conformance/suite_au_ps_bundle_instance_au_ps_bundle_must_support_conformance_bundle_must_support_populated.rb +21 -0
  13. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_bundle_must_support_conformance.rb +16 -0
  14. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_attester/suite_au_ps_bundle_instance_au_ps_composition_attester_attester_party_ms_elements.rb +21 -0
  15. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_attester/suite_au_ps_bundle_instance_au_ps_composition_attester_attester_party_ms_identifier_slices.rb +21 -0
  16. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_attester/suite_au_ps_bundle_instance_au_ps_composition_attester_attester_party_ms_subelements.rb +21 -0
  17. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_attester.rb +26 -0
  18. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_author/suite_au_ps_bundle_instance_au_ps_composition_author_author_ms_elements.rb +21 -0
  19. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_author/suite_au_ps_bundle_instance_au_ps_composition_author_author_ms_identifier_slices.rb +21 -0
  20. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_author/suite_au_ps_bundle_instance_au_ps_composition_author_author_ms_subelements.rb +21 -0
  21. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_author/suite_au_ps_bundle_instance_au_ps_composition_author_author_resource_type_is_valid.rb +21 -0
  22. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_author.rb +28 -0
  23. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_custodian/suite_au_ps_bundle_instance_au_ps_composition_custodian_custodian_ms_elements.rb +21 -0
  24. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_custodian/suite_au_ps_bundle_instance_au_ps_composition_custodian_custodian_ms_identifier_slices.rb +21 -0
  25. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_custodian/suite_au_ps_bundle_instance_au_ps_composition_custodian_custodian_ms_subelements.rb +21 -0
  26. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_custodian.rb +26 -0
  27. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_mandatory_sections/composition_mandatory_sections_mandatory_sections_entry_profiles.rb +21 -0
  28. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_mandatory_sections/suite_au_ps_bundle_instance_au_ps_composition_mandatory_sections_sections_shall_populated.rb +21 -0
  29. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_mandatory_sections.rb +20 -0
  30. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_mandatory_ms_populated.rb +21 -0
  31. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_ms_subelements_populated.rb +22 -0
  32. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_optional_ms_populated.rb +22 -0
  33. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_optional_ms_slices.rb +22 -0
  34. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_must_support_conformance.rb +28 -0
  35. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_optional_sections/suite_au_ps_bundle_instance_au_ps_composition_optional_sections_optional_sections_entry_profiles.rb +22 -0
  36. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_optional_sections/suite_au_ps_bundle_instance_au_ps_composition_optional_sections_sections_may_populated.rb +24 -0
  37. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_optional_sections.rb +20 -0
  38. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_recommended_sections/composition_recommended_sections_recommended_sections_entry_profiles.rb +21 -0
  39. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_recommended_sections/suite_au_ps_bundle_instance_au_ps_composition_recommended_sections_sections_should_populated.rb +22 -0
  40. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_recommended_sections.rb +20 -0
  41. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_subject/suite_au_ps_bundle_instance_au_ps_composition_subject_subject_ms_elements.rb +21 -0
  42. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_subject/suite_au_ps_bundle_instance_au_ps_composition_subject_subject_ms_identifier_slices.rb +21 -0
  43. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_subject/suite_au_ps_bundle_instance_au_ps_composition_subject_subject_ms_subelements_populated.rb +21 -0
  44. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_subject/suite_au_ps_bundle_instance_au_ps_composition_subject_subject_resource_type_is_valid.rb +21 -0
  45. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_subject.rb +28 -0
  46. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_undefined_sections/suite_au_ps_bundle_instance_au_ps_composition_undefined_sections_sections_may_undefined.rb +24 -0
  47. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_undefined_sections.rb +18 -0
  48. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/bundle_validation/suite_au_ps_bundle_instance_bundle_validation_bundle_valid.rb +21 -0
  49. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/bundle_validation/suite_au_ps_bundle_instance_bundle_validation_bundle_valid_ips.rb +21 -0
  50. data/lib/au_ps_inferno/suite/au_ps_bundle_instance/bundle_validation.rb +20 -0
  51. data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_cs_is_valid_test.rb +21 -0
  52. data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_cs_supports_au_ps_profiles.rb +40 -0
  53. data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_cs_supports_ips_recommended_ops.rb +19 -0
  54. data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_retrieve_cs_group.rb +47 -0
  55. data/lib/au_ps_inferno/suite/au_ps_v100.rb +39 -0
  56. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_bundle_must_support_conformance/bundle_must_support_conformance_bundle_must_support_populated.rb +21 -0
  57. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_bundle_must_support_conformance.rb +16 -0
  58. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_attester/composition_attester_attester_party_ms_elements.rb +21 -0
  59. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_attester/composition_attester_attester_party_ms_identifier_slices.rb +21 -0
  60. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_attester/composition_attester_attester_party_ms_subelements.rb +21 -0
  61. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_attester.rb +26 -0
  62. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_author/composition_author_author_ms_elements.rb +21 -0
  63. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_author/composition_author_author_ms_identifier_slices.rb +21 -0
  64. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_author/composition_author_author_ms_subelements.rb +21 -0
  65. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_author/composition_author_author_resource_type_is_valid.rb +21 -0
  66. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_author.rb +28 -0
  67. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_custodian/composition_custodian_custodian_ms_elements.rb +21 -0
  68. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_custodian/composition_custodian_custodian_ms_identifier_slices.rb +21 -0
  69. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_custodian/composition_custodian_custodian_ms_subelements.rb +21 -0
  70. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_custodian.rb +26 -0
  71. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_mandatory_sections/composition_mandatory_sections_mandatory_sections_entry_profiles.rb +21 -0
  72. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_mandatory_sections/composition_mandatory_sections_sections_shall_populated.rb +21 -0
  73. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_mandatory_sections.rb +20 -0
  74. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_mandatory_ms_populated.rb +21 -0
  75. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_ms_subelements_populated.rb +22 -0
  76. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_optional_ms_populated.rb +22 -0
  77. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_optional_ms_slices.rb +22 -0
  78. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_must_support_conformance.rb +28 -0
  79. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_optional_sections/composition_optional_sections_optional_sections_entry_profiles.rb +22 -0
  80. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_optional_sections/composition_optional_sections_sections_may_populated.rb +24 -0
  81. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_optional_sections.rb +20 -0
  82. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_recommended_sections/composition_recommended_sections_recommended_sections_entry_profiles.rb +21 -0
  83. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_recommended_sections/composition_recommended_sections_sections_should_populated.rb +22 -0
  84. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_recommended_sections.rb +20 -0
  85. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_subject/composition_subject_subject_ms_elements.rb +21 -0
  86. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_subject/composition_subject_subject_ms_identifier_slices.rb +21 -0
  87. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_subject/composition_subject_subject_ms_subelements_populated.rb +21 -0
  88. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_subject/composition_subject_subject_resource_type_is_valid.rb +21 -0
  89. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_subject.rb +28 -0
  90. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_undefined_sections/composition_undefined_sections_sections_may_undefined.rb +24 -0
  91. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_undefined_sections.rb +18 -0
  92. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/bundle_validation/suite_generate_au_ps_using_ips_summary_validation_tests_bundle_validation_bundle_valid.rb +21 -0
  93. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/bundle_validation/suite_generate_au_ps_using_ips_summary_validation_tests_bundle_validation_bundle_valid_ips.rb +21 -0
  94. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/bundle_validation.rb +20 -0
  95. data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/generate_au_ps_using_ips_summary_validation_tests.rb +56 -0
  96. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_bundle_must_support_conformance/bundle_must_support_conformance_bundle_must_support_populated.rb +21 -0
  97. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_bundle_must_support_conformance.rb +16 -0
  98. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_attester/composition_attester_attester_party_ms_elements.rb +21 -0
  99. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_attester/composition_attester_attester_party_ms_identifier_slices.rb +21 -0
  100. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_attester/composition_attester_attester_party_ms_subelements.rb +21 -0
  101. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_attester.rb +26 -0
  102. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_author/composition_author_author_ms_identifier_slices.rb +21 -0
  103. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_author/composition_author_author_resource_type_is_valid.rb +21 -0
  104. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_author/suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_author_author_ms_elements.rb +21 -0
  105. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_author/suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_author_author_ms_subelements.rb +21 -0
  106. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_author.rb +28 -0
  107. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_custodian/composition_custodian_custodian_ms_identifier_slices.rb +21 -0
  108. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_custodian/composition_custodian_custodian_ms_subelements.rb +21 -0
  109. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_custodian/suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_custodian_custodian_ms_elements.rb +21 -0
  110. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_custodian.rb +26 -0
  111. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_mandatory_sections/composition_mandatory_sections_mandatory_sections_entry_profiles.rb +21 -0
  112. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_mandatory_sections/composition_mandatory_sections_sections_shall_populated.rb +21 -0
  113. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_mandatory_sections.rb +20 -0
  114. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_mandatory_ms_populated.rb +21 -0
  115. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_ms_subelements_populated.rb +22 -0
  116. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_optional_ms_populated.rb +22 -0
  117. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_must_support_conformance/composition_must_support_conformance_composition_optional_ms_slices.rb +22 -0
  118. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_must_support_conformance.rb +28 -0
  119. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_optional_sections/composition_optional_sections_optional_sections_entry_profiles.rb +22 -0
  120. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_optional_sections/composition_optional_sections_sections_may_populated.rb +24 -0
  121. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_optional_sections.rb +20 -0
  122. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_recommended_sections/composition_recommended_sections_recommended_sections_entry_profiles.rb +21 -0
  123. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_recommended_sections/composition_recommended_sections_sections_should_populated.rb +22 -0
  124. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_recommended_sections.rb +20 -0
  125. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_subject/composition_subject_subject_ms_identifier_slices.rb +21 -0
  126. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_subject/composition_subject_subject_ms_subelements_populated.rb +21 -0
  127. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_subject/composition_subject_subject_resource_type_is_valid.rb +21 -0
  128. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_subject/suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_subject_subject_ms_elements.rb +21 -0
  129. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_subject.rb +28 -0
  130. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_undefined_sections/composition_undefined_sections_sections_may_undefined.rb +24 -0
  131. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_undefined_sections.rb +18 -0
  132. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/bundle_validation/suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid.rb +21 -0
  133. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/bundle_validation/suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid_ips.rb +21 -0
  134. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/bundle_validation.rb +20 -0
  135. data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/retrieve_au_ps_bundle_validation_tests.rb +56 -0
  136. data/lib/au_ps_inferno/utils/attester/basic_test_attester_identifier_slices.rb +74 -0
  137. data/lib/au_ps_inferno/utils/attester/basic_test_attester_message_helpers.rb +16 -0
  138. data/lib/au_ps_inferno/utils/attester/basic_test_attester_module.rb +14 -0
  139. data/lib/au_ps_inferno/utils/attester/basic_test_attester_resource.rb +54 -0
  140. data/lib/au_ps_inferno/utils/author/basic_test_author_module.rb +12 -0
  141. data/lib/au_ps_inferno/utils/author/basic_test_author_resource.rb +32 -0
  142. data/lib/au_ps_inferno/utils/author/basic_test_author_tests.rb +24 -0
  143. data/lib/au_ps_inferno/utils/basic_test/bundle_module.rb +87 -0
  144. data/lib/au_ps_inferno/utils/basic_test/capability_operations_module.rb +37 -0
  145. data/lib/au_ps_inferno/utils/basic_test/composition_elements_and_slices_module.rb +98 -0
  146. data/lib/au_ps_inferno/utils/basic_test/composition_section_check_resources_ms_elements_module.rb +197 -0
  147. data/lib/au_ps_inferno/utils/basic_test/composition_section_read_issues_helpers_module.rb +66 -0
  148. data/lib/au_ps_inferno/utils/basic_test/composition_section_read_module.rb +127 -0
  149. data/lib/au_ps_inferno/utils/basic_test/composition_subelements_module.rb +84 -0
  150. data/lib/au_ps_inferno/utils/basic_test/ms_elements_populated_helpers_module.rb +38 -0
  151. data/lib/au_ps_inferno/utils/basic_test/ms_elements_populated_module.rb +71 -0
  152. data/lib/au_ps_inferno/utils/basic_test/ms_identifier_slices_module.rb +61 -0
  153. data/lib/au_ps_inferno/utils/basic_test/ms_sub_elements_populated_module.rb +128 -0
  154. data/lib/au_ps_inferno/utils/basic_test/paths_module.rb +26 -0
  155. data/lib/au_ps_inferno/utils/basic_test/resolve_path_debug_module.rb +45 -0
  156. data/lib/au_ps_inferno/utils/basic_test/resolve_resource_type_module.rb +52 -0
  157. data/lib/au_ps_inferno/utils/basic_test/resource_helpers_module.rb +129 -0
  158. data/lib/au_ps_inferno/utils/basic_test/scratch_bundle_entries_module.rb +30 -0
  159. data/lib/au_ps_inferno/utils/basic_test/section_bundle_validation_module.rb +70 -0
  160. data/lib/au_ps_inferno/utils/basic_test_class.rb +56 -0
  161. data/lib/au_ps_inferno/utils/basic_test_contants_module.rb +32 -0
  162. data/lib/au_ps_inferno/utils/basic_test_with_url.rb +8 -0
  163. data/lib/au_ps_inferno/utils/basic_validate_bundle_test.rb +43 -0
  164. data/lib/au_ps_inferno/utils/bundle_decorator.rb +81 -0
  165. data/lib/au_ps_inferno/utils/bundle_entry_decorator.rb +19 -0
  166. data/lib/au_ps_inferno/utils/bundle_is_valid_class.rb +31 -0
  167. data/lib/au_ps_inferno/utils/capability_statement_decorator.rb +20 -0
  168. data/lib/au_ps_inferno/utils/composition_decorator.rb +56 -0
  169. data/lib/au_ps_inferno/utils/composition_utils/boolean_and_stats.rb +28 -0
  170. data/lib/au_ps_inferno/utils/composition_utils.rb +29 -0
  171. data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_identifier_slices.rb +47 -0
  172. data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_module.rb +14 -0
  173. data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_resource.rb +32 -0
  174. data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_tests.rb +19 -0
  175. data/lib/au_ps_inferno/utils/inferno_suite_generator_compat.rb +7 -0
  176. data/lib/au_ps_inferno/utils/ips_bundle_is_valid_class.rb +15 -0
  177. data/lib/au_ps_inferno/utils/ips_retrieve_bundle_test_class.rb +17 -0
  178. data/lib/au_ps_inferno/utils/ips_summary_valid_bundle_class.rb +15 -0
  179. data/lib/au_ps_inferno/utils/metadata_manager.rb +58 -0
  180. data/lib/au_ps_inferno/utils/retrieve_bundle_test_class.rb +81 -0
  181. data/lib/au_ps_inferno/utils/rich_message_class.rb +23 -0
  182. data/lib/au_ps_inferno/utils/rich_validation_message.rb +42 -0
  183. data/lib/au_ps_inferno/utils/section_decorator.rb +23 -0
  184. data/lib/au_ps_inferno/utils/section_names_mapping.rb +31 -0
  185. data/lib/au_ps_inferno/utils/section_test_class.rb +18 -0
  186. data/lib/au_ps_inferno/utils/section_test_module.rb +16 -0
  187. data/lib/au_ps_inferno/utils/structure_definition_decorator.rb +28 -0
  188. data/lib/au_ps_inferno/utils/subject/basic_test_subject_module.rb +12 -0
  189. data/lib/au_ps_inferno/utils/subject/basic_test_subject_patient_ms_other_tests.rb +15 -0
  190. data/lib/au_ps_inferno/utils/subject/basic_test_subject_resource.rb +21 -0
  191. data/lib/au_ps_inferno/utils/summary_valid_bundle_class.rb +84 -0
  192. data/lib/au_ps_inferno/utils/validator_helpers.rb +92 -0
  193. data/lib/au_ps_inferno/version.rb +6 -0
  194. data/lib/au_ps_inferno.rb +3 -0
  195. metadata +310 -0
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../utils/basic_test_class'
4
+ require_relative '../../../utils/metadata_manager'
5
+
6
+ require_relative '../../../utils/retrieve_bundle_test_class'
7
+
8
+ require_relative '../../../utils/ips_retrieve_bundle_test_class'
9
+
10
+ module AUPSTestKit
11
+ # Automatically generated primitive test for Retrieved Bundle is valid against AU PS Bundle profile
12
+ class AUPSSuiteRetrieveAuPsBundleValidationTestsBundleValidationRetrievedBundleIsValidAgainstAuPsBundleProfile < RetrieveBundleTestClass
13
+ title 'Retrieved Bundle is valid against AU PS Bundle profile'
14
+ description 'Verifies that a bundle retrieved from the server conforms to the AU PS Bundle profile.'
15
+ id :suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid
16
+
17
+ def metadata_manager
18
+ @metadata_manager ||= MetadataManager.new(File.expand_path('../../../metadata.yaml', __dir__))
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../utils/basic_test_class'
4
+ require_relative '../../../utils/metadata_manager'
5
+
6
+ require_relative '../../../utils/retrieve_bundle_test_class'
7
+
8
+ require_relative '../../../utils/ips_retrieve_bundle_test_class'
9
+
10
+ module AUPSTestKit
11
+ # Automatically generated primitive test for Retrieved Bundle is valid against IPS Bundle profile
12
+ class AUPSSuiteRetrieveAuPsBundleValidationTestsBundleValidationRetrievedBundleIsValidAgainstIpsBundleProfile < IpsRetrieveBundleTestClass
13
+ title 'Retrieved Bundle is valid against IPS Bundle profile'
14
+ description 'Verifies that a bundle retrieved from the server conforms to the IPS Bundle profile.'
15
+ id :suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid_ips
16
+
17
+ def metadata_manager
18
+ @metadata_manager ||= MetadataManager.new(File.expand_path('../../../metadata.yaml', __dir__))
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'bundle_validation/suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid'
4
+
5
+ require_relative 'bundle_validation/suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid_ips'
6
+
7
+ module AUPSTestKit
8
+ # Automatically generated primitive group for Bundle Validation
9
+ class AUPSSuiteRetrieveAuPsBundleValidationTestsBundleValidation < Inferno::TestGroup
10
+ title 'Bundle Validation'
11
+ description 'Validates that the bundle conforms to the Bundle profiles.'
12
+ id :suite_retrieve_au_ps_bundle_validation_tests_bundle_validation
13
+
14
+ run_as_group
15
+
16
+ test from: :suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid
17
+
18
+ test from: :suite_retrieve_au_ps_bundle_validation_tests_bundle_validation_bundle_valid_ips
19
+ end
20
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'bundle_validation'
4
+
5
+ require_relative 'au_ps_bundle_must_support_conformance'
6
+
7
+ require_relative 'au_ps_composition_must_support_conformance'
8
+
9
+ require_relative 'au_ps_composition_mandatory_sections'
10
+
11
+ require_relative 'au_ps_composition_recommended_sections'
12
+
13
+ require_relative 'au_ps_composition_optional_sections'
14
+
15
+ require_relative 'au_ps_composition_undefined_sections'
16
+
17
+ require_relative 'au_ps_composition_subject'
18
+
19
+ require_relative 'au_ps_composition_author'
20
+
21
+ require_relative 'au_ps_composition_custodian'
22
+
23
+ require_relative 'au_ps_composition_attester'
24
+
25
+ module AUPSTestKit
26
+ # Automatically generated high order group for Retrieve AU PS Bundle validation tests
27
+ class AUPSSuiteRetrieveAuPsBundleValidationTests < Inferno::TestGroup
28
+ title 'Retrieve AU PS Bundle validation tests'
29
+ description 'Retrieve document Bundle using Bundle read interaction or other HTTP GET request and verify response is valid AU PS Bundle'
30
+ id :suite_retrieve_au_ps_bundle_validation_tests
31
+
32
+ run_as_group
33
+
34
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_bundle_validation
35
+
36
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_bundle_must_support_conformance
37
+
38
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_must_support_conformance
39
+
40
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_mandatory_sections
41
+
42
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_recommended_sections
43
+
44
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_optional_sections
45
+
46
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_undefined_sections
47
+
48
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_subject
49
+
50
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_author
51
+
52
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_custodian
53
+
54
+ group from: :suite_retrieve_au_ps_bundle_validation_tests_au_ps_composition_attester
55
+ end
56
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../basic_test_contants_module'
4
+
5
+ module AUPSTestKit
6
+ # Must Support identifier slice validation for Composition attester.party reference.
7
+ module BasicTestAttesterIdentifierSlices
8
+ include BasicTestConstants
9
+
10
+ def validate_attester_party_ms_identifier_slices(resource, slices, resource_type_str, profile_str)
11
+ return unless resource.present? && slices.present?
12
+
13
+ identifiers = identifiers_from_resource(resource) || []
14
+ slice_results = attester_party_build_slice_results(slices, identifiers)
15
+ header = attester_party_referenced_type_profile_header(resource_type_str, profile_str)
16
+ lines = slice_results.map { |r| attester_party_format_identifier_slice_line(r) }
17
+ message_type = slice_results.all? { |r| r[:identifier].present? } ? 'info' : 'warning'
18
+ add_message(message_type, attester_party_identifier_slices_full_message(header, lines))
19
+ end
20
+
21
+ def test_composition_attester_party_ms_identifier_slices
22
+ check_bundle_exists_in_scratch
23
+ resource = attester_party_resource
24
+ skip_if resource.blank?, 'Attester or attester.party is not populated'
25
+
26
+ resource_type_str = resource_type(resource)
27
+ slices = AUTHOR_MS_IDENTIFIER_SLICES_BY_TYPE[resource_type_str] || []
28
+ skip_if slices.blank?, 'Referenced attester.party resource type has no Must Support identifier slices'
29
+
30
+ rtype_str, profile_str = author_resource_type_and_profiles(resource)
31
+ validate_attester_party_ms_identifier_slices(resource, slices, rtype_str, profile_str)
32
+ end
33
+
34
+ private
35
+
36
+ def attester_party_build_slice_results(slices, identifiers)
37
+ slices.map do |slice|
38
+ ident = find_identifier_by_system(identifiers, slice[:system])
39
+ { slice: slice, identifier: ident }
40
+ end
41
+ end
42
+
43
+ def attester_party_format_identifier_slice_line(result)
44
+ if result[:identifier].present?
45
+ type_str = identifier_type_display(result[:identifier])
46
+ "✅ Populated: **#{result[:slice][:name]}** — system: #{result[:slice][:system]}#{type_str}"
47
+ else
48
+ "⚠️ Missing: **#{result[:slice][:name]}**"
49
+ end
50
+ end
51
+
52
+ def attester_party_identifier_slices_full_message(header, lines)
53
+ attester_party_join_message_sections(
54
+ attester_party_identifier_slices_message_parts(header, lines)
55
+ )
56
+ end
57
+
58
+ def attester_party_identifier_slices_message_parts(header, lines)
59
+ [
60
+ 'Must support identifier slices correctly populated', '',
61
+ header, '',
62
+ attester_party_identifier_slices_heading, '',
63
+ lines.join("\n\n")
64
+ ]
65
+ end
66
+
67
+ def attester_party_identifier_slices_heading
68
+ [
69
+ '## List of Must Support identifier slices populated or missing',
70
+ '(type and system when populated)'
71
+ ].join(' ')
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AUPSTestKit
4
+ # Shared message formatting helpers for attester.party Must Support validation modules.
5
+ module BasicTestAttesterMessageHelpers
6
+ private
7
+
8
+ def attester_party_join_message_sections(parts)
9
+ parts.join("\n\n")
10
+ end
11
+
12
+ def attester_party_referenced_type_profile_header(resource_type_str, profile_str)
13
+ "**Referenced attester.party**: #{resource_type_str}#{" — #{profile_str}" if profile_str.present?}"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'basic_test_attester_message_helpers'
4
+ require_relative 'basic_test_attester_resource'
5
+ require_relative 'basic_test_attester_identifier_slices'
6
+
7
+ module AUPSTestKit
8
+ # Composes attester.party Must Support validation helpers for BasicTest.
9
+ module BasicTestAttesterModule
10
+ include BasicTestAttesterMessageHelpers
11
+ include BasicTestAttesterResource
12
+ include BasicTestAttesterIdentifierSlices
13
+ end
14
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../bundle_decorator'
4
+
5
+ module AUPSTestKit
6
+ # Resolves Composition attester.party reference from the scratch bundle and loads attester metadata.
7
+ module BasicTestAttesterResource
8
+ def attester_party_resource
9
+ return nil unless scratch_bundle.present?
10
+
11
+ ref_str = attester_party_ref_from_bundle(BundleDecorator.new(scratch_bundle))
12
+ return nil if ref_str.blank?
13
+
14
+ bundle_entity_resource_from_scratch(ref_str)
15
+ end
16
+
17
+ private
18
+
19
+ def attester_composition_attesters(composition_resource)
20
+ composition_resource.respond_to?(:attester) ? composition_resource.attester : nil
21
+ end
22
+
23
+ def attester_party_for_attester(attester)
24
+ attester.respond_to?(:party) ? attester.party : attester['party']
25
+ end
26
+
27
+ def find_first_attester_with_party(attesters)
28
+ attesters.find { |a| attester_party_for_attester(a).present? }
29
+ end
30
+
31
+ def attester_party_reference_from_attester(attester_with_party)
32
+ party_ref = attester_party_for_attester(attester_with_party)
33
+ return nil if party_ref.blank?
34
+
35
+ party_ref.respond_to?(:reference) ? party_ref.reference : party_ref['reference']
36
+ end
37
+
38
+ def attester_party_ref_from_bundle(bundle_resource)
39
+ composition_resource = bundle_resource.composition_resource
40
+ return nil unless composition_resource.present?
41
+
42
+ attesters = attester_composition_attesters(composition_resource)
43
+ return nil if attesters.blank?
44
+
45
+ attester_with_party = find_first_attester_with_party(attesters)
46
+ return nil unless attester_with_party.present?
47
+
48
+ ref_str = attester_party_reference_from_attester(attester_with_party)
49
+ return nil if ref_str.blank?
50
+
51
+ ref_str
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'basic_test_author_resource'
4
+ require_relative 'basic_test_author_tests'
5
+
6
+ module AUPSTestKit
7
+ # Composes Composition author Must Support helpers for BasicTest.
8
+ module BasicTestAuthorModule
9
+ include BasicTestAuthorResource
10
+ include BasicTestAuthorTests
11
+ end
12
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../bundle_decorator'
4
+
5
+ module AUPSTestKit
6
+ # Resolves Composition.author reference from the scratch bundle.
7
+ module BasicTestAuthorResource
8
+ def author_resource
9
+ return nil unless scratch_bundle.present?
10
+
11
+ bundle_resource = BundleDecorator.new(scratch_bundle)
12
+ composition_resource = bundle_resource.composition_resource
13
+ return nil unless composition_resource.present?
14
+
15
+ author_ref = first_composition_author_reference(composition_resource)
16
+ return nil unless author_ref.present?
17
+
18
+ ref_str = author_ref.respond_to?(:reference) ? author_ref.reference : author_ref['reference']
19
+ return nil if ref_str.blank?
20
+
21
+ bundle_entity_resource_from_scratch(ref_str)
22
+ end
23
+
24
+ private
25
+
26
+ def first_composition_author_reference(composition_resource)
27
+ return nil unless composition_resource.respond_to?(:author) && composition_resource.author.present?
28
+
29
+ composition_resource.author.first
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../basic_test_contants_module'
4
+
5
+ module AUPSTestKit
6
+ # Inferno tests for Composition.author Must Support.
7
+ module BasicTestAuthorTests
8
+ include BasicTestConstants
9
+
10
+ def test_composition_author_ms_identifier_slices
11
+ guard_populated_resource('author')
12
+
13
+ resource = author_resource
14
+ author_and_device_resource?('author', resource)
15
+ resource_type_str = resource_type(resource)
16
+ slices = AUTHOR_MS_IDENTIFIER_SLICES_BY_TYPE[resource_type_str] || []
17
+ omit_if slices.blank?,
18
+ 'No Must Support identifier slices are defined for the referenced author type (e.g. AU PS RelatedPerson)'
19
+
20
+ # rtype_str, profile_str = author_resource_type_and_profiles(resource)
21
+ validate_ms_identifier_slices_in_resource(resource, slices)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../version'
4
+
5
+ module AUPSTestKit
6
+ # Bundle-level checks, mandatory MS list info, and IPS bundle profile validation.
7
+ module BasicTestBundleModule
8
+ def bundle_mandatory_ms_elements_info
9
+ check_bundle_exists_in_scratch
10
+ passed = [identifier_info?, type_info?, timestamp_info?, all_entries_have_full_url_info?].all?
11
+ message_type = passed ? 'info' : 'error'
12
+ add_message(message_type,
13
+ "**List mandatory Must Support elements populated and missing**:\n\n#{mandatory_ms_elements_info}")
14
+ info "**List any entry resources by type (and meta.profile if exists)**:\n\n#{entry_resources_info}"
15
+ assert passed, 'Mandatory Must Support elements are not populated'
16
+ end
17
+
18
+ def mandatory_ms_elements_info
19
+ [
20
+ "**identifier**: #{boolean_to_existent_string(identifier_info?)}",
21
+ "**type**: #{boolean_to_existent_string(type_info?)}",
22
+ "**timestamp**: #{boolean_to_existent_string(timestamp_info?)}",
23
+ "**All entry exists fullUrl**: #{boolean_to_existent_string(all_entries_have_full_url_info?)}"
24
+ ].join("\n\n")
25
+ end
26
+
27
+ def skip_validation?
28
+ false
29
+ end
30
+
31
+ def validate_au_ps_bundle
32
+ validate_bundle_wrapper("http://hl7.org.au/fhir/ps/StructureDefinition/au-ps-bundle|#{AUPSTestKit::IG_VERSION}")
33
+ end
34
+
35
+ def validate_ips_bundle
36
+ validate_bundle_wrapper('http://hl7.org/fhir/uv/ips/StructureDefinition/Bundle-uv-ips')
37
+ end
38
+
39
+ private
40
+
41
+ def validate_bundle_wrapper(profile_with_version)
42
+ check_bundle_exists_in_scratch
43
+ validate_bundle(
44
+ scratch_bundle,
45
+ profile_with_version
46
+ )
47
+ end
48
+
49
+ def validate_bundle(resource, profile_with_version)
50
+ return if skip_validation?
51
+
52
+ show_validator_version
53
+
54
+ resource_is_valid?(resource: resource, profile_url: profile_with_version)
55
+ errors_found = messages.any? { |message| message[:type] == 'error' }
56
+ add_validation_errors_to_scratch if errors_found
57
+ assert !errors_found, "Resource does not conform to the profile #{profile_with_version}"
58
+ end
59
+
60
+ def error_messages
61
+ messages.select { |message| message[:type] == 'error' }
62
+ end
63
+
64
+ def add_validation_errors_to_scratch
65
+ existing_validation_errors = scratch[:validation_errors] || []
66
+ error_messages.each do |message|
67
+ existing_validation_errors << build_scratch_validation_error(message)
68
+ end
69
+ scratch[:validation_errors] = existing_validation_errors.compact.uniq
70
+ end
71
+
72
+ def build_scratch_validation_error(message)
73
+ match = message[:message].match(/Bundle.entry\[(\d+)\]/)
74
+ return nil if match.nil?
75
+
76
+ filtered_entry = scratch_bundle.entry[match[1].to_i]
77
+ resource = filtered_entry.resource
78
+
79
+ {
80
+ full_url: filtered_entry.fullUrl,
81
+ id: resource.id,
82
+ resource_type: resource.resourceType,
83
+ error_message: message[:message]
84
+ }
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AUPSTestKit
4
+ # CapabilityStatement operation discovery (summary, docref, etc.).
5
+ module BasicTestCapabilityOperationsModule
6
+ def operation_defined?(operations, op_def_url, names_arr, scratch_key)
7
+ operation_defined = operations.any? do |operation|
8
+ operation.definition == op_def_url || names_arr.include?(operation.name.downcase)
9
+ end
10
+
11
+ message_base = 'Server CapabilityStatement declares support for operation with operation definition'
12
+
13
+ info "#{message_base} #{op_def_url}: #{boolean_to_existent_string(operation_defined)}"
14
+
15
+ scratch[scratch_key] = operation_defined
16
+ end
17
+
18
+ def operations
19
+ fhir_get_capability_statement
20
+ scratch[:capability_statement] = resource
21
+ resource.rest&.flat_map do |rest|
22
+ select_op(rest)
23
+ end&.compact
24
+ end
25
+
26
+ def select_op(rest)
27
+ rest.resource
28
+ &.select { |res| res.respond_to?(:operation) }
29
+ &.flat_map(&:operation)
30
+ end
31
+
32
+ def summary_op_defined?
33
+ operation_defined?(operations, 'http://hl7.org/fhir/uv/ips/OperationDefinition/summary',
34
+ %w[summary patient-summary], :summary_op_defined)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AUPSTestKit
4
+ # Composition Must Support elements and optional slices (e.g. event:careProvisioningEvent).
5
+ module BasicTestCompositionElementsAndSlicesModule
6
+ private
7
+
8
+ def validate_populated_elements_in_composition(elements_array, required: true)
9
+ composition_resource = composition_resource_from_scratch
10
+ return false unless composition_resource.present?
11
+
12
+ result = all_paths_are_populated?(composition_resource, elements_array)
13
+ msg_type = composition_elements_message_type(result, required)
14
+ add_message(msg_type,
15
+ populated_paths_info(composition_resource, elements_array,
16
+ mandatory_array: required ? elements_array : []))
17
+ assert_composition_elements_if_required(result, required)
18
+ end
19
+
20
+ def composition_elements_message_type(result, required)
21
+ return 'info' if result
22
+
23
+ required ? 'error' : 'warning'
24
+ end
25
+
26
+ def assert_composition_elements_if_required(result, required)
27
+ return unless required
28
+
29
+ assert result,
30
+ 'Some of the elements are not populated. See the list of populated elements in messages tab.'
31
+ end
32
+
33
+ def validate_populated_slices_in_composition(slices_array)
34
+ return false unless scratch_bundle.present?
35
+
36
+ composition_resource = BundleDecorator.new(scratch_bundle).composition_resource
37
+ return false unless composition_resource.present?
38
+
39
+ check_event_slice_presence(composition_resource, slices_array)
40
+ end
41
+
42
+ def check_event_slice_presence(composition_resource, slices_array)
43
+ event = composition_resource.event_by_code('PCPR')
44
+
45
+ if event.nil?
46
+ add_message('warning', 'event:careProvisioningEvent slice is not present')
47
+ assert true
48
+ else
49
+ slices_array.all? do |slice|
50
+ composition_slice_validation_passes?(composition_resource, slice, event)
51
+ end
52
+ end
53
+ end
54
+
55
+ def composition_slice_validation_passes?(composition_resource, slice, event)
56
+ paths = composition_slice_element_paths(slice)
57
+ message_data = populated_paths_info(composition_resource, paths[:combined], mandatory_array: paths[:required])
58
+ full_data = composition_slice_full_message_data(message_data)
59
+ return false unless composition_slice_required_paths_ok?(composition_resource, paths, full_data)
60
+
61
+ composition_slice_optional_and_event_outcome?(composition_resource, paths, full_data, message_data, event)
62
+ end
63
+
64
+ def composition_slice_full_message_data(message_data)
65
+ "#{message_data}\n\nSlice: **event:careProvisioningEvent**"
66
+ end
67
+
68
+ def composition_slice_required_paths_ok?(composition_resource, paths, full_data)
69
+ return true if all_paths_are_populated?(composition_resource, paths[:required])
70
+
71
+ add_message('warning', full_data)
72
+ false
73
+ end
74
+
75
+ def composition_slice_optional_and_event_outcome?(composition_resource, paths, full_data, message_data, event)
76
+ unless all_paths_are_populated?(composition_resource, paths[:optional])
77
+ add_message('warning', full_data)
78
+ return true
79
+ end
80
+ return composition_slice_warn_if_event_nil?(message_data) if event.nil?
81
+
82
+ add_message('info', full_data)
83
+ true
84
+ end
85
+
86
+ def composition_slice_warn_if_event_nil?(message_data)
87
+ add_message('warning', message_data)
88
+ true
89
+ end
90
+
91
+ def composition_slice_element_paths(slice)
92
+ base = slice[:path]
93
+ required = slice[:mandatory_ms_sub_elements].map { |el| "#{base}.#{el}" }
94
+ optional = slice[:optional_ms_sub_elements].map { |el| "#{base}.#{el}" }
95
+ { required: required, optional: optional, combined: required + optional }
96
+ end
97
+ end
98
+ end