def test_basic_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('basic')) with mock.patch( 'corehq.apps.export.models.new.FormExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) self.assertEqual(instance.split_multiselects, False) self.assertEqual(instance.transform_dates, True) self.assertEqual(instance.name, 'Tester') self.assertEqual(instance.export_format, 'csv') self.assertEqual(instance.is_deidentified, False) self.assertEqual(instance.include_errors, False) table = instance.get_table(MAIN_TABLE) self.assertEqual(table.label, 'My Forms') index, column = table.get_column( [PathNode(name='form'), PathNode(name='question1')], 'ExportItem', None, ) self.assertEqual(column.label, 'Question One') self.assertEqual(column.selected, True)
def test_system_property_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('system_properties')) with mock.patch( 'corehq.apps.export.models.new.FormExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) self.assertEqual(instance.name, 'System Properties') # Check for first repeat table table = instance.get_table(MAIN_TABLE) self.assertEqual(table.label, 'Forms') expected_paths = [ ([PathNode(name='xmlns')], None, True), ([PathNode(name='form'), PathNode(name='meta'), PathNode(name='userID')], None, True), ([PathNode(name='form'), PathNode(name='case'), PathNode(name='@case_id')], None, True), ( [PathNode(name='form'), PathNode(name='case'), PathNode(name='@case_id')], CASE_NAME_TRANSFORM, True ), ] for path, transform, selected in expected_paths: index, column = table.get_column(path, 'ExportItem', transform) self.assertEqual(column.selected, selected, '{} selected is not {}'.format(path, selected))
def test_repeat_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('repeat')) with mock.patch( 'corehq.apps.export.models.new.FormExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) self.assertEqual(instance.name, 'Repeat Tester') table = instance.get_table([PathNode(name='form'), PathNode(name='repeat', is_repeat=True)]) self.assertEqual(table.label, 'Repeat: question1') self.assertTrue(table.selected) index, column = table.get_column( [PathNode(name='form'), PathNode(name='repeat', is_repeat=True), PathNode(name='question2')], 'ExportItem', None ) self.assertEqual(column.label, 'Question Two') self.assertEqual(column.selected, True) index, column = table.get_column( [PathNode(name='number')], 'ExportItem', None ) self.assertEqual(column.selected, True)
def _convert_case_export(self, export_file_name): saved_export_schema = SavedExportSchema.wrap(self.get_json(export_file_name)) with mock.patch( 'corehq.apps.export.models.new.CaseExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance, meta = convert_saved_export_to_export_instance(self.domain, saved_export_schema) return instance, meta
def test_stock_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('stock')) with mock.patch( 'corehq.apps.export.models.new.CaseExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) table = instance.get_table(MAIN_TABLE) path = [PathNode(name='stock')] index, column = table.get_column(path, 'ExportItem', None) self.assertTrue(column.selected)
def _convert_export(self, mock_path, export_file_name, force=False): saved_export_schema = SavedExportSchema.wrap(self.get_json(export_file_name)) with mock.patch.object(SavedExportSchema, "save", return_value="False Save"): with mock.patch(mock_path, return_value=self.schema): instance, meta = convert_saved_export_to_export_instance( self.domain, saved_export_schema, force_convert_columns=force ) return instance, meta
def test_repeat_conversion(self): saved_export_schema = SavedExportSchema.wrap(self.get_json('repeat')) with mock.patch( 'corehq.apps.export.models.new.FormExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(saved_export_schema) self.assertEqual(instance.name, 'Repeat Tester') table = instance.get_table(['data', 'repeat']) self.assertEqual(table.display_name, 'Repeat: question1') column = table.get_column(['data', 'repeat', 'question2']) self.assertEqual(column.label, 'Question Two') self.assertEqual(column.selected, True)
def _convert_export(self, mock_path, export_file_name, force=False): saved_export_schema = SavedExportSchema.wrap(self.get_json(export_file_name)) with mock.patch.object(SavedExportSchema, 'save', return_value='False Save'): with mock.patch( mock_path, return_value=self.schema): instance, meta = convert_saved_export_to_export_instance( self.domain, saved_export_schema, force_convert_columns=force, ) return instance, meta
def get(self, request, *args, **kwargs): try: export_instance = FormExportInstance.get(self.export_id) except ResourceNotFound: # If it's not found, try and see if it's on the legacy system before throwing a 404 try: export_helper = make_custom_export_helper(self.request, self.export_type, self.domain, self.export_id) export_instance = convert_saved_export_to_export_instance(export_helper.custom_export) except ResourceNotFound: raise Http404() schema = self.get_export_schema(export_instance) self.export_instance = self.export_instance_cls.generate_instance_from_schema( schema, saved_export=export_instance ) return super(BaseEditNewCustomExportView, self).get(request, *args, **kwargs)
def test_transform_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('deid_transforms')) with mock.patch( 'corehq.apps.export.models.new.FormExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) table = instance.get_table(MAIN_TABLE) index, column = table.get_column( [PathNode(name='form'), PathNode(name='deid_id')], 'ExportItem', None ) self.assertEqual(column.deid_transform, DEID_ID_TRANSFORM) index, column = table.get_column( [PathNode(name='form'), PathNode(name='deid_date')], 'ExportItem', None ) self.assertEqual(column.deid_transform, DEID_DATE_TRANSFORM)
def test_basic_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('case')) with mock.patch( 'corehq.apps.export.models.new.CaseExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) self.assertEqual(instance.transform_dates, True) self.assertEqual(instance.name, 'Case Example') self.assertEqual(instance.export_format, 'csv') self.assertEqual(instance.is_deidentified, False) table = instance.get_table(MAIN_TABLE) self.assertEqual(table.label, 'Cases') self.assertTrue(table.selected) index, column = table.get_column([PathNode(name='DOB')], 'ExportItem', None) self.assertEqual(column.label, 'DOB Saved') self.assertEqual(column.selected, True)
def test_convert_form_export_stock_basic(self, _, __): saved_export_schema = SavedExportSchema.wrap(self.get_json('stock_form_export')) with mock.patch( 'corehq.apps.export.models.new.FormExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance, _ = convert_saved_export_to_export_instance(self.domain, saved_export_schema) table = instance.get_table(MAIN_TABLE) index, column = table.get_column( [ PathNode(name='form'), PathNode(name='transfer:questionid'), PathNode(name='entry'), PathNode(name='@id'), ], 'StockItem', None, ) self.assertTrue(column.selected)
def test_case_history_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('case_history')) with mock.patch( 'corehq.apps.export.models.new.CaseExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) table = instance.get_table(CASE_HISTORY_TABLE) self.assertEqual(table.label, 'Case History') expected_paths = [ ([PathNode(name='actions', is_repeat=True), PathNode(name='action_type')], True), ([PathNode(name='number')], True), ([PathNode(name='actions', is_repeat=True), PathNode(name='server_date')], True), ([PathNode(name='actions', is_repeat=True), PathNode(name='xform_name')], True), ] for path, selected in expected_paths: index, column = table.get_column(path, 'ExportItem', None) self.assertEqual(column.selected, selected, '{} selected is not {}'.format(path, selected))
def test_parent_case_conversion(self, _): saved_export_schema = SavedExportSchema.wrap(self.get_json('parent_case')) with mock.patch( 'corehq.apps.export.models.new.CaseExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance = convert_saved_export_to_export_instance(self.domain, saved_export_schema) table = instance.get_table(PARENT_CASE_TABLE) self.assertEqual(table.label, 'Parent Cases') self.assertTrue(table.selected) expected_paths = [ ([PathNode(name='indices', is_repeat=True), PathNode(name='referenced_id')], True), ([PathNode(name='indices', is_repeat=True), PathNode(name='referenced_type')], False), ([PathNode(name='indices', is_repeat=True), PathNode(name='relationship')], True), ([PathNode(name='indices', is_repeat=True), PathNode(name='doc_type')], True), ] for path, selected in expected_paths: index, column = table.get_column(path, 'ExportItem', None) self.assertEqual(column.selected, selected, '{} selected is not {}'.format(path, selected))
def test_single_node_repeats(self, _, __): """ This test ensures that if a repeat only receives one entry, that the selection will still be migrated. """ saved_export_schema = SavedExportSchema.wrap(self.get_json('single_node_repeat')) with mock.patch( 'corehq.apps.export.models.new.FormExportDataSchema.generate_schema_from_builds', return_value=self.schema): instance, _ = convert_saved_export_to_export_instance(self.domain, saved_export_schema) table = instance.get_table([PathNode(name='form'), PathNode(name='repeat', is_repeat=True)]) index, column = table.get_column( [ PathNode(name='form'), PathNode(name='repeat', is_repeat=True), PathNode(name='single_answer'), ], 'ExportItem', None ) self.assertTrue(column.selected)
def async_convert_saved_export_to_export_instance(domain, legacy_export, dryrun=False): export_instance, meta = convert_saved_export_to_export_instance( domain, legacy_export, dryrun=dryrun, ) if not meta.skipped_tables and not meta.skipped_columns: logger.info( 'domain={domain} export_id={export_id} export_type={export_type} ' 'remote={remote} SUCCESS'.format( domain=meta.domain, export_id=meta.saved_export_id, export_type=meta.export_type, remote=meta.is_remote_app_migration, )) for table_meta in meta.skipped_tables: _log_conversion_meta(meta, table_meta, 'table') for column_meta in meta.skipped_columns: _log_conversion_meta(meta, column_meta, 'column')