davinci_plan_net_test_kit 0.9.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/davinci_plan_net_test_kit/custom_groups/capability_statement/conformance_support_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/capability_statement/fhir_version_test.rb +15 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/capability_statement/instantiate_test.rb +19 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/capability_statement/json_support_test.rb +39 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/capability_statement/profile_support_test.rb +38 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/combination_searches/examples.json +40 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/data_absent_reason_group.rb +59 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/reverse_chain_tests/examples.json +60 -0
- data/lib/davinci_plan_net_test_kit/custom_groups/v1.1.0/capability_statement_group.rb +75 -0
- data/lib/davinci_plan_net_test_kit/date_search_validation.rb +108 -0
- data/lib/davinci_plan_net_test_kit/fhir_resource_navigation.rb +75 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/davinci_plan_net_test_suite.rb +231 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_forward_chain_organization_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_forward_chain_organization_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_forward_chain_organization_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_forward_chain_organization_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_include_endpoint_organization_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_must_support_test.rb +47 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_organization_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_reference_resolution_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/endpoint_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint/metadata.yml +171 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/endpoint_group.rb +168 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_combination_list_specialty_covered_by_network_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_coverage_area_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_endpoint_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_endpoint_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_location_address_city_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_location_address_postalcode_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_location_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_location_address_state_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_location_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_location_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_organization_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_organization_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_organization_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_forward_chain_organization_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_include_healthcare_service_coverage_area_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_include_healthcare_service_endpoint_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_include_healthcare_service_location_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_include_healthcare_service_organization_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_location_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_must_support_test.rb +65 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_name_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_organization_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_reference_resolution_test.rb +45 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_revinclude_organization_affiliation_service_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_revinclude_practitioner_role_service_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_service_category_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_service_type_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_specialty_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/healthcare_service_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service/metadata.yml +1377 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/healthcare_service_group.rb +240 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_administered_by_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_coverage_area_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_forward_chain_administered_by_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_forward_chain_administered_by_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_forward_chain_owned_by_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_forward_chain_owned_by_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_identifier_search_test.rb +44 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_include_insurance_plan_administered_by_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_include_insurance_plan_coverage_area_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_include_insurance_plan_owned_by_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_must_support_test.rb +57 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_name_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_owned_by_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_plan_type_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_reference_resolution_test.rb +48 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_type_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/insurance_plan_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan/metadata.yml +368 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/insurance_plan_group.rb +193 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_address_city_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_address_postalcode_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_address_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_address_state_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_endpoint_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_endpoint_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_organization_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_organization_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_organization_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_organization_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_partof_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_partof_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_forward_chain_partof_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_include_location_endpoint_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_include_location_organization_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_include_location_partof_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_must_support_test.rb +66 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_organization_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_partof_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_reference_resolution_test.rb +44 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_reverse_chain_insurance_plan_coverage_area_owned_by_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_revinclude_healthcare_service_location_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_revinclude_insurance_plan_coverage_area_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_revinclude_organization_affiliation_location_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_revinclude_practitioner_role_location_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_type_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/location_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location/metadata.yml +395 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/location_group.rb +262 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/metadata.yml +5214 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/metadata.yml +304 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_address_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_coverage_area_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_endpoint_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_forward_chain_endpoint_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_forward_chain_partof_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_forward_chain_partof_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_forward_chain_partof_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_include_organization_coverage_area_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_include_organization_endpoint_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_include_organization_partof_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_must_support_test.rb +58 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_name_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_partof_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_reference_resolution_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_reverse_chain_practitioner_role_network_location_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_revinclude_practitioner_role_network_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_type_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network/network_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/network_group.rb +238 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/metadata.yml +1296 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_endpoint_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_endpoint_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_location_address_city_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_location_address_postalcode_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_location_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_location_address_state_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_location_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_location_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_network_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_network_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_participating_organization_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_participating_organization_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_participating_organization_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_participating_organization_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_primary_organization_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_primary_organization_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_primary_organization_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_primary_organization_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_service_location_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_service_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_forward_chain_service_service_category_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_include_organization_affiliation_endpoint_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_include_organization_affiliation_location_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_include_organization_affiliation_network_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_include_organization_affiliation_participating_organization_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_include_organization_affiliation_primary_organization_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_include_organization_affiliation_service_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_location_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_must_support_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_network_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_participating_organization_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_primary_organization_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_reference_resolution_test.rb +47 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_role_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_service_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_specialty_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil/org_affil_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/org_affil_group.rb +241 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/metadata.yml +384 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_address_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_coverage_area_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_endpoint_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_forward_chain_endpoint_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_forward_chain_partof_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_forward_chain_partof_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_forward_chain_partof_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_include_organization_coverage_area_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_include_organization_endpoint_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_include_organization_partof_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_must_support_test.rb +68 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_name_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_partof_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_reference_resolution_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_reverse_chain_insurance_plan_owned_by_coverage_area_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_reverse_chain_org_affil_participating_organization_location_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_reverse_chain_org_affil_participating_organization_network_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_reverse_chain_org_affil_participating_organization_specialty_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_revinclude_endpoint_organization_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_revinclude_healthcare_service_organization_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_revinclude_insurance_plan_administered_by_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_revinclude_insurance_plan_owned_by_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_revinclude_organization_affiliation_participating_organization_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_revinclude_organization_affiliation_primary_organization_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_revinclude_practitioner_role_organization_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_type_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization/organization_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/organization_group.rb +265 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/metadata.yml +253 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_family_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_given_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_must_support_test.rb +57 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_name_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_reference_resolution_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_reverse_chain_practitioner_role_practitioner_location_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_reverse_chain_practitioner_role_practitioner_network_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_reverse_chain_practitioner_role_practitioner_role_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_reverse_chain_practitioner_role_practitioner_specialty_search_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_revinclude_practitioner_role_practitioner_search_test.rb +60 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner/practitioner_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_group.rb +188 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/metadata.yml +1198 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_combination_list_practitioners_with_specialty_and_location_search_test.rb +50 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_endpoint_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_endpoint_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_location_address_city_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_location_address_postalcode_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_location_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_location_address_state_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_location_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_location_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_network_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_network_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_network_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_network_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_organization_address_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_organization_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_organization_partof_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_organization_type_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_practitioner_name_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_service_location_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_service_organization_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_forward_chain_service_service_category_search_test.rb +55 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_id_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_include_practitioner_role_endpoint_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_include_practitioner_role_location_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_include_practitioner_role_network_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_include_practitioner_role_organization_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_include_practitioner_role_practitioner_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_include_practitioner_role_service_search_test.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_lastupdated_search_test.rb +43 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_location_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_must_support_test.rb +70 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_network_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_no_params_search_test.rb +49 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_organization_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_practitioner_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_read_test.rb +26 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_reference_resolution_test.rb +46 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_role_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_service_search_test.rb +41 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_specialty_search_test.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role/practitioner_role_validation_test.rb +40 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/practitioner_role_group.rb +241 -0
- data/lib/davinci_plan_net_test_kit/generated/v1.1.0/resource_list.rb +16 -0
- data/lib/davinci_plan_net_test_kit/generator/combination_search_test_generator.rb +215 -0
- data/lib/davinci_plan_net_test_kit/generator/forward_chain_test_generator.rb +198 -0
- data/lib/davinci_plan_net_test_kit/generator/group_generator.rb +377 -0
- data/lib/davinci_plan_net_test_kit/generator/group_metadata.rb +77 -0
- data/lib/davinci_plan_net_test_kit/generator/group_metadata_extractor.rb +268 -0
- data/lib/davinci_plan_net_test_kit/generator/ig_loader.rb +76 -0
- data/lib/davinci_plan_net_test_kit/generator/ig_metadata.rb +52 -0
- data/lib/davinci_plan_net_test_kit/generator/ig_metadata_extractor.rb +57 -0
- data/lib/davinci_plan_net_test_kit/generator/ig_resources.rb +64 -0
- data/lib/davinci_plan_net_test_kit/generator/include_search_test_generator.rb +205 -0
- data/lib/davinci_plan_net_test_kit/generator/must_support_metadata_extractor.rb +337 -0
- data/lib/davinci_plan_net_test_kit/generator/must_support_metadata_extractor_us_core_3.rb +25 -0
- data/lib/davinci_plan_net_test_kit/generator/must_support_test_generator.rb +116 -0
- data/lib/davinci_plan_net_test_kit/generator/naming.rb +34 -0
- data/lib/davinci_plan_net_test_kit/generator/read_test_generator.rb +86 -0
- data/lib/davinci_plan_net_test_kit/generator/reference_resolution_test_generator.rb +92 -0
- data/lib/davinci_plan_net_test_kit/generator/resource_list_generator.rb +42 -0
- data/lib/davinci_plan_net_test_kit/generator/reverse_chain_search_test_generator.rb +194 -0
- data/lib/davinci_plan_net_test_kit/generator/revinclude_search_test_generator.rb +204 -0
- data/lib/davinci_plan_net_test_kit/generator/search_definition_metadata_extractor.rb +193 -0
- data/lib/davinci_plan_net_test_kit/generator/search_metadata_extractor.rb +74 -0
- data/lib/davinci_plan_net_test_kit/generator/search_no_params_test_generator.rb +124 -0
- data/lib/davinci_plan_net_test_kit/generator/search_test_generator.rb +276 -0
- data/lib/davinci_plan_net_test_kit/generator/special_cases.rb +92 -0
- data/lib/davinci_plan_net_test_kit/generator/suite_generator.rb +93 -0
- data/lib/davinci_plan_net_test_kit/generator/terminology_binding_metadata_extractor.rb +120 -0
- data/lib/davinci_plan_net_test_kit/generator/validation_test_generator.rb +140 -0
- data/lib/davinci_plan_net_test_kit/generator/value_extractor.rb +117 -0
- data/lib/davinci_plan_net_test_kit/generator.rb +143 -0
- data/lib/davinci_plan_net_test_kit/igs/package/SearchParameter-Resource-id.json +1 -0
- data/lib/davinci_plan_net_test_kit/igs/package/SearchParameter-Resource-lastUpdated.json +1 -0
- data/lib/davinci_plan_net_test_kit/igs/package.tgz +0 -0
- data/lib/davinci_plan_net_test_kit/must_support_test.rb +211 -0
- data/lib/davinci_plan_net_test_kit/provenance_validator.rb +37 -0
- data/lib/davinci_plan_net_test_kit/read_test.rb +62 -0
- data/lib/davinci_plan_net_test_kit/reference_resolution_test.rb +179 -0
- data/lib/davinci_plan_net_test_kit/request_logger.rb +46 -0
- data/lib/davinci_plan_net_test_kit/search_test.rb +1252 -0
- data/lib/davinci_plan_net_test_kit/search_test_properties.rb +66 -0
- data/lib/davinci_plan_net_test_kit/validation_test.rb +56 -0
- data/lib/davinci_plan_net_test_kit/version.rb +5 -0
- data/lib/davinci_plan_net_test_kit.rb +1 -0
- metadata +452 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
require_relative 'naming'
|
|
2
|
+
require_relative 'special_cases'
|
|
3
|
+
|
|
4
|
+
module DaVinciPlanNetTestKit
|
|
5
|
+
class Generator
|
|
6
|
+
class ForwardChainSearchTestGenerator
|
|
7
|
+
class << self
|
|
8
|
+
def generate(ig_metadata, base_output_dir)
|
|
9
|
+
ig_metadata.groups
|
|
10
|
+
.reject { |group| SpecialCases.exclude_group? group }
|
|
11
|
+
.each do |group|
|
|
12
|
+
group.searches.each do |search_param|
|
|
13
|
+
# Generate a test for any parameters that specify chaining, one for each chain requirement
|
|
14
|
+
search_def = group.search_definitions[search_param[:names].first.to_sym]
|
|
15
|
+
search_def[:chain]&.each { |chain_param| new(group, search_param, base_output_dir, chain_param[:chain]).generate }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
attr_accessor :group_metadata, :search_metadata, :base_output_dir, :chain_param
|
|
22
|
+
|
|
23
|
+
def initialize(group_metadata, search_metadata, base_output_dir, chain_param)
|
|
24
|
+
self.group_metadata = group_metadata
|
|
25
|
+
self.search_metadata = search_metadata
|
|
26
|
+
self.base_output_dir = base_output_dir
|
|
27
|
+
self.chain_param = chain_param
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def template
|
|
31
|
+
@template ||= File.read(File.join(__dir__, 'templates', 'forward_chain_test.rb.erb'))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def output
|
|
35
|
+
@output ||= ERB.new(template).result(binding)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def base_output_file_name
|
|
39
|
+
"#{class_name.underscore}.rb"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def output_file_directory
|
|
43
|
+
File.join(base_output_dir, profile_identifier.downcase)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def output_file_name
|
|
47
|
+
File.join(output_file_directory, base_output_file_name)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def profile_identifier
|
|
51
|
+
Naming.snake_case_for_profile(group_metadata)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_id
|
|
55
|
+
"davinci_plan_net_#{group_metadata.reformatted_version}_forward_chain_#{search_identifier}_search_test"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def search_identifier
|
|
59
|
+
"#{chain_param_base}_#{chain_param.to_s.gsub(/[-:]/, '_')}".underscore
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def search_title
|
|
63
|
+
search_identifier.camelize
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def class_name
|
|
67
|
+
"#{Naming.upper_camel_case_for_profile(group_metadata)}ForwardChain#{search_title}SearchTest"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def module_name
|
|
71
|
+
"DaVinciPlanNet#{group_metadata.reformatted_version.upcase}"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def resource_type
|
|
75
|
+
group_metadata.resource
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def first_search?
|
|
79
|
+
group_metadata.searches.first == search_metadata
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def fixed_value_search?
|
|
83
|
+
#TODO
|
|
84
|
+
false
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def fixed_value_search_param_name
|
|
88
|
+
#TODO
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def chain_param_string
|
|
92
|
+
"#{profile_identifier}.#{chain_param.gsub(/[-:]/, '_')}"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def chain_param_base
|
|
96
|
+
search_metadata[:names].first
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def chained_resource
|
|
100
|
+
res_type = search_definition(chain_param_base.to_sym)[:type]
|
|
101
|
+
res_type = search_definition(chain_param_base.to_sym)[:target] if res_type == "Reference"
|
|
102
|
+
res_type
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def a_or_an(name)
|
|
106
|
+
['a','e','i','o','u'].include?(name.first.downcase) ? "an #{name}" : "a #{name}"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def search_param_names
|
|
110
|
+
search_params.map { |param| param[:name] }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def search_param_names_array
|
|
114
|
+
array_of_strings(search_param_names)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def path_for_value(path)
|
|
118
|
+
path == 'class' ? 'local_class' : path
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def required_comparators_for_param(name)
|
|
122
|
+
search_definition(name)[:comparators].select { |_comparator, expectation| expectation == 'SHALL' }
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def required_comparators
|
|
126
|
+
@required_comparators ||=
|
|
127
|
+
search_param_names.each_with_object({}) do |name, comparators|
|
|
128
|
+
required_comparators = required_comparators_for_param(name)
|
|
129
|
+
comparators[name] = required_comparators if required_comparators.present?
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def search_definition(name)
|
|
134
|
+
group_metadata.search_definitions[name.to_sym]
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def saves_delayed_references?
|
|
138
|
+
first_search? && group_metadata.delayed_references.present?
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def possible_status_search?
|
|
142
|
+
!search_metadata[:names].include?('status') && group_metadata.search_definitions.key?(:status)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def token_search_params
|
|
146
|
+
@token_search_params ||=
|
|
147
|
+
search_param_names.select do |name|
|
|
148
|
+
['Identifier', 'CodeableConcept', 'Coding'].include? group_metadata.search_definitions[name.to_sym][:type]
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def token_search_params_string
|
|
153
|
+
array_of_strings(token_search_params)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def required_comparators_string
|
|
157
|
+
array_of_strings(required_comparators.keys)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def array_of_strings(array)
|
|
161
|
+
quoted_strings = array.map { |element| "'#{element}'" }
|
|
162
|
+
"[#{quoted_strings.join(', ')}]"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def input_name
|
|
166
|
+
"#{search_identifier.downcase}_input"
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def search_properties
|
|
170
|
+
{}.tap do |properties|
|
|
171
|
+
properties[:fixed_value_search] = 'true' if fixed_value_search?
|
|
172
|
+
properties[:resource_type] = "'#{resource_type}'"
|
|
173
|
+
properties[:search_param_names] = []
|
|
174
|
+
properties[:possible_status_search] = 'true' if possible_status_search?
|
|
175
|
+
properties[:chain_param] = "'#{chain_param}'"
|
|
176
|
+
properties[:chain_param_base] = "'#{chain_param_base}'"
|
|
177
|
+
properties[:additional_resource_type] = "'#{chained_resource}'"
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def search_test_properties_string
|
|
182
|
+
search_properties
|
|
183
|
+
.map { |key, value| "#{' ' * 10}#{key}: #{value}" }
|
|
184
|
+
.join(",\n")
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def generate
|
|
188
|
+
FileUtils.mkdir_p(output_file_directory)
|
|
189
|
+
File.open(output_file_name, 'w') { |f| f.write(output) }
|
|
190
|
+
|
|
191
|
+
group_metadata.add_test(
|
|
192
|
+
id: test_id,
|
|
193
|
+
file_name: base_output_file_name
|
|
194
|
+
)
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
require_relative 'naming'
|
|
2
|
+
require_relative 'special_cases'
|
|
3
|
+
|
|
4
|
+
module DaVinciPlanNetTestKit
|
|
5
|
+
class Generator
|
|
6
|
+
class GroupGenerator
|
|
7
|
+
class << self
|
|
8
|
+
def generate(ig_metadata, base_output_dir)
|
|
9
|
+
ig_metadata.ordered_groups
|
|
10
|
+
.reject { |group| SpecialCases.exclude_group? group }
|
|
11
|
+
.each { |group| new(group, base_output_dir).generate }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
attr_accessor :group_metadata, :base_output_dir
|
|
16
|
+
|
|
17
|
+
def initialize(group_metadata, base_output_dir)
|
|
18
|
+
self.group_metadata = group_metadata
|
|
19
|
+
self.base_output_dir = base_output_dir
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def template
|
|
23
|
+
@template ||= File.read(File.join(__dir__, 'templates', 'group.rb.erb'))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def output
|
|
27
|
+
@output ||= ERB.new(template).result(binding)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def base_output_file_name
|
|
31
|
+
"#{class_name.underscore}.rb"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def base_metadata_file_name
|
|
35
|
+
"metadata.yml"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def class_name
|
|
39
|
+
"#{Naming.upper_camel_case_for_profile(group_metadata)}Group"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def module_name
|
|
43
|
+
"DaVinciPlanNet#{group_metadata.reformatted_version.upcase}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def title
|
|
47
|
+
group_metadata.title
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def short_description
|
|
51
|
+
group_metadata.short_description
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def output_file_name
|
|
55
|
+
File.join(base_output_dir, base_output_file_name)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def metadata_file_name
|
|
59
|
+
File.join(base_output_dir, profile_identifier, base_metadata_file_name)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def profile_identifier
|
|
63
|
+
Naming.snake_case_for_profile(group_metadata)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def group_id
|
|
67
|
+
"davinci_plan_net_#{group_metadata.reformatted_version}_#{profile_identifier}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def resource_type
|
|
71
|
+
group_metadata.resource
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def search_validation_resource_type
|
|
75
|
+
"#{resource_type} resources"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def profile_name
|
|
79
|
+
group_metadata.profile_name
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def profile_url
|
|
83
|
+
group_metadata.profile_url
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def optional?
|
|
87
|
+
false #No Optional groups in Plan Net
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def chain_requirement_list_for_param(search_parameter)
|
|
91
|
+
sym = search_parameter.class != Symbol ? search_parameter.to_sym : search_parameter
|
|
92
|
+
req_list = group_metadata.search_definitions[sym][:chain].nil? ? [] : group_metadata.search_definitions[sym][:chain]
|
|
93
|
+
req_list
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def any_chain_requirements?
|
|
97
|
+
!chainable_parameters.empty?
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def chainable_parameters
|
|
101
|
+
chainable_params = group_metadata.search_definitions.keys.reject do |search_parameter|
|
|
102
|
+
req_list = chain_requirement_list_for_param(search_parameter)
|
|
103
|
+
req_list.nil? || req_list.empty?
|
|
104
|
+
end
|
|
105
|
+
chainable_params
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def generate
|
|
109
|
+
# add_special_tests
|
|
110
|
+
File.open(output_file_name, 'w') { |f| f.write(output) }
|
|
111
|
+
group_metadata.id = group_id
|
|
112
|
+
group_metadata.file_name = base_output_file_name
|
|
113
|
+
File.open(metadata_file_name, 'w') { |f| f.write(YAML.dump(group_metadata.to_hash)) }
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def add_special_tests
|
|
117
|
+
return if group_metadata.reformatted_version == 'v311'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_id_list
|
|
121
|
+
@test_id_list ||=
|
|
122
|
+
group_metadata.tests.map { |test| test[:id] }
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_file_list
|
|
126
|
+
@test_file_list ||=
|
|
127
|
+
group_metadata.tests.map do |test|
|
|
128
|
+
name_without_suffix = test[:file_name].delete_suffix('.rb')
|
|
129
|
+
name_without_suffix.start_with?('..') ? name_without_suffix : "#{profile_identifier}/#{name_without_suffix}"
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def required_searches
|
|
134
|
+
group_metadata.searches.select { |search| search[:expectation] == 'SHALL' }
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def search_param_name_string
|
|
138
|
+
required_searches
|
|
139
|
+
.map { |search| search[:names].join(' + ') }
|
|
140
|
+
.map { |names| "* #{names}" }
|
|
141
|
+
.join("\n")
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def include_param_name_string
|
|
145
|
+
group_metadata.include_params
|
|
146
|
+
.map { |names| "* #{names}" }
|
|
147
|
+
.join("\n")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def revinclude_param_name_string
|
|
151
|
+
group_metadata.revincludes
|
|
152
|
+
.map { |names| "* #{names}" }
|
|
153
|
+
.join("\n")
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def forward_chain_table
|
|
157
|
+
chain_table = "| Search Parameters | Chain Requirements |\n| :---: | :---: |\n"
|
|
158
|
+
# Iterate through the chain requirements and add to table
|
|
159
|
+
chainable_parameters.each do |chain_param|
|
|
160
|
+
chain_requirement_list = chain_requirement_list_for_param(chain_param).map { |chain| chain[:chain]}
|
|
161
|
+
chain_table += "| #{chain_param} | #{chain_requirement_list.join(', ')} |\n"
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
chain_table
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def reverse_chain_string
|
|
168
|
+
# Placeholder until we have a more clear way of inferring reverse requirements
|
|
169
|
+
examples = File.read('lib/davinci_plan_net_test_kit/custom_groups/reverse_chain_tests/examples.json')
|
|
170
|
+
examples_hash = JSON.parse(examples)[Naming.upper_camel_case_for_profile(group_metadata)]
|
|
171
|
+
.map { |test_example| "* #{test_example['source_resource']}:#{test_example['target_param']}:#{test_example['constraining_param']}" }
|
|
172
|
+
.join("\n")
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def search_description
|
|
176
|
+
return '' if required_searches.blank?
|
|
177
|
+
|
|
178
|
+
<<~SEARCH_DESCRIPTION
|
|
179
|
+
|
|
180
|
+
## Searching
|
|
181
|
+
This test sequence will perform a search with each required search parameter
|
|
182
|
+
associated with this resource individually. Searches with the
|
|
183
|
+
following parameters will be performed:
|
|
184
|
+
|
|
185
|
+
#{search_param_name_string}
|
|
186
|
+
|
|
187
|
+
### Search Parameters
|
|
188
|
+
Each search will look for its parameter values
|
|
189
|
+
from the results of the instance gathering step. For example, for a search using
|
|
190
|
+
the `identifier` search parameter, the test searches the gathered instances
|
|
191
|
+
for one with the `identifier` element populated and then uses that value
|
|
192
|
+
as the queried `identifier` value. If a value cannot be found this way,
|
|
193
|
+
the search test is skipped for that search parameter.
|
|
194
|
+
|
|
195
|
+
### Search Validation
|
|
196
|
+
Inferno will retrieve all bundle pages of the reply for
|
|
197
|
+
#{search_validation_resource_type}. Each of the returned instances
|
|
198
|
+
is then checked to see if it matches the searched
|
|
199
|
+
parameters in accordance with [FHIR search
|
|
200
|
+
guidelines](https://www.hl7.org/fhir/search.html). The test will fail,
|
|
201
|
+
for example, if a #{profile_name} search for `#{required_searches.first[:names].first}=X`
|
|
202
|
+
returns a #{profile_name} instance where `#{required_searches.first[:names].first}!=X`
|
|
203
|
+
|
|
204
|
+
SEARCH_DESCRIPTION
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def include_description
|
|
208
|
+
return '' if group_metadata.include_params.blank?
|
|
209
|
+
|
|
210
|
+
<<~INCLUDE_DESCRIPTION
|
|
211
|
+
## _include Requirement Testing
|
|
212
|
+
This test sequence will perform a search with each required _include search
|
|
213
|
+
parameter associated with this profile. This sequence will perform searches with the
|
|
214
|
+
following includes:
|
|
215
|
+
|
|
216
|
+
#{include_param_name_string}
|
|
217
|
+
|
|
218
|
+
Each _include search will look for a candidate id that has the target reference element
|
|
219
|
+
populated from the results of instance gathering. Each search will use the identified
|
|
220
|
+
#{profile_name} id and the include parameter.
|
|
221
|
+
The returned instances are checked to ensure that any instances of the included
|
|
222
|
+
type are referenced by returned instances of the searched resource type.
|
|
223
|
+
|
|
224
|
+
INCLUDE_DESCRIPTION
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def revinclude_description
|
|
228
|
+
return '' if group_metadata.revincludes.blank?
|
|
229
|
+
|
|
230
|
+
<<~REVINCLUDE_DESCRIPTION
|
|
231
|
+
## _revinclude Requirement Testing
|
|
232
|
+
This test sequence will perform a search with each required _revinclude search
|
|
233
|
+
parameter associated with this resource. This sequence will perform searches with the
|
|
234
|
+
following revincludes:
|
|
235
|
+
|
|
236
|
+
#{revinclude_param_name_string}
|
|
237
|
+
|
|
238
|
+
All _revinclude searches will look for candidate ids from the results of
|
|
239
|
+
instance gathering _only_ if tests are ran from the suite level. Each search
|
|
240
|
+
will use a #{profile_name} id that is referenced by an instance of the revincluded resource
|
|
241
|
+
in the element that is the target of the revinclude search parameter. The returned instances
|
|
242
|
+
are checked to ensure that any
|
|
243
|
+
instances of the revincluded type reference returned instances of the searched resource type.
|
|
244
|
+
|
|
245
|
+
If running from the group level, inputs of the form
|
|
246
|
+
"#{resource_type} instance ids referenced in \[referencing profile\].\[referencing element\]"
|
|
247
|
+
are provided for these tests. Enter ids of the #{resource_type} profile that
|
|
248
|
+
are referenced by the \[referencing element\] of an instance of the \[referencing profile\].
|
|
249
|
+
|
|
250
|
+
REVINCLUDE_DESCRIPTION
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def forward_chain_description
|
|
254
|
+
return '' if !any_chain_requirements?
|
|
255
|
+
|
|
256
|
+
<<~FORWARD_CHAINING_DESCRIPTION
|
|
257
|
+
## Forward Chaining Requirement Testing
|
|
258
|
+
This test sequence will perform a search with each required combination of forward chaining
|
|
259
|
+
search parameters. This sequence will perform searches with the following chaining parameters:
|
|
260
|
+
|
|
261
|
+
#{forward_chain_table}
|
|
262
|
+
|
|
263
|
+
All forward chain searches will look for candidate instances of the resource being chained through
|
|
264
|
+
from the results of previously run _include tests. Candidates are chosen from previously returned
|
|
265
|
+
instances that have the chain parameter element filled. Each search test will use one of these values
|
|
266
|
+
to build the requests for the test. The test will be skipped if no candidates can be found.
|
|
267
|
+
|
|
268
|
+
The test will first create and execute the forward chaining request.
|
|
269
|
+
The test will then perform a basic search test on the resource being chained through,
|
|
270
|
+
using the same value in the previous request. Each resource returned in the first
|
|
271
|
+
request will then be checked, validating that the element being chained through is populated by
|
|
272
|
+
the id of _any_ of the resources returned by the second request.
|
|
273
|
+
|
|
274
|
+
FORWARD_CHAINING_DESCRIPTION
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def reverse_chain_description
|
|
278
|
+
return '' if !test_id_list.any? {|test_id| test_id.include?('reverse_chain')}
|
|
279
|
+
<<~REVERSE_CHAINING_DESCRIPTION
|
|
280
|
+
## Reverse Chaining Requirement Testing
|
|
281
|
+
This test sequence will perform a search with each required combination of reverse chaining
|
|
282
|
+
search parameters, including the following combinations:
|
|
283
|
+
|
|
284
|
+
#{reverse_chain_string}
|
|
285
|
+
|
|
286
|
+
All reverse chain searches will look for candidate instances from the results of
|
|
287
|
+
previous tests _only_ if tests are ran from the suite level. Candidates are
|
|
288
|
+
selected by checking they have both the second (reference element) and third (constraining element) elements
|
|
289
|
+
populated. The search value will be taken from the constraining element on the
|
|
290
|
+
identified candidate.
|
|
291
|
+
|
|
292
|
+
If running from the profile level, inputs of the form
|
|
293
|
+
"\'\[constraining element\]\' value from a \[source resource type\] instance with \'\[reference element\]\' populated"
|
|
294
|
+
are provided for these tests upon test start. Enter a value from the \[constraining element\] element
|
|
295
|
+
of an instance of a \[source resource type\] resource that also contains a reference to
|
|
296
|
+
the tested #{resource_type} in its \[reference element\] element. The input will
|
|
297
|
+
be used as the search value.
|
|
298
|
+
|
|
299
|
+
The test will first create and execute a request with the chain parameter.
|
|
300
|
+
The test will then perform a search against the \[source resource type\] with
|
|
301
|
+
the \[constraining\] SeachParameter using the same search value. Each resource returned in the first
|
|
302
|
+
request will then be checked, validating that the ids of those resources are also referenced
|
|
303
|
+
by _any_ of the resources returned by the second request in its \[reference element\] element.
|
|
304
|
+
|
|
305
|
+
REVERSE_CHAINING_DESCRIPTION
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def description
|
|
310
|
+
<<~DESCRIPTION
|
|
311
|
+
# Background
|
|
312
|
+
|
|
313
|
+
The #{title} sequence verifies that the system under test is
|
|
314
|
+
able to provide correct responses for #{resource_type} queries. These queries
|
|
315
|
+
must return resources conforming to the #{profile_name} profile as
|
|
316
|
+
specified in the Plan Net #{group_metadata.version} Implementation Guide.
|
|
317
|
+
|
|
318
|
+
# Testing Methodology
|
|
319
|
+
|
|
320
|
+
## Instance Gathering
|
|
321
|
+
|
|
322
|
+
Inferno will first identify and obtain a set of instances to use for the rest
|
|
323
|
+
of the tests, requiring at least one instance to be identified for the test to pass.
|
|
324
|
+
Instances to gather are indentified in two ways. One or both will be used,
|
|
325
|
+
depending on user input.
|
|
326
|
+
|
|
327
|
+
### Parameterless searches
|
|
328
|
+
Instances can be gathered using a query requesting all instances of #{resource_type}
|
|
329
|
+
(e.g., `GET [FHIR Endpoint]/#{resource_type}`). #{SpecialCases.has_parameterless_filter?(profile_name) ? SpecialCases.parameterless_filter_description(profile_name) : "" }
|
|
330
|
+
Gathering through this method is controlled by the following inputs (used for all profiles):
|
|
331
|
+
- "Use parameterless searches to identify instances?":
|
|
332
|
+
parameterless searches can be disabled using this input if, for example,
|
|
333
|
+
the server under test does not support them, or not all instances on the server
|
|
334
|
+
should be expected to conform to Plan Net profiles. In this case the user **MUST**
|
|
335
|
+
provide specific instance ids to gather.
|
|
336
|
+
- "Maximum number of instances to gather using parameterless searches": sets an upper
|
|
337
|
+
bound on the number of instances Inferno will gather from parameterless searches.
|
|
338
|
+
- "Maximum pages of results to consider when using parameterless searches": sets an upper bound
|
|
339
|
+
on the number of pages of search results Inferno will load when gathering instances
|
|
340
|
+
using parameterless searches.
|
|
341
|
+
|
|
342
|
+
### User-provided instance ids
|
|
343
|
+
|
|
344
|
+
If ids are listed in the "ids of #{profile_name} instances" optional input,
|
|
345
|
+
they will be read and included at the start of the set of gathered instances.
|
|
346
|
+
|
|
347
|
+
#{search_description}
|
|
348
|
+
#{include_description}
|
|
349
|
+
#{revinclude_description}
|
|
350
|
+
#{forward_chain_description}
|
|
351
|
+
#{reverse_chain_description}
|
|
352
|
+
|
|
353
|
+
## Profile Validation
|
|
354
|
+
Each resource identified during instance gathering and other queries run during this test sequence
|
|
355
|
+
is expected to conform to the [#{profile_name}](#{group_metadata.versioned_profile_url}). Each element is checked
|
|
356
|
+
by the HL7 Validator against terminology binding and cardinality requirements. Elements with a
|
|
357
|
+
required binding are validated against their bound ValueSet. If the code/system in the element
|
|
358
|
+
is not part of the ValueSet, then the test will fail.
|
|
359
|
+
|
|
360
|
+
## Must Support
|
|
361
|
+
Each profile contains elements marked as "must support". This test
|
|
362
|
+
sequence expects to see each of these elements populated at least once.
|
|
363
|
+
The test will look through the #{profile_name} instances identified
|
|
364
|
+
during instance gathering and other queries run during this test sequence.
|
|
365
|
+
If no populated instance can be found for any must support element, the test
|
|
366
|
+
will fail.
|
|
367
|
+
|
|
368
|
+
## Reference Validation
|
|
369
|
+
At least one instance of each external reference in elements marked as
|
|
370
|
+
"must support" within the resources provided by the system must resolve.
|
|
371
|
+
The test will attempt to read each reference found and will fail if no
|
|
372
|
+
read succeeds.
|
|
373
|
+
DESCRIPTION
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
end
|
|
377
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module DaVinciPlanNetTestKit
|
|
2
|
+
class Generator
|
|
3
|
+
class GroupMetadata
|
|
4
|
+
ATTRIBUTES = [
|
|
5
|
+
:name,
|
|
6
|
+
:class_name,
|
|
7
|
+
:version,
|
|
8
|
+
:reformatted_version,
|
|
9
|
+
:resource,
|
|
10
|
+
:profile_url,
|
|
11
|
+
:versioned_profile_url,
|
|
12
|
+
:profile_name,
|
|
13
|
+
:profile_version,
|
|
14
|
+
:title,
|
|
15
|
+
:short_description,
|
|
16
|
+
:interactions,
|
|
17
|
+
:operations,
|
|
18
|
+
:searches,
|
|
19
|
+
:search_definitions,
|
|
20
|
+
:include_params,
|
|
21
|
+
:revincludes,
|
|
22
|
+
:required_concepts,
|
|
23
|
+
:must_supports,
|
|
24
|
+
:mandatory_elements,
|
|
25
|
+
:bindings,
|
|
26
|
+
:references,
|
|
27
|
+
:tests,
|
|
28
|
+
:id,
|
|
29
|
+
:file_name,
|
|
30
|
+
:delayed_references
|
|
31
|
+
].freeze
|
|
32
|
+
|
|
33
|
+
ATTRIBUTES.each { |name| attr_accessor name }
|
|
34
|
+
|
|
35
|
+
def initialize(metadata)
|
|
36
|
+
metadata.each do |key, value|
|
|
37
|
+
raise "Unknown attribute #{key}" unless ATTRIBUTES.include? key
|
|
38
|
+
|
|
39
|
+
instance_variable_set(:"@#{key}", value)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def delayed?
|
|
44
|
+
# No delayed resources in Plan Net
|
|
45
|
+
false
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def add_test(id:, file_name:)
|
|
49
|
+
self.tests ||= []
|
|
50
|
+
|
|
51
|
+
test_metadata = {
|
|
52
|
+
id: id,
|
|
53
|
+
file_name: file_name
|
|
54
|
+
}
|
|
55
|
+
self.tests << test_metadata
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def to_hash
|
|
59
|
+
ATTRIBUTES.each_with_object({}) { |key, hash| hash[key] = send(key) unless send(key).nil? }
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def add_delayed_references(delayed_profiles, ig_resources)
|
|
63
|
+
self.delayed_references =
|
|
64
|
+
references
|
|
65
|
+
.select { |reference| (reference[:profiles] & delayed_profiles).present? }
|
|
66
|
+
.map do |reference|
|
|
67
|
+
profile_urls = (reference[:profiles] & delayed_profiles)
|
|
68
|
+
delayed_resources = profile_urls.map { |url| ig_resources.resource_for_profile(url) }
|
|
69
|
+
{
|
|
70
|
+
path: reference[:path].gsub("#{resource}.", ''),
|
|
71
|
+
resources: delayed_resources
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|