adding tests around io for all column types

This commit is contained in:
Blake Eggleston
2013-06-03 15:46:53 -07:00
parent f2b9c14e29
commit 5eef9bd18d

View File

@@ -0,0 +1,136 @@
from datetime import datetime, timedelta
from decimal import Decimal
from uuid import uuid1, uuid4, UUID
from unittest import SkipTest
from cqlengine.tests.base import BaseCassEngTestCase
from cqlengine.management import create_table
from cqlengine.management import delete_table
from cqlengine.models import Model
from cqlengine import columns
class BaseColumnIOTest(BaseCassEngTestCase):
TEST_MODEL = None
TEST_COLUMN = None
@property
def PKEY_VAL(self):
raise NotImplementedError
@property
def DATA_VAL(self):
raise NotImplementedError
@classmethod
def setUpClass(cls):
super(BaseColumnIOTest, cls).setUpClass()
if not cls.TEST_COLUMN: return
class IOTestModel(Model):
table_name = cls.TEST_COLUMN.db_type + "_io_test_model_{}".format(uuid4().hex[:8])
pkey = cls.TEST_COLUMN(primary_key=True)
data = cls.TEST_COLUMN()
cls.TEST_MODEL = IOTestModel
create_table(cls.TEST_MODEL)
#tupleify
if not isinstance(cls.PKEY_VAL, tuple):
cls.PKEY_VAL = cls.PKEY_VAL,
if not isinstance(cls.DATA_VAL, tuple):
cls.DATA_VAL = cls.DATA_VAL,
@classmethod
def tearDownClass(cls):
super(BaseColumnIOTest, cls).tearDownClass()
if not cls.TEST_COLUMN: return
delete_table(cls.TEST_MODEL)
def comparator_converter(self, val):
""" If you want to convert the original value used to compare the model vales """
return val
def test_column_io(self):
""" Tests the given models class creates and retrieves values as expected """
if not self.TEST_COLUMN: return
for pkey, data in zip(self.PKEY_VAL, self.DATA_VAL):
#create
m1 = self.TEST_MODEL.create(pkey=pkey, data=data)
#get
m2 = self.TEST_MODEL.get(pkey=pkey)
assert m1.pkey == m2.pkey == self.comparator_converter(pkey), self.TEST_COLUMN
assert m1.data == m2.data == self.comparator_converter(data), self.TEST_COLUMN
#delete
self.TEST_MODEL.filter(pkey=pkey).delete()
class TestTextIO(BaseColumnIOTest):
TEST_COLUMN = columns.Text
PKEY_VAL = 'bacon'
DATA_VAL = 'monkey'
class TestInteger(BaseColumnIOTest):
TEST_COLUMN = columns.Integer
PKEY_VAL = 5
DATA_VAL = 6
class TestDateTime(BaseColumnIOTest):
TEST_COLUMN = columns.DateTime
now = datetime(*datetime.now().timetuple()[:6])
PKEY_VAL = now
DATA_VAL = now + timedelta(days=1)
class TestDate(BaseColumnIOTest):
TEST_COLUMN = columns.Date
now = datetime.now().date()
PKEY_VAL = now
DATA_VAL = now + timedelta(days=1)
class TestUUID(BaseColumnIOTest):
TEST_COLUMN = columns.UUID
PKEY_VAL = str(uuid4()), uuid4()
DATA_VAL = str(uuid4()), uuid4()
def comparator_converter(self, val):
return val if isinstance(val, UUID) else UUID(val)
class TestTimeUUID(BaseColumnIOTest):
TEST_COLUMN = columns.TimeUUID
PKEY_VAL = str(uuid1()), uuid1()
DATA_VAL = str(uuid1()), uuid1()
def comparator_converter(self, val):
return val if isinstance(val, UUID) else UUID(val)
class TestBooleanIO(BaseColumnIOTest):
TEST_COLUMN = columns.Boolean
PKEY_VAL = True
DATA_VAL = False
class TestFloatIO(BaseColumnIOTest):
TEST_COLUMN = columns.Float
PKEY_VAL = 3.14
DATA_VAL = -1982.11
class TestDecimalIO(BaseColumnIOTest):
TEST_COLUMN = columns.Decimal
PKEY_VAL = Decimal('1.35'), 5, '2.4'
DATA_VAL = Decimal('0.005'), 3.5, '8'
def comparator_converter(self, val):
return Decimal(val)