Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_datetime_date_method():
now = datetime.datetime.now()
assert now.date() == FakeDate(2012, 1, 14)
def get_fake_date():
return FakeDate
def test_import_after_start():
with freeze_time('2012-01-14'):
assert 'tests.another_module' not in sys.modules.keys()
from tests import another_module
# Reals
assert another_module.get_datetime() is datetime.datetime
assert another_module.get_datetime() is FakeDatetime
assert another_module.get_date() is datetime.date
assert another_module.get_date() is FakeDate
assert another_module.get_time() is time.time
assert another_module.get_time() is fake_time
assert another_module.get_localtime() is time.localtime
assert another_module.get_localtime() is fake_localtime
assert another_module.get_gmtime() is time.gmtime
assert another_module.get_gmtime() is fake_gmtime
assert another_module.get_strftime() is time.strftime
assert another_module.get_strftime() is fake_strftime
assert another_module.get_timegm() is calendar.timegm
assert another_module.get_timegm() is fake_timegm
# Fakes
assert another_module.get_fake_datetime() is FakeDatetime
assert another_module.get_fake_date() is FakeDate
assert another_module.get_fake_time() is fake_time
assert another_module.get_fake_localtime() is fake_localtime
def is_fake_date(obj):
return obj.__class__ is FakeDate
def test_min_and_max():
freezer = freeze_time("2012-01-14")
real_datetime = datetime.datetime
real_date = datetime.date
freezer.start()
assert datetime.datetime.min.__class__ == FakeDatetime
assert datetime.datetime.max.__class__ == FakeDatetime
assert datetime.date.min.__class__ == FakeDate
assert datetime.date.max.__class__ == FakeDate
assert datetime.datetime.min.__class__ != real_datetime
assert datetime.datetime.max.__class__ != real_datetime
assert datetime.date.min.__class__ != real_date
assert datetime.date.max.__class__ != real_date
freezer.stop()
assert datetime.datetime.min.__class__ == datetime.datetime
assert datetime.datetime.max.__class__ == datetime.datetime
assert datetime.date.min.__class__ == datetime.date
assert datetime.date.max.__class__ == datetime.date
assert datetime.datetime.min.__class__ != FakeDatetime
assert datetime.datetime.max.__class__ != FakeDatetime
assert datetime.date.min.__class__ != FakeDate
assert datetime.date.max.__class__ != FakeDate
freeze_factory = FrozenDateTimeFactory(self.time_to_freeze)
is_already_started = len(freeze_factories) > 0
freeze_factories.append(freeze_factory)
tz_offsets.append(self.tz_offset)
ignore_lists.append(self.ignore)
tick_flags.append(self.tick)
if is_already_started:
return freeze_factory
# Change the modules
calendar.timegm = fake_timegm
datetime.datetime = FakeDatetime
datetime.date = FakeDate
time.time = fake_time
time.localtime = fake_localtime
time.gmtime = fake_gmtime
time.strftime = fake_strftime
if uuid_generate_time_attr:
setattr(uuid, uuid_generate_time_attr, None)
uuid._UuidCreate = None
uuid._last_timestamp = None
copyreg.dispatch_table[real_datetime] = pickle_fake_datetime
copyreg.dispatch_table[real_date] = pickle_fake_date
# Change any place where the module had already been imported
to_patch = [
('real_date', real_date, FakeDate),
FakeDate.min = date_to_fakedate(real_date.min)
FakeDate.max = date_to_fakedate(real_date.max)
class FakeDatetimeMeta(FakeDateMeta):
@classmethod
def __instancecheck__(self, obj):
return isinstance(obj, real_datetime)
@classmethod
def __subclasscheck__(cls, subclass):
return issubclass(subclass, real_datetime)
class FakeDatetime(with_metaclass(FakeDatetimeMeta, real_datetime, FakeDate)):
def __new__(cls, *args, **kwargs):
return real_datetime.__new__(cls, *args, **kwargs)
def __add__(self, other):
result = real_datetime.__add__(self, other)
if result is NotImplemented:
return result
return datetime_to_fakedatetime(result)
def __sub__(self, other):
result = real_datetime.__sub__(self, other)
if result is NotImplemented:
return result
if isinstance(result, real_datetime):
return datetime_to_fakedatetime(result)
else:
def date_to_fakedate(date):
return FakeDate(date.year,
date.month,
date.day)