def test_add_inferred_export_properties(self): props = set(['one', 'two']) self._add_props(props) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(set([item.path[0].name for item in group_schema.items]), props) self._check_sql_props(props)
def test_add_inferred_export_properties(self): props = set(['one', 'two']) self._add_props(props) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(set([item.path[0].name for item in group_schema.items]), props) self._check_sql_props(props)
def test_add_inferred_export_properties_system_with_transform(self): """ Ensures that when we add a system property with redundant paths, it uses the item's transform """ props = set(['user_id']) # user_id maps to two system properties self._add_props(props) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1)
def test_add_inferred_export_properties_system_with_transform(self): """ Ensures that when we add a system property with redundant paths, it uses the item's transform """ props = set(['user_id']) # user_id maps to two system properties self._add_props(props) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1)
def test_add_inferred_export_properties_system(self): """ Ensures that when we add a system property, it uses the system's item type """ props = set(['closed']) self._add_props(props) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.items[0].__class__, ExportItem) self._check_sql_props(props)
def test_add_inferred_export_properties_system(self): """ Ensures that when we add a system property, it uses the system's item type """ props = set(['closed']) self._add_props(props) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.items[0].__class__, ExportItem) self._check_sql_props(props)
def test_add_inferred_export_properties_saved_schema(self): props = set(['one', 'two']) props_two = set(['one', 'three']) combined_props = props | props_two self._add_props(props) self._add_props(props_two) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual( set([item.path[0].name for item in group_schema.items]), combined_props) self.assertTrue( all([isinstance(item, ScalarItem) for item in group_schema.items]), ) self._check_sql_props(combined_props)
def _cached_add_inferred_export_properties(sender, domain, case_type, properties): from corehq.apps.export.models import MAIN_TABLE, PathNode, CaseInferredSchema, ScalarItem """ Adds inferred properties to the inferred schema for a case type. :param: sender - The signal sender :param: domain :param: case_type :param: properties - An iterable of case properties to add to the inferred schema """ assert domain, 'Must have domain' assert case_type, 'Must have case type' assert all(['.' not in prop for prop in properties]), 'Properties should not have periods' inferred_schema = get_case_inferred_schema(domain, case_type) if not inferred_schema: inferred_schema = CaseInferredSchema( domain=domain, case_type=case_type, ) group_schema = inferred_schema.put_group_schema(MAIN_TABLE) add_properties_to_data_dictionary(domain, case_type, properties) for case_property in properties: path = [PathNode(name=case_property)] system_property_column = list( filter( lambda column: column.item.path == path and column.item. transform is None, MAIN_CASE_TABLE_PROPERTIES, )) if system_property_column: assert len(system_property_column) == 1 column = system_property_column[0] group_schema.put_item(path, inferred_from=sender, item_cls=column.item.__class__) else: group_schema.put_item(path, inferred_from=sender, item_cls=ScalarItem) inferred_schema.save()
def test_add_inferred_export_properties_saved_schema(self): props = set(['one', 'two']) props_two = set(['one', 'three']) combined_props = props | props_two self._add_props(props) self._add_props(props_two) schema = get_case_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual( set([item.path[0].name for item in group_schema.items]), combined_props ) self.assertTrue( all([isinstance(item, ScalarItem) for item in group_schema.items]), ) self._check_sql_props(combined_props)
def test_get_case_inferred_schema_missing(self): result = get_case_inferred_schema(self.domain, 'not-here') self.assertIsNone(result)
def test_get_case_inferred_schema(self): result = get_case_inferred_schema(self.domain, self.case_type) self.assertIsNotNone(result) self.assertEqual(result._id, self.inferred_schema._id)