def test_stops_bymonth(self): """Test if create stops, checks bymonth, bymonthday, count and start parameters work properly """ days = list( tardis.interface.stops(tardis.MONTHLY, bymonth=(1, 4, 7, 10), bymonthday=15, count=4, start=datetime(datetime.now().year, 1, 1))) year = datetime.now().year day = 15 dt1 = datetime(year, 1, day) dt4 = datetime(year, 4, day) dt7 = datetime(year, 7, day) dt10 = datetime(year, 10, day) self.assertTrue(len(days) == 4) dl1 = tardis.Tardis(datetime=dt1, timezone='UTC') self.assertEqual(days[0], dl1) dl4 = tardis.Tardis(datetime=dt4, timezone='UTC') self.assertEqual(days[1], dl4) dl7 = tardis.Tardis(datetime=dt7, timezone='UTC') self.assertEqual(days[2], dl7) dl10 = tardis.Tardis(datetime=dt10, timezone='UTC') self.assertEqual(days[3], dl10)
def test_le(self): dt = datetime.utcnow() dt1 = tardis.Tardis(dt, timezone="UTC") dt2 = tardis.Tardis(dt, timezone="UTC") dt3 = self.do self.assertTrue(dt2 <= dt1) self.assertTrue(dt3 <= dt2)
def test_normalize(self): dt1 = tardis.Tardis() dt2 = tardis.Tardis(timezone="US/Eastern") dt1.truncate('minute') dt2.truncate('minute') dt_normalized = tardis.normalize(dt1.datetime, "US/Eastern") self.assertEqual(dt2.datetime, dt_normalized)
def test_equal(self): d1 = tardis.Tardis() d2 = deepcopy(d1) self.assertEqual(d1, d2) self.assertFalse(d1 != d2, 'Overloaded __ne__ is not correct') d1 = tardis.Tardis(datetime(2015, 1, 1), timezone='US/Pacific') d2 = tardis.Tardis(datetime(2015, 1, 1, 8), timezone='UTC') self.assertEqual(d1, d2)
def test_timezone_tardis_to_datetime_to_tardis_utc(self): d1 = tardis.Tardis() d2 = tardis.Tardis(d1.datetime) # these tardis should be the same self.assertEqual(d1.next_day(1), d2.next_day(1)) self.assertEqual(d2.last_week(), d2.last_week()) self.assertEqual(d1.timezone, d2.timezone) self.assertEqual(d1, d2)
def test_timezone_tardis_to_datetime_to_tardis_non_utc(self): """Test if when you create Tardis object from Tardis' datetime it still behaves the same """ d1 = tardis.Tardis(timezone='America/Chicago') d2 = tardis.Tardis(d1.datetime) # these tardis should be the same self.assertEqual(d1.next_day(1), d2.next_day(1)) self.assertEqual(d2.last_week(), d2.last_week()) self.assertEqual(d1.timezone, d2.timezone) self.assertEqual(d1, d2)
def test_initialize_with_naive_datetime_with_pytz_timezone(self): dt = datetime(2015, 1, 1) do = tardis.Tardis(dt, timezone=pytz.utc) dt = pytz.utc.localize(dt) self.assertEqual(do.datetime, dt) self.assertEqual(do.timezone, pytz.utc)
def test_initialize_without_datetime_without_timezone( self, mock_datetime_timezone): dt = pytz.utc.localize(datetime(2015, 1, 1)) mock_datetime_timezone.return_value = dt do = tardis.Tardis() self.assertEqual(do.datetime, dt) self.assertEqual(do.timezone, pytz.utc)
def test_tardis_with_timezone(self): dt = datetime.utcnow() d = tardis.Tardis(datetime=dt, timezone=UTC) d = d.shift("US/Eastern") dt = pytz.utc.localize(dt).astimezone(est) dt = est.normalize(dt) self.assertEqual(dt, d.datetime) self.assertEqual(est, d.timezone)
def test_tardis_with_only_timezone(self): dt = datetime.utcnow() dt = pytz.utc.localize(dt) dt = est.normalize(dt) dt = dt.replace(second=0, microsecond=0) d = tardis.Tardis(timezone="US/Eastern") d.truncate('minute') self.assertEqual(est, d.timezone) self.assertEqual(dt, d._dt)
def test_range_with_start(self): dates1 = [] for do in tardis.stops(tardis.DAILY, count=5, start=datetime.utcnow()): do.truncate('minute') dates1.append(do) do = tardis.Tardis().truncate('minute') dates2 = [] for x in range(5): dates2.append(do.next_day(x)) self.assertEqual(dates1, dates2)
def test_localize_datetime(self): dt = datetime.utcnow() tz = pytz.timezone("US/Pacific") dt = tz.localize(dt) d = tardis.Tardis(dt) d2 = d.shift('US/Pacific') self.assertEqual(d.timezone.tzname(None), "US/Pacific") self.assertEqual(d.datetime, dt) self.assertEqual(d.datetime, d2.datetime)
def test_initialize_with_naive_datetime_with_string_timezone(self): dt = datetime(2015, 1, 1) tz_str = 'US/Pacific' tz = pytz.timezone(tz_str) do = tardis.Tardis(dt, timezone=tz_str) tz = tz.localize(datetime(2015, 1, 1)).tzinfo dt = tz.localize(dt) self.assertEqual(do.datetime, dt) self.assertEqual(do.timezone, tz)
def test_initialize_without_datetime_with_pytz_timezone( self, mock_datetime_timezone): tz = pytz.timezone('US/Pacific') dt = tz.localize(datetime(2015, 1, 1)) tz = dt.tzinfo mock_datetime_timezone.return_value = dt do = tardis.Tardis(timezone=tz) self.assertEqual(do.datetime, dt) self.assertEqual(do.timezone, tz)
def test_initialize_with_tzinfo_pytz(self): aware_dt_pytz = datetime(2013, 1, 3, 4, 31, 14, 148540, tzinfo=pytz.utc) do = tardis.Tardis(datetime=aware_dt_pytz) self.assertTrue(isinstance(do, tardis.Tardis))
def test_initialize_with_tzinfo_generic(self): aware_dt_generic = datetime(2013, 1, 3, 4, 31, 14, 148540, tzinfo=generic_utc) do = tardis.Tardis(datetime=aware_dt_generic) self.assertTrue(isinstance(do, tardis.Tardis))
def test_initialize_with_naive_datetime_with_dateutil_timezone(self): dt = datetime(2015, 1, 1) tz = tzoffset(None, -22500) do = tardis.Tardis(dt, timezone=tz) utcoffset = tz.utcoffset(None) total_seconds = ( (utcoffset.microseconds + (utcoffset.seconds + utcoffset.days * 24 * 3600) * 10**6) / 10**6) tz = pytz.FixedOffset(total_seconds / 60) dt = tz.localize(dt) self.assertEqual(do.datetime, dt) self.assertEqual(do.timezone, tz)
def test_range_with_start_and_stop(self): dates1 = [] tomorrow = datetime.utcnow() + timedelta(days=1) for do in tardis.stops(tardis.DAILY, start=datetime.utcnow(), stop=tomorrow): do.truncate('minute') dates1.append(do) do = tardis.Tardis().truncate('minute') dates2 = [] for x in range(2): dates2.append(do.next_day(x)) self.assertEqual(dates1, dates2)
def test_initialize_without_datetime_with_dateutil_timezone( self, mock_datetime_timezone): tz = tzoffset(None, -22500) dt = datetime(2015, 1, 1, tzinfo=tz) utcoffset = tz.utcoffset(None) total_seconds = ( (utcoffset.microseconds + (utcoffset.seconds + utcoffset.days * 24 * 3600) * 10**6) / 10**6) tz = pytz.FixedOffset(total_seconds / 60) dt = tz.normalize(dt) mock_datetime_timezone.return_value = dt do = tardis.Tardis(timezone=tz) self.assertEqual(do.datetime, dt) self.assertEqual(do.timezone, tz)
def test_replace(self): do = tardis.Tardis(datetime(2015, 1, 1), timezone='US/Pacific') dt = do.datetime # Check if parts are okay self.assertEqual(do.replace(hour=8).datetime.hour, 8) self.assertEqual(do.replace(minute=23).datetime.minute, 23) self.assertEqual(do.replace(second=45).datetime.second, 45) # Asserts on datetimes self.assertEqual(do.replace(hour=8).datetime, dt.replace(hour=8)) self.assertEqual(do.replace(minute=38).datetime, dt.replace(minute=38)) self.assertEqual(do.replace(second=48).datetime, dt.replace(second=48)) # Test that the timezone does not change self.assertEqual(do.replace(second=45).timezone, do.timezone) # Test the datetime eight_hours_late = dt + timedelta(hours=8) self.assertEqual(do.replace(hour=8).datetime, eight_hours_late)
def test_tardis_with_datetime(self): dt = datetime.utcnow() d = tardis.Tardis(datetime=dt, timezone=UTC) dt = pytz.utc.localize(dt) self.assertEqual(dt, d._dt) self.assertEqual(pytz.utc, d.timezone)
def test_humanize_future(self, mock_now): mock_now.return_value = tardis.Tardis(datetime(2014, 12, 31), timezone='US/Pacific') do = tardis.Tardis(datetime(2015, 1, 1), timezone='US/Pacific') self.assertEqual(do.humanize(), 'a day from now')
def test_humanize_past(self, mock_now): mock_now.return_value = tardis.Tardis(datetime(2015, 1, 2), timezone='US/Pacific') do = tardis.Tardis(datetime(2015, 1, 1), timezone='US/Pacific') self.assertEqual(do.humanize(), 'a day ago')
def test_datetime_timezone(self): do = tardis.Tardis(timezone="US/Eastern") do.truncate("minute") dt1 = tardis.datetime_timezone(tz="US/Eastern") self.assertEqual(dt1.replace(second=0, microsecond=0), do.datetime)
def test_parse_default(self): do = tardis.parse('2016-07-01T11:00:00+02:00', dayfirst=False) dt1 = tardis.Tardis(datetime=datetime(2016, 7, 1, 11, 0), timezone=pytz.FixedOffset(120)) self.assertEqual(do.datetime, dt1.datetime)
def setUp(self): self.naive_dt = datetime(2013, 1, 3, 4, 31, 14, 148540) self.do = tardis.Tardis(datetime=self.naive_dt, timezone="UTC")
def test_datetime_localization(self): dt1 = self.do.datetime dt2 = tardis.Tardis(dt1).datetime self.assertEqual(dt1, dt2)
def test_not_equal(self): d = tardis.Tardis() self.assertNotEqual(d, None)
def test_lt(self): dt1 = self.do dt2 = tardis.Tardis() self.assertTrue(dt1 < dt2)
def test_gt(self): dt1 = self.do dt2 = tardis.Tardis() self.assertTrue(dt2 > dt1)