# -*- coding: utf-8; -*-
import shutil
import tempfile
from unittest.mock import patch, Mock
from . import ImporterTester
try:
from rattail.importing import rattail_bulk as bulk
from .test_rattail import DualRattailTestCase
except ImportError:
pass
else:
class BulkImportTester(DualRattailTestCase, ImporterTester):
handler_class = bulk.BulkFromRattailToRattail
def setUp(self):
self.setup_rattail()
self.tempdir = tempfile.mkdtemp()
self.config.setdefault('rattail', 'workdir', self.tempdir)
self.config.setdefault('rattail', 'timezone.default', 'America/Chicago')
self.handler = self.make_handler()
# TODO: no-op for coverage, how lame is that
self.handler.get_default_keys()
def tearDown(self):
self.teardown_rattail()
shutil.rmtree(self.tempdir)
@property
def model_name(self):
return self.make_importer().model_name
def get_fields(self):
return self.make_importer().fields
def make_handler(self, **kwargs):
if 'config' not in kwargs and hasattr(self, 'config'):
kwargs['config'] = self.config
return self.handler_class(**kwargs)
def import_data(self, host_data=None, **kwargs):
if host_data is None:
fields = self.get_fields()
host_data = list(self.copy_data().values())
for data in host_data:
for field in fields:
data.setdefault(field, None)
with patch.object(self.importer_class, 'normalize_host_data', Mock(return_value=host_data)):
with patch.object(self.handler, 'make_host_session', Mock(return_value=self.host_session)):
return self.handler.import_data(self.model_name, **kwargs)
class TestPersonImport(BulkImportTester):
importer_class = bulk.PersonImporter
sample_data = {
'fred': {
'uuid': 'fred',
'first_name': 'Fred',
'last_name': 'Flintstone',
},
'maurice': {
'uuid': 'maurice',
'first_name': 'Maurice',
'last_name': 'Jones',
},
'zebra': {
'uuid': 'zebra',
'first_name': 'Zebra',
'last_name': 'Jones',
},
}
def test_create(self):
if self.postgresql():
result = self.import_data()
self.assertEqual(result, {'Person': 3})
def test_max_create(self):
if self.postgresql():
result = self.import_data(max_create=1)
self.assertEqual(result, {'Person': 1})
class TestProductImport(BulkImportTester):
importer_class = bulk.ProductImporter
def test_simple_fields(self):
importer = self.make_importer()
self.assertNotIn('regular_price_uuid', importer.simple_fields)
self.assertNotIn('current_price_uuid', importer.simple_fields)