def testExpandValueSet_withIntensionalValueSet_makesExpectedCalls( self, mock_expand_extensional_value_set): mock_expand_extensional_value_set.return_value = None expanded_value_set = value_set_pb2.ValueSet() codes = [ value_set_pb2.ValueSet.Expansion.Contains( system=datatypes_pb2.Uri(value='include-system-1'), version=datatypes_pb2.String(value='include-version-1'), code=datatypes_pb2.Code(value='code-1-2'), ), value_set_pb2.ValueSet.Expansion.Contains( system=datatypes_pb2.Uri(value='include-system-2'), version=datatypes_pb2.String(value='include-version-2'), code=datatypes_pb2.Code(value='code-2-1'), ), ] expanded_value_set.expansion.contains.extend(codes) mock_client = unittest.mock.MagicMock( spec=terminology_service_client.TerminologyServiceClient) mock_client.expand_value_set.return_value = expanded_value_set value_set = value_set_pb2.ValueSet() result = value_sets.expand_value_set(value_set, mock_client) self.assertCountEqual(result.expansion.contains, codes)
def testSetValueAtFieldIndex_repeatCompositeField_setsValue(self): """Test set_value_at_field_index with a repeated composite type.""" patient = self._create_patient_with_names(["A", "B", "C"]) new_name = datatypes_pb2.HumanName( text=datatypes_pb2.String(value="Foo"), family=datatypes_pb2.String(value="Bar")) proto_utils.set_value_at_field_index(patient, "name", 1, new_name) self.assertEqual(patient.name[1], new_name)
def testGetValueAtField_withRepeatedComposite_returnsList(self): """Test get_value_at_field with a repeated composite field.""" patient_names = [ datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Foo")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Bar")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Bats")), ] patient = patient_pb2.Patient(name=patient_names) result = proto_utils.get_value_at_field(patient, "name") self.assertEqual(result, patient_names)
def testCreateMessageFromDescriptor_withArguments_returnsMessage(self): """Tests that the correct class is instantiated with kwargs.""" patient_name = datatypes_pb2.HumanName( text=datatypes_pb2.String(value="Foo"), family=datatypes_pb2.String(value="Bar")) expected_patient = patient_pb2.Patient(name=[patient_name]) actual_patient = proto_utils.create_message_from_descriptor( patient_pb2.Patient.DESCRIPTOR, name=[patient_name]) self.assertEqual(expected_patient, actual_patient)
def testSetValueAtFieldIndex_invalidIndex_raisesException(self): """Test set_value_at_field_index with an invalid index.""" patient = self._create_patient_with_names(["A", "B", "C"]) new_name = datatypes_pb2.HumanName( text=datatypes_pb2.String(value="Foo"), family=datatypes_pb2.String(value="Bar")) with self.assertRaises(ValueError) as ve: proto_utils.set_value_at_field_index(patient, "name", 3, new_name) self.assertIsInstance(ve.exception, ValueError)
def testSplitIfRelativeReference_withUrlScheme_succeeds(self): ref = datatypes_pb2.Reference(uri=datatypes_pb2.String( value='http://acme.com/ehr/fhir/Practitioner/2323-33-4')) references.split_if_relative_reference(ref) uri_field = ref.DESCRIPTOR.fields_by_name['uri'] self.assertEqual( proto_utils.get_value_at_field(ref, uri_field), datatypes_pb2.String( value='http://acme.com/ehr/fhir/Practitioner/2323-33-4'))
def testValueSetExpansionForExtensionalSets_withExtensionalSet_expandsCodes( self): value_set = value_set_pb2.ValueSet() # Add an include set with three codes. include_1 = value_set.compose.include.add() include_1.version.value = 'include-version-1' include_1.system.value = 'include-system-1' code_1_1 = include_1.concept.add() code_1_1.code.value = 'code-1-1' code_1_2 = include_1.concept.add() code_1_2.code.value = 'code-1-2' code_1_3 = include_1.concept.add() code_1_3.code.value = 'code-1-3' # Add an include set with one code. include_2 = value_set.compose.include.add() include_2.version.value = 'include-version-2' include_2.system.value = 'include-system-2' code_2_1 = include_2.concept.add() code_2_1.code.value = 'code-2-1' # Add a copy of code_1_3 to the exclude set. exclude = value_set.compose.exclude.add() exclude.version.value = 'include-version-1' exclude.system.value = 'include-system-1' exclude_code = exclude.concept.add() exclude_code.code.value = 'code-1-3' result = value_sets._expand_extensional_value_set(value_set) expected = [ value_set_pb2.ValueSet.Expansion.Contains( system=datatypes_pb2.Uri(value='include-system-1'), version=datatypes_pb2.String(value='include-version-1'), code=datatypes_pb2.Code(value='code-1-1'), ), value_set_pb2.ValueSet.Expansion.Contains( system=datatypes_pb2.Uri(value='include-system-1'), version=datatypes_pb2.String(value='include-version-1'), code=datatypes_pb2.Code(value='code-1-2'), ), value_set_pb2.ValueSet.Expansion.Contains( system=datatypes_pb2.Uri(value='include-system-2'), version=datatypes_pb2.String(value='include-version-2'), code=datatypes_pb2.Code(value='code-2-1'), ), ] self.assertCountEqual(result.expansion.contains, expected)
def testSplitIfRelativeReference_withFragmentReference_succeeds(self): ref = datatypes_pb2.Reference(uri=datatypes_pb2.String(value='#org-1')) uri_field = ref.DESCRIPTOR.fields_by_name['uri'] fragment_field = ref.DESCRIPTOR.fields_by_name['fragment'] self.assertTrue(proto_utils.field_is_set(ref, uri_field)) self.assertFalse(proto_utils.field_is_set(ref, fragment_field)) references.split_if_relative_reference(ref) self.assertFalse(proto_utils.field_is_set(ref, uri_field)) self.assertTrue(proto_utils.field_is_set(ref, fragment_field)) self.assertEqual(proto_utils.get_value_at_field(ref, fragment_field), datatypes_pb2.String(value='org-1'))
def testCopyCommonField_differentMessageTypes_succeeds(self): """Tests that copy_common_field succeeds on a single Message field.""" string_value = datatypes_pb2.String(id=datatypes_pb2.String(value="foo")) boolean_value = datatypes_pb2.Boolean(id=datatypes_pb2.String(value="bar")) # Before copy self.assertEqual(string_value.id.value, "foo") self.assertEqual(boolean_value.id.value, "bar") proto_utils.copy_common_field(string_value, boolean_value, "id") # After copy self.assertEqual(string_value.id.value, "foo") self.assertEqual(boolean_value.id.value, "foo")
def testAppendValueAtField_repeatedCompositeValue_appendsValue(self): """Test append_value_at_field with a repeated composite type.""" patient = patient_pb2.Patient() patient_names = [ datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Foo")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Bar")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Bats")), ] self.assertEqual(proto_utils.field_content_length(patient, "name"), 0) for name in patient_names: proto_utils.append_value_at_field(patient, "name", name) self.assertEqual(proto_utils.field_content_length(patient, "name"), 3) self.assertEqual(patient.name[:], patient_names)
def testSplitIfRelativeReference_withMalformedUri_raises(self): ref = datatypes_pb2.Reference(uri=datatypes_pb2.String(value='InvalidUri')) with self.assertRaises(ValueError) as e: references.split_if_relative_reference(ref) self.assertIsInstance(e.exception, ValueError)
def testClearFhirExtensions_withMultipleExtensions_succeeds(self): """Tests ClearFhirExtensions when a message has multiple extensions.""" arbitrary_string = datatypes_pb2.String() arbitrary_string.extension.add( url=datatypes_pb2.Uri(value='first'), value=datatypes_pb2.Extension.ValueX(boolean=datatypes_pb2.Boolean( value=True))) arbitrary_string.extension.add( url=datatypes_pb2.Uri(value='second'), value=datatypes_pb2.Extension.ValueX(boolean=datatypes_pb2.Boolean( value=True))) arbitrary_string.extension.add( url=datatypes_pb2.Uri(value='third'), value=datatypes_pb2.Extension.ValueX(boolean=datatypes_pb2.Boolean( value=True))) self.assertLen(extensions.get_fhir_extensions(arbitrary_string), 3) # Remove middle extension extensions.clear_fhir_extensions_with_url(arbitrary_string, 'second') remaining_extensions = extensions.get_fhir_extensions(arbitrary_string) self.assertLen(remaining_extensions, 2) remaining_urls = [ extension.url.value for extension in remaining_extensions ] self.assertEqual(remaining_urls, ['first', 'third'])
def _create_patient_with_names(self, names: List[str]) -> patient_pb2.Patient: patient = patient_pb2.Patient() for name in names: patient.name.append( datatypes_pb2.HumanName(text=datatypes_pb2.String(value=name))) return patient
def testSetValueAtField_singlePrimitiveValue_setsValue(self): """Test set_value_at_field with a singular primitive type.""" arbitrary_string = datatypes_pb2.String(value="foo") self.assertEqual(arbitrary_string.value, "foo") proto_utils.set_value_at_field(arbitrary_string, "value", "bar") self.assertEqual(arbitrary_string.value, "bar")
def testGetContainedResource_withValidContainedResource_succeeds(self): expected_account = account_pb2.Account(name=datatypes_pb2.String( value='TestAccount')) contained_resource = bundle_and_contained_resource_pb2.ContainedResource( account=expected_account) actual_account = resource_utils.get_contained_resource( contained_resource) self.assertEqual(actual_account, expected_account)
def testSplitIfRelativeReference_withRelativeReference_succeeds(self): ref = datatypes_pb2.Reference( uri=datatypes_pb2.String(value='Practitioner/example'), display=datatypes_pb2.String(value='Dr Adam Careful')) uri_field = ref.DESCRIPTOR.fields_by_name['uri'] practitioner_id_field = ref.DESCRIPTOR.fields_by_name['practitioner_id'] self.assertTrue(proto_utils.field_is_set(ref, uri_field)) self.assertFalse(proto_utils.field_is_set(ref, practitioner_id_field)) references.split_if_relative_reference(ref) self.assertFalse(proto_utils.field_is_set(ref, uri_field)) self.assertTrue(proto_utils.field_is_set(ref, practitioner_id_field)) self.assertEqual( proto_utils.get_value_at_field(ref, practitioner_id_field), datatypes_pb2.ReferenceId(value='example'))
def _bundle_with_single_structure_definition( ) -> bundle_and_contained_resource_pb2.Bundle: """Returns a `Bundle` with a single `StructureDefinition` entry.""" return bundle_and_contained_resource_pb2.Bundle(entry=[ bundle_and_contained_resource_pb2.Bundle. Entry(resource=bundle_and_contained_resource_pb2.ContainedResource( structure_definition=structure_definition_pb2.StructureDefinition( name=datatypes_pb2.String(value='Test')))) ])
def testSetValueAtField_repeatedCompositeValue_setsList(self): """Test set_value_at_field with a repeated composite type.""" old_names = [ datatypes_pb2.HumanName(text=datatypes_pb2.String(value="A")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="B")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="C")), ] patient = patient_pb2.Patient(name=old_names) self.assertEqual(patient.name[:], old_names) new_names = [ datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Foo")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Bar")), datatypes_pb2.HumanName(text=datatypes_pb2.String(value="Bats")), ] proto_utils.set_value_at_field(patient, "name", new_names) self.assertEqual(patient.name[:], new_names)
def testGetCodeAsString_withInvalidType(self): """Tests get_code_as_string with an invalid value-field type.""" not_a_code = datatypes_pb2.String(value='foo') with self.assertRaises(ValueError) as ve: _ = codes.get_code_as_string(not_a_code) self.assertIsInstance(ve.exception, ValueError)
def testGetValueAtField_withSingularPrimitive_returnsValue(self): """Test get_value_at_field with a basic singular primitive field.""" arbitrary_string = datatypes_pb2.String(value="foo") result = proto_utils.get_value_at_field(arbitrary_string, "value") self.assertEqual(result, "foo")
def testGetValueAtFieldName_invalidName_raisesException(self): arbitrary_string = datatypes_pb2.String(value="foo") with self.assertRaises(ValueError) as ve: proto_utils.get_value_at_field(arbitrary_string, "notvalue") self.assertIsInstance(ve.exception, ValueError)