Тест «заказ создан сегодня» падает на CI только по ночам
def is_created_today(order):
return order.created_at.date() == datetime.now().date()
def test_new_order_is_today():
order = create_order() # created_at = datetime.now(timezone.utc)
assert is_created_today(order)
У разработчиков в Москве тест всегда зелёный. Сервер CI работает в UTC, и тест падает там в прогонах между полуночью и тремя часами ночи по Москве. Что происходит?
- Сравниваются дата в UTC и дата по местному времени — ночью они разные
- CI в полночь очищает базу, и заказ пропадает до проверки
- datetime.now() на CI возвращает время с задержкой в несколько часов
- date() у объекта с часовым поясом ночью бросает исключение
