59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
from datetime import datetime, timedelta
|
|
from uuid import uuid4
|
|
|
|
from cqlengine.tests.base import BaseCassEngTestCase
|
|
|
|
from cqlengine.exceptions import ModelException
|
|
from cqlengine.management import sync_table
|
|
from cqlengine.management import drop_table
|
|
from cqlengine.models import Model
|
|
from cqlengine import columns
|
|
from cqlengine import query
|
|
|
|
class DateTimeQueryTestModel(Model):
|
|
__keyspace__ = 'test'
|
|
user = columns.Integer(primary_key=True)
|
|
day = columns.DateTime(primary_key=True)
|
|
data = columns.Text()
|
|
|
|
class TestDateTimeQueries(BaseCassEngTestCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestDateTimeQueries, cls).setUpClass()
|
|
sync_table(DateTimeQueryTestModel)
|
|
|
|
cls.base_date = datetime.now() - timedelta(days=10)
|
|
for x in range(7):
|
|
for y in range(10):
|
|
DateTimeQueryTestModel.create(
|
|
user=x,
|
|
day=(cls.base_date+timedelta(days=y)),
|
|
data=str(uuid4())
|
|
)
|
|
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
super(TestDateTimeQueries, cls).tearDownClass()
|
|
drop_table(DateTimeQueryTestModel)
|
|
|
|
def test_range_query(self):
|
|
""" Tests that loading from a range of dates works properly """
|
|
start = datetime(*self.base_date.timetuple()[:3])
|
|
end = start + timedelta(days=3)
|
|
|
|
results = DateTimeQueryTestModel.filter(user=0, day__gte=start, day__lt=end)
|
|
assert len(results) == 3
|
|
|
|
def test_datetime_precision(self):
|
|
""" Tests that millisecond resolution is preserved when saving datetime objects """
|
|
now = datetime.now()
|
|
pk = 1000
|
|
obj = DateTimeQueryTestModel.create(user=pk, day=now, data='energy cheese')
|
|
load = DateTimeQueryTestModel.get(user=pk)
|
|
|
|
assert abs(now - load.day).total_seconds() < 0.001
|
|
obj.delete()
|
|
|