def _assert_correct_converter_single_value(self, data_type: DataType, expected_converter_type): # given: column_spec = ColumnSpecification('field', 'object_type', 'main_category', data_type) # when: converter = column_spec.determine_converter() # then: self.assertIsInstance(converter, expected_converter_type)
def test_determine_converter_for_multivalue_type(self): data_types_to_test = [ DataType.BOOLEAN, DataType.INTEGER, DataType.STRING, DataType.UNDEFINED ] for data_type in data_types_to_test: sample_metadata_schema_json = { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://schema.humancellatlas.org/module/protocol/2.0.2/someschema", "description": "Just a plain old test schema", "type": "object", "properties": { "multivalue_property": { "description": "Some generic multivalue property", "type": "array", "multivalue": True, "items": { "type": data_type.value } } } } schema_template = SchemaTemplate( json_schema_docs=[sample_metadata_schema_json]) column_specification = ColumnSpecification( schema_template, "someschema.multivalue_property", "someschema") self.assertEqual(column_specification.field_name, "someschema.multivalue_property") self.assertTrue(column_specification.is_multivalue()) self.assertIsInstance(column_specification.determine_converter(), ListConverter) self.assertEqual( column_specification.determine_converter().base_type, data_type)
def _assert_correct_converter_multivalue(self, data_type): # given: column_spec = ColumnSpecification('field', 'object_type', 'main_category', data_type, multivalue=True) # when: converter = column_spec.determine_converter() # then: self.assertIsInstance(converter, ListConverter) self.assertEqual(data_type, converter.base_type)
def determine_strategy(column_spec: ColumnSpecification): strategy = DO_NOTHING if column_spec is not None: field_name = column_spec.field_name converter = column_spec.determine_converter() conversion_type = column_spec.get_conversion_type() if ConversionType.MEMBER_FIELD == conversion_type: strategy = DirectCellConversion(field_name, converter) elif ConversionType.FIELD_OF_LIST_ELEMENT == conversion_type: strategy = ListElementCellConversion(field_name, converter) elif ConversionType.LINKING_DETAIL == conversion_type: strategy = LinkingDetailCellConversion(field_name, converter) elif ConversionType.IDENTITY == conversion_type: strategy = IdentityCellConversion(field_name, converter) elif ConversionType.LINKED_IDENTITY == conversion_type: strategy = LinkedIdentityCellConversion(field_name, column_spec.main_category) elif ConversionType.EXTERNAL_REFERENCE == conversion_type: strategy = ExternalReferenceCellConversion(field_name, column_spec.main_category) return strategy
def test_determine_converter_for_single_value(self): data_types_to_test = [ DataType.BOOLEAN, DataType.INTEGER, DataType.STRING, DataType.UNDEFINED ] expected_respective_converter = [ BooleanConverter, IntegerConverter, StringConverter, DefaultConverter ] for data_type, expected_converter in zip( data_types_to_test, expected_respective_converter): sample_metadata_schema_json = { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://schema.humancellatlas.org/module/protocol/2.0.2/someschema", "description": "Just a plain old test schema", "type": "object", "properties": { "some_property": { "description": "Some generic property", "type": data_type.value, "multivalue": False, } } } schema_template = SchemaTemplate( json_schema_docs=[sample_metadata_schema_json]) column_specification = ColumnSpecification( schema_template, "someschema.some_property", "someschema") self.assertIsInstance(column_specification.determine_converter(), expected_converter) self.assertEqual(column_specification.get_conversion_type(), ConversionType.MEMBER_FIELD)