def test_column_name_mapping(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     mappings = {'test_attr': 'test_attr_mapped'}
     mapper = channel_import.generate_row_mapper(mappings=mappings)
     record = MagicMock()
     record.test_attr_mapped = 'test_val'
     self.assertEqual(mapper(record, 'test_attr'), 'test_val')
 def test_method_mapping(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     table_map = 'test_map_method'
     test_map_method = Mock()
     channel_import.test_map_method = test_map_method
     mapper = channel_import.generate_table_mapper(table_map=table_map)
     self.assertEqual(mapper, test_map_method)
 def test_base_table_mapper(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     class_mock = Mock()
     [record for record in channel_import.base_table_mapper(class_mock)]
     channel_import.destination.assert_has_calls(
         [call.session.query(class_mock),
          call.session.query().all()])
 def test_no_column_mapping(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     mappings = {'test_attr': 'test_attr_mapped'}
     mapper = channel_import.generate_row_mapper(mappings=mappings)
     record = Mock(spec=['test_attr'])
     with self.assertRaises(AttributeError):
         mapper(record, 'test_attr')
 def test_no_merge_records_bulk_insert_flush(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     record_mock = MagicMock(spec=['__table__'])
     record_mock.__table__.columns.items.return_value = [('test_attr', MagicMock())]
     channel_import.destination.get_class.return_value = record_mock
     channel_import.table_import(MagicMock(), lambda x, y: 'test_val', lambda x: [{}]*10000, 0)
     channel_import.destination.session.bulk_insert_mappings.assert_has_calls([call(record_mock, [{'test_attr': 'test_val'}]*10000)])
     channel_import.destination.session.flush.assert_called_once_with()
 def test_method_mapping(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     mappings = {'test_attr': 'test_map_method'}
     mapper = channel_import.generate_row_mapper(mappings=mappings)
     record = {}
     test_map_method = Mock()
     test_map_method.return_value = 'test_val'
     channel_import.test_map_method = test_map_method
     self.assertEqual(mapper(record, 'test_attr'), 'test_val')
 def test_no_models_unflushed_rows_passed_through(self, apps_mock,
                                                  tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     record_mock = MagicMock(spec=['__table__'])
     channel_import.destination.get_class.return_value = record_mock
     self.assertEqual(
         0,
         channel_import.table_import(MagicMock(), lambda x, y: None,
                                     lambda x: [], 0))
 def test_destination_tree_ids(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     class_mock = Mock()
     channel_import.destination.get_class.return_value = class_mock
     channel_import.get_all_destination_tree_ids()
     channel_import.destination.assert_has_calls([
         call.session.query(class_mock.tree_id),
         call.session.query().distinct(),
         call.session.query().distinct().all()
     ])
 def test_merge_records_merge_flush(self, apps_mock, tree_id_mock, BridgeMock):
     from kolibri.content.utils.channel_import import merge_models
     channel_import = ChannelImport('test')
     record_mock = Mock(spec=['__table__'])
     record_mock.__table__.columns.items.return_value = [('test_attr', MagicMock())]
     channel_import.destination.get_class.return_value = record_mock
     model_mock = Mock()
     merge_models.append(model_mock)
     channel_import.table_import(model_mock, lambda x, y: 'test_val', lambda x: [{}]*10000, 0)
     channel_import.destination.session.merge.assert_has_calls([call(record_mock(**{'test_attr': 'test_val'}))]*10000)
     channel_import.destination.session.flush.assert_called_once_with()
 def test_merge_records_merge_no_flush(self, apps_mock, tree_id_mock,
                                       BridgeMock):
     from kolibri.content.utils.channel_import import merge_models
     channel_import = ChannelImport('test')
     record_mock = MagicMock(spec=['__table__'])
     record_mock.__table__.columns.items.return_value = [('test_attr',
                                                          MagicMock())]
     channel_import.destination.get_class.return_value = record_mock
     model_mock = MagicMock()
     model_mock._meta.pk.name = 'test_attr'
     merge_models.append(model_mock)
     channel_import.merge_record = Mock()
     channel_import.table_import(model_mock, lambda x, y: 'test_val',
                                 lambda x: [{}] * 100, 0)
     channel_import.destination.session.flush.assert_not_called()
 def test_get_config(self, db_path_mock, apps_mock, tree_id_mock,
                     BridgeMock):
     ChannelImport('test')
     apps_mock.assert_has_calls([
         call.get_app_config('content'),
         call.get_app_config().get_models(include_auto_created=True)
     ])
 def test_two_bridges(self, db_path_mock, apps_mock, tree_id_mock,
                      BridgeMock):
     db_path_mock.return_value = 'test'
     ChannelImport('test')
     BridgeMock.assert_has_calls(
         [call(sqlite_file_path='test'),
          call(app_name='content')])
 def test_import_channel_methods_called(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     model_mock = Mock(spec=['__name__'])
     channel_import.content_models = [model_mock]
     mapping_mock = Mock()
     channel_import.schema_mapping = {
         model_mock: mapping_mock
     }
     with patch.object(channel_import, 'generate_row_mapper'),\
         patch.object(channel_import, 'generate_table_mapper'),\
             patch.object(channel_import, 'table_import'):
         channel_import.import_channel_data()
         channel_import.generate_row_mapper.assert_called_once_with(mapping_mock.get('per_row'))
         channel_import.generate_table_mapper.assert_called_once_with(mapping_mock.get('per_table'))
         channel_import.table_import.assert_called_once()
         channel_import.destination.session.commit.assert_called_once_with()
 def test_two_one_two(self, apps_mock, tree_ids_mock, BridgeMock):
     tree_ids_mock.return_value = [1, 2]
     channel_import = ChannelImport('test')
     self.assertEqual(channel_import.find_unique_tree_id(), 3)
 def test_tree_id(self, apps_mock, tree_id_mock, BridgeMock):
     ChannelImport('test')
     tree_id_mock.assert_called_once_with()
 def test_channel_id(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     self.assertEqual(channel_import.channel_id, 'test')
 def test_end(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     channel_import.end()
     channel_import.destination.end.assert_has_calls([call(), call()])
 def test_no_column_mapping(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     table_map = 'test_map_method'
     with self.assertRaises(AttributeError):
         channel_import.generate_table_mapper(table_map=table_map)
 def test_base_mapper(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     mapper = channel_import.generate_row_mapper()
     record = MagicMock()
     record.test_attr = 'test_val'
     self.assertEqual(mapper(record, 'test_attr'), 'test_val')
 def test_base_mapper(self, apps_mock, tree_id_mock, BridgeMock):
     channel_import = ChannelImport('test')
     mapper = channel_import.generate_table_mapper()
     self.assertEqual(mapper, channel_import.base_table_mapper)