I have a model that uses a function to return a default datetime:
class Company(models.Model):
q1_results_date = models.DateField(
verbose_name='Q1 financial results',
default=quarter_results_date(1),
blank=False,
null=False,
)
def quarter_results_date(month):
return datetime.datetime(
datetime.datetime.now().year,
month,
calendar.monthrange(datetime.datetime.now().year, month)[1]
)
I want to unit test this, which requires me to set datetime.now() to a known value. To do this I am using freezegun.freeze_time
:
def test_quarter_results_date(self):
with freeze_time("2012-01-14"):
print('check datetime.now()', datetime.now())
c = Company.objects.create()
...
However, although the print
statement shows 2012-01-14
, the datetime is not frozen as it still uses today's date when evaluating c1.q1_results_date
.
How can I correct this?