Files
@ 328c8377c5ec
Branch filter:
Location: rattail-project/rattail/rattail/tests/importing/test_rattail.py
328c8377c5ec
3.8 KiB
text/x-python
Add new Rattail -> Rattail main importer, with new/final framework
Plus tests, yay. Also includes a couple of other tweaks which came up
in other testing.
Plus tests, yay. Also includes a couple of other tweaks which came up
in other testing.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | # -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
from unittest import TestCase
import sqlalchemy as sa
from mock import patch
from fixture import TempIO
from rattail.db import model, Session, SessionBase
from rattail.importing import rattail as rattail_importing
from rattail.tests import RattailMixin, RattailTestCase
class DualRattailMixin(RattailMixin):
def setup_rattail(self):
super(DualRattailMixin, self).setup_rattail()
if 'host' not in self.config.rattail_engines:
self.config.rattail_engines['host'] = sa.create_engine('sqlite://')
self.host_engine = self.config.rattail_engines['host']
self.config.setdefault('rattail.db', 'keys', 'default, host')
self.config.setdefault('rattail.db', 'host.url', unicode(self.host_engine.url))
model = self.get_rattail_model()
model.Base.metadata.create_all(bind=self.host_engine)
self.host_session = Session(bind=self.host_engine)
def teardown_rattail(self):
super(DualRattailMixin, self).teardown_rattail()
self.host_session.close()
model = self.get_rattail_model()
model.Base.metadata.drop_all(bind=self.config.rattail_engines['host'])
if hasattr(self, 'tempio'):
self.tempio = None
class DualRattailTestCase(DualRattailMixin, TestCase):
pass
class TestFromRattailToRattail(DualRattailTestCase):
def make_handler(self, **kwargs):
return rattail_importing.FromRattailToRattail(self.config, **kwargs)
def test_host_title(self):
handler = self.make_handler()
self.assertEqual(handler.host_title, "Rattail (host)")
def test_make_session(self):
handler = self.make_handler()
session = handler.make_session()
self.assertIsInstance(session, SessionBase)
self.assertIs(session.bind, self.config.rattail_engine)
def test_make_host_session(self):
# default is 'host'
handler = self.make_handler()
session = handler.make_host_session()
self.assertIsInstance(session, SessionBase)
self.assertIs(session.bind, self.host_engine)
# invalid dbkey
handler = self.make_handler(dbkey='other')
self.assertRaises(KeyError, handler.make_host_session)
# alternate dbkey
self.config.rattail_engines['other'] = self.config.rattail_engines['host']
handler = self.make_handler(dbkey='other')
session = handler.make_host_session()
self.assertIsInstance(session, SessionBase)
self.assertIs(session.bind, self.host_engine)
class TestFromRattail(DualRattailTestCase):
def make_importer(self, model_class=None, **kwargs):
kwargs.setdefault('host_session', self.host_session)
importer = rattail_importing.FromRattail(self.config, **kwargs)
if model_class:
importer.model_class = model_class
return importer
def test_host_model_class(self):
importer = self.make_importer()
self.assertIsNone(importer.model_class)
self.assertIsNone(importer.host_model_class)
importer = self.make_importer(model.Product)
self.assertIs(importer.host_model_class, model.Product)
def test_query(self):
importer = self.make_importer(model.Product)
importer.query()
def test_normalize_host_object(self):
importer = self.make_importer(model.Product)
product = model.Product()
with patch.object(importer, 'normalize_local_object') as normalize_local:
normalize_local.return_value = {}
data = importer.normalize_host_object(product)
self.assertEqual(data, {})
normalize_local.assert_called_once_with(product)
self.assertEqual(data, importer.normalize_local_object(product))
|