Example #1
0
  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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
  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)
Example #5
0
  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'))
Example #7
0
  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'))
Example #9
0
  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")
Example #10
0
  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)
Example #11
0
  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)
Example #12
0
    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'])
Example #13
0
 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
Example #14
0
  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")
Example #15
0
 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)
Example #16
0
  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'))
Example #17
0
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'))))
    ])
Example #18
0
  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)
Example #19
0
 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)
Example #20
0
 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")
Example #21
0
  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)