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.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/lib/au_ps_inferno/generator/constants.rb +61 -0
- data/lib/au_ps_inferno/generator/generator.rb +76 -0
- data/lib/au_ps_inferno/generator/generator_group_based_metadata_module.rb +113 -0
- data/lib/au_ps_inferno/generator/ig_resources_extractor.rb +149 -0
- data/lib/au_ps_inferno/generator/metadata_manager.rb +608 -0
- data/lib/au_ps_inferno/generator/naming.rb +52 -0
- data/lib/au_ps_inferno/generator/sections_validation_group_generator.rb +182 -0
- data/lib/au_ps_inferno/generator/test_file_generator.rb +77 -0
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_bundle_instance.rb +56 -0
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_bundle_must_support_conformance.rb +16 -0
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_attester.rb +26 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_author.rb +28 -0
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_custodian.rb +26 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_mandatory_sections.rb +20 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_must_support_conformance.rb +28 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_optional_sections.rb +20 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_recommended_sections.rb +20 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_subject.rb +28 -0
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/au_ps_composition_undefined_sections.rb +18 -0
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/bundle_validation/suite_au_ps_bundle_instance_bundle_validation_bundle_valid.rb +21 -0
- 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
- data/lib/au_ps_inferno/suite/au_ps_bundle_instance/bundle_validation.rb +20 -0
- data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_cs_is_valid_test.rb +21 -0
- data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_cs_supports_au_ps_profiles.rb +40 -0
- data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_cs_supports_ips_recommended_ops.rb +19 -0
- data/lib/au_ps_inferno/suite/au_ps_retrieve_cs_group/au_ps_retrieve_cs_group.rb +47 -0
- data/lib/au_ps_inferno/suite/au_ps_v100.rb +39 -0
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_bundle_must_support_conformance.rb +16 -0
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_attester.rb +26 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_author.rb +28 -0
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_custodian.rb +26 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_mandatory_sections.rb +20 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_must_support_conformance.rb +28 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_optional_sections.rb +20 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_recommended_sections.rb +20 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_subject.rb +28 -0
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/au_ps_composition_undefined_sections.rb +18 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/generate_au_ps_using_ips_summary_validation_tests/bundle_validation.rb +20 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_bundle_must_support_conformance.rb +16 -0
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_attester.rb +26 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_author.rb +28 -0
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_custodian/composition_custodian_custodian_ms_subelements.rb +21 -0
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_custodian.rb +26 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_mandatory_sections.rb +20 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_must_support_conformance.rb +28 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_optional_sections.rb +20 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_recommended_sections.rb +20 -0
- 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
- 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
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_subject.rb +28 -0
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/au_ps_composition_undefined_sections.rb +18 -0
- 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
- 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
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/bundle_validation.rb +20 -0
- data/lib/au_ps_inferno/suite/retrieve_au_ps_bundle_validation_tests/retrieve_au_ps_bundle_validation_tests.rb +56 -0
- data/lib/au_ps_inferno/utils/attester/basic_test_attester_identifier_slices.rb +74 -0
- data/lib/au_ps_inferno/utils/attester/basic_test_attester_message_helpers.rb +16 -0
- data/lib/au_ps_inferno/utils/attester/basic_test_attester_module.rb +14 -0
- data/lib/au_ps_inferno/utils/attester/basic_test_attester_resource.rb +54 -0
- data/lib/au_ps_inferno/utils/author/basic_test_author_module.rb +12 -0
- data/lib/au_ps_inferno/utils/author/basic_test_author_resource.rb +32 -0
- data/lib/au_ps_inferno/utils/author/basic_test_author_tests.rb +24 -0
- data/lib/au_ps_inferno/utils/basic_test/bundle_module.rb +87 -0
- data/lib/au_ps_inferno/utils/basic_test/capability_operations_module.rb +37 -0
- data/lib/au_ps_inferno/utils/basic_test/composition_elements_and_slices_module.rb +98 -0
- data/lib/au_ps_inferno/utils/basic_test/composition_section_check_resources_ms_elements_module.rb +197 -0
- data/lib/au_ps_inferno/utils/basic_test/composition_section_read_issues_helpers_module.rb +66 -0
- data/lib/au_ps_inferno/utils/basic_test/composition_section_read_module.rb +127 -0
- data/lib/au_ps_inferno/utils/basic_test/composition_subelements_module.rb +84 -0
- data/lib/au_ps_inferno/utils/basic_test/ms_elements_populated_helpers_module.rb +38 -0
- data/lib/au_ps_inferno/utils/basic_test/ms_elements_populated_module.rb +71 -0
- data/lib/au_ps_inferno/utils/basic_test/ms_identifier_slices_module.rb +61 -0
- data/lib/au_ps_inferno/utils/basic_test/ms_sub_elements_populated_module.rb +128 -0
- data/lib/au_ps_inferno/utils/basic_test/paths_module.rb +26 -0
- data/lib/au_ps_inferno/utils/basic_test/resolve_path_debug_module.rb +45 -0
- data/lib/au_ps_inferno/utils/basic_test/resolve_resource_type_module.rb +52 -0
- data/lib/au_ps_inferno/utils/basic_test/resource_helpers_module.rb +129 -0
- data/lib/au_ps_inferno/utils/basic_test/scratch_bundle_entries_module.rb +30 -0
- data/lib/au_ps_inferno/utils/basic_test/section_bundle_validation_module.rb +70 -0
- data/lib/au_ps_inferno/utils/basic_test_class.rb +56 -0
- data/lib/au_ps_inferno/utils/basic_test_contants_module.rb +32 -0
- data/lib/au_ps_inferno/utils/basic_test_with_url.rb +8 -0
- data/lib/au_ps_inferno/utils/basic_validate_bundle_test.rb +43 -0
- data/lib/au_ps_inferno/utils/bundle_decorator.rb +81 -0
- data/lib/au_ps_inferno/utils/bundle_entry_decorator.rb +19 -0
- data/lib/au_ps_inferno/utils/bundle_is_valid_class.rb +31 -0
- data/lib/au_ps_inferno/utils/capability_statement_decorator.rb +20 -0
- data/lib/au_ps_inferno/utils/composition_decorator.rb +56 -0
- data/lib/au_ps_inferno/utils/composition_utils/boolean_and_stats.rb +28 -0
- data/lib/au_ps_inferno/utils/composition_utils.rb +29 -0
- data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_identifier_slices.rb +47 -0
- data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_module.rb +14 -0
- data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_resource.rb +32 -0
- data/lib/au_ps_inferno/utils/custodian/basic_test_custodian_tests.rb +19 -0
- data/lib/au_ps_inferno/utils/inferno_suite_generator_compat.rb +7 -0
- data/lib/au_ps_inferno/utils/ips_bundle_is_valid_class.rb +15 -0
- data/lib/au_ps_inferno/utils/ips_retrieve_bundle_test_class.rb +17 -0
- data/lib/au_ps_inferno/utils/ips_summary_valid_bundle_class.rb +15 -0
- data/lib/au_ps_inferno/utils/metadata_manager.rb +58 -0
- data/lib/au_ps_inferno/utils/retrieve_bundle_test_class.rb +81 -0
- data/lib/au_ps_inferno/utils/rich_message_class.rb +23 -0
- data/lib/au_ps_inferno/utils/rich_validation_message.rb +42 -0
- data/lib/au_ps_inferno/utils/section_decorator.rb +23 -0
- data/lib/au_ps_inferno/utils/section_names_mapping.rb +31 -0
- data/lib/au_ps_inferno/utils/section_test_class.rb +18 -0
- data/lib/au_ps_inferno/utils/section_test_module.rb +16 -0
- data/lib/au_ps_inferno/utils/structure_definition_decorator.rb +28 -0
- data/lib/au_ps_inferno/utils/subject/basic_test_subject_module.rb +12 -0
- data/lib/au_ps_inferno/utils/subject/basic_test_subject_patient_ms_other_tests.rb +15 -0
- data/lib/au_ps_inferno/utils/subject/basic_test_subject_resource.rb +21 -0
- data/lib/au_ps_inferno/utils/summary_valid_bundle_class.rb +84 -0
- data/lib/au_ps_inferno/utils/validator_helpers.rb +92 -0
- data/lib/au_ps_inferno/version.rb +6 -0
- data/lib/au_ps_inferno.rb +3 -0
- 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
|