Добрый день. В своем Flask приложении, я использую SQLAlchemy. У меня есть модель такого типа:
class Entry(db.Model):
__tablename__ = 'entries'
name = db.Column(db.String(100))
created = db.Column(db.DateTime(), default=datetime.now())
updated = db.Column(db.DateTime(), default=datetime.now(), onupdate=datetime.now())
В своих тестах я пытаю сымитировать сохранение в базу с указанным временем. В примере ниже я использую
freezegun, но в таком исполнении тест не работает. Возвращается текущее время создания.
class ViewTestCase(AppliactionTestCase):
def test(self):
with freeze_time("2014-06-01 16:00:00"):
db.session.add(Entry(name="title"))
db.session.commit()
entry = db.session.query(Entry).first()
self.assertEqual(entry.created, datetime(2014, 6, 1, 16, 0, 0))
self.assertEqual(entry.updated, datetime(2014, 6, 1, 16, 0, 0))
with freeze_time("2014-07-01 17:00:00"):
entry.name = 'edited title'
db.session.add(entry)
db.session.commit()
entry = db.session.query(Entry).first()
self.assertEqual(entry.created, datetime(2014, 6, 1, 16, 0, 0))
self.assertEqual(entry.created, datetime(2014, 7, 1, 17, 0, 0))
Я также пытался с помощью mock патчить что бы db.DateTime.python_type возвращал FakeDatetime, но результат тот же.
Я глубоко не углублялся в устройство SQLAlchemy. Если кто сталкивался с этим, подскажите, что надо переопределить или как можно решить данный вопрос.