# HG changeset patch # User Filip de Waard # Date 1271987489 -7200 # Node ID 0fd66564ac9275e8f2043f6a9b09772088560cfe # Parent 12bad6eff4c49cbfc8f0721df5ddb900679b49e1 polished model unittests diff -r 12bad6eff4c49cbfc8f0721df5ddb900679b49e1 -r 0fd66564ac9275e8f2043f6a9b09772088560cfe vix/model/__init__.py --- a/vix/model/__init__.py Fri Apr 23 03:11:13 2010 +0200 +++ b/vix/model/__init__.py Fri Apr 23 03:51:29 2010 +0200 @@ -64,7 +64,7 @@ """ type = schema.TextField(default=u"user") - created = schema.DateTimeField(default=datetime.utcnow) + created = schema.DateTimeField() updated = schema.DateTimeField() id = username = schema.TextField() @@ -83,6 +83,10 @@ DELETE = schema.BooleanField(default=False) )) ))) + + def __init__(self, **values): + super(User, self).__init__(**values) + self.created = datetime.utcnow() def store(self, db): """Validates the document and calls schema.Document.store(db).""" diff -r 12bad6eff4c49cbfc8f0721df5ddb900679b49e1 -r 0fd66564ac9275e8f2043f6a9b09772088560cfe vix/tests/test_models.py --- a/vix/tests/test_models.py Fri Apr 23 03:11:13 2010 +0200 +++ b/vix/tests/test_models.py Fri Apr 23 03:51:29 2010 +0200 @@ -28,7 +28,7 @@ import couchdb import bcrypt -from testfixtures import Replacer, test_datetime, test_time +from testfixtures import Replacer import vix.tests import vix.model as model @@ -64,30 +64,31 @@ self.assertEquals(user.password, u'$2a$10$zovtWSOSm0PTsiuovPOxC.uEJxsEzVf0AlswKvgT/jtxMqf44.Kpi') - #max difference between current time and .created is μs 9,999,999 μs - now = datetime.utcnow() - timedelta = now - user.created - self.assertTrue(timedelta.seconds < 1) + class _datetime(object): + def utcnow(self): + return datetime(2010, 4, 19, 11, 12, 5) + + class _datetime2(object): + def utcnow(self): + return datetime(2010, 4, 23, 3, 19, 40) - #and the same for .updated - timedelta = now - user.updated - self.assertTrue(timedelta.seconds < 1) + with Replacer() as r: + r.replace('vix.model.datetime', _datetime()) - #quick nap, needs to be 1 second because that is the highest - #precision that CouchDB-Python stores DateTimeFields in - time.sleep(1) + user = model.User(username=u'fmw2', password=p, + mail=u'fmw@vix.io', real_name=u'Filip de Waard') - #reload user - user.store(model.db) - user = model.User.load(model.db, u'fmw') + self.assertEquals(user.created, datetime(2010, 4, 19, 11, 12, 5)) + self.assertEquals(user.updated, None) - #test if .updated got refreshed - timedelta = datetime.utcnow() - user.updated - self.assertTrue(timedelta.seconds < 1) + r.replace('vix.model.datetime', _datetime2()) - #make sure .created doesn't get updated - timedelta = now - user.created - self.assertTrue(timedelta.seconds < 1) + #reload user + user.store(model.db) + user = model.User.load(model.db, u'fmw2') + + self.assertEquals(user.created, datetime(2010, 4, 19, 11, 12, 5)) + self.assertEquals(user.updated, datetime(2010, 4, 23, 3, 19, 40)) #TODO: add profile @@ -239,8 +240,6 @@ user = user.load(model.db, u'fmw') self.assertEquals(user.get_permissions('vix_tests', 'news'), None) - - #TODO: use mocks in other tests here def test_Session(self): """Test session model object.""" @@ -264,15 +263,27 @@ r.replace('vix.model.random.randint', _random) session = model.Session() - - self.assertEquals(session.id, hashlib.md5("%f%i" % ( - _time(), _random(0,0))).hexdigest()) + token = hashlib.md5("%f%i" % (_time(), _random(0,0))).hexdigest() + + self.assertEquals(session.id, token) self.assertEquals(session.created, datetime(2010, 4, 19, 11, 12, 5)) - self.assertEquals(session.expires, datetime(2010, 4, 19, 11, 13, 5)) + #check with different duration session = model.Session(duration=300) self.assertEquals(session.expires, datetime(2010, 4, 19, 11, 17, 5)) + + #make sure that the dates don't change when updating + session.store(model.db) + + session = model.Session() + session = session.load(model.db, token) + session.store(model.db) + + self.assertEquals(session.created, + datetime(2010, 4, 19, 11, 12, 5)) + self.assertEquals(session.expires, + datetime(2010, 4, 19, 11, 17, 5))