def test_multiple_years(self): now = datetime(2000, 1, 1, 0, 0, 0, 0) datetimes = [ datetime(2000, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1997, 12, 1, 0, 0, 0, 0), ] # 12 months back ignores datetime(1999, 1, 1, 0, 0, 0, 0) self.assertEqual( Months.filter(datetimes, number=12, now=now), set([ datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0) ])) # But 13 months back gets it self.assertEqual( Months.filter(datetimes, number=13, now=now), set([ datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0) ])) # But 14 months back gets datetime(1998, 12, 1, 0, 0, 0, 0) self.assertEqual( Months.filter(datetimes, number=14, now=now), set([ datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0) ])) # As does 24 months back self.assertEqual( Months.filter(datetimes, number=24, now=now), set([ datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0) ])) # 36 months back should get datetime(1997, 12, 1, 0, 0, 0, 0) self.assertEqual( Months.filter(datetimes, number=36, now=now), set([ datetime(1997, 12, 1, 0, 0, 0, 0), datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0) ]))
def test_all_input(self): self.assertEqual(Months.filter(self.datetimes, number=5, now=self.now), set([datetime(1999, 10, 1, 0, 0, 0, 0), datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0)])) self.assertEqual(Months.filter(self.datetimes, number=6, now=self.now), set([datetime(1999, 10, 1, 0, 0, 0, 0), datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0)]))
def test_before_start(self): # datetime(1999, 10, 1, 0, 0, 0, 0) is too old to show up # in the results self.assertEqual(Months.filter(self.datetimes, number=4, now=self.now), set([datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0)]))
def test_new_year(self): self.assertEqual( Months.filter(self.datetimes, number=3, now=self.now), set([ datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0) ]))
def test_duplicates(self): # Ensure we get the oldest per-month datetime when there are # duplicates: i.e. not datetime(2000, 1, 1, 1, 0, 0, 0) self.assertEqual( Months.filter(self.datetimes, number=2, now=self.now), set([ datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0) ]))
def test_all_input(self): self.assertEqual( Months.filter(self.datetimes, number=5, now=self.now), set([ datetime(1999, 10, 1, 0, 0, 0, 0), datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0) ])) self.assertEqual( Months.filter(self.datetimes, number=6, now=self.now), set([ datetime(1999, 10, 1, 0, 0, 0, 0), datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0) ]))
def test_before_start(self): # datetime(1999, 10, 1, 0, 0, 0, 0) is too old to show up # in the results self.assertEqual( Months.filter(self.datetimes, number=4, now=self.now), set([ datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0) ]))
def test_multiple_years(self): now = datetime(2000, 1, 1, 0, 0, 0, 0) datetimes = [ datetime(2000, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1997, 12, 1, 0, 0, 0, 0), ] # 12 months back ignores datetime(1999, 1, 1, 0, 0, 0, 0) self.assertEqual(Months.filter(datetimes, number=12, now=now), set([datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0)])) # But 13 months back gets it self.assertEqual(Months.filter(datetimes, number=13, now=now), set([datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0)])) # But 14 months back gets datetime(1998, 12, 1, 0, 0, 0, 0) self.assertEqual(Months.filter(datetimes, number=14, now=now), set([datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0)])) # As does 24 months back self.assertEqual(Months.filter(datetimes, number=24, now=now), set([datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0)])) # 36 months back should get datetime(1997, 12, 1, 0, 0, 0, 0) self.assertEqual(Months.filter(datetimes, number=36, now=now), set([datetime(1997, 12, 1, 0, 0, 0, 0), datetime(1998, 12, 1, 0, 0, 0, 0), datetime(1999, 1, 1, 0, 0, 0, 0), datetime(1999, 12, 1, 0, 0, 0, 0), datetime(2000, 1, 1, 0, 0, 0, 0)]))
def test_current(self): self.assertEqual(Months.filter(self.datetimes, number=1, now=self.now), set([datetime(2000, 2, 1, 0, 0, 0, 0)]))
def test_no_results(self): self.assertEqual(Months.filter([self.now], number=0, now=self.now), set()) self.assertEqual(Months.filter(self.datetimes, number=0, now=self.now), set())
def test_no_input(self): self.assertEqual(Months.filter([], number=1, now=self.now), set())
def test_new_year(self): self.assertEqual(Months.filter(self.datetimes, number=3, now=self.now), set([datetime(1999, 12, 31, 23, 59, 59, 999999), datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0)]))
def test_duplicates(self): # Ensure we get the oldest per-month datetime when there are # duplicates: i.e. not datetime(2000, 1, 1, 1, 0, 0, 0) self.assertEqual(Months.filter(self.datetimes, number=2, now=self.now), set([datetime(2000, 1, 1, 0, 0, 0, 0), datetime(2000, 2, 1, 0, 0, 0, 0)]))
def test_future(self): datetimes = [datetime(2010, 1, 15, 0, 0, 0, 0)] # Wikipedia self.assertEqual(Months.filter(datetimes, number=0, now=self.now), set(datetimes)) self.assertEqual(Months.filter(datetimes, number=1, now=self.now), set(datetimes))