prokoptsev
@prokoptsev

Как при помощи mock и SQLAlchemy изменить дату при автосохранении объекта в базу данных?

Добрый день. В своем 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. Если кто сталкивался с этим, подскажите, что надо переопределить или как можно решить данный вопрос.
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы