def test_get_week_boundaries(self):
        dates = [
            # Week 1
            datetime.date(2013, 9, 17),  # Tuesday
            datetime.date(2013, 9, 18),  # Wednesday
            datetime.date(2013, 9, 22),  # Sunday

            # Week 2
            datetime.date(2013, 9, 23),  # Monday
            datetime.date(2013, 9, 25),  # Wednesday
            datetime.date(2013, 9, 29),  # Sunday

            # Week 3
            datetime.date(2013, 9, 30),  # Monday
            datetime.date(2013, 10, 2),  # Wednesday
            datetime.date(2013, 10, 6),  # Sunday

        ]

        expected_boundaries = [
            # Week 1
            (get_min_time(datetime.datetime(2013, 9, 16)),
             get_max_time(datetime.datetime(2013, 9, 22))),

            # Week 2
            (get_min_time(datetime.datetime(2013, 9, 23)),
             get_max_time(datetime.datetime(2013, 9, 29))),

            # Week 3
            (get_min_time(datetime.datetime(2013, 9, 30)),
             get_max_time(datetime.datetime(2013, 10, 6))),
        ]

        for index, date in enumerate(dates):
            if index <= 2:
                expected = expected_boundaries[0]
            elif index > 2 and index <= 5:
                expected = expected_boundaries[1]
            else:
                expected = expected_boundaries[2]

            boundaries = get_week_boundaries(date=date)
            self.assertEqual(expected, boundaries)
    def test_get_month_boundaries(self):
        dates = [
            # Month 1
            datetime.date(2013, 9, 1),
            datetime.date(2013, 9, 18),
            datetime.date(2013, 9, 30),

            # Month 2
            datetime.date(2013, 10, 1),
            datetime.date(2013, 10, 20),
            datetime.date(2013, 10, 28),

            # Month 3
            datetime.date(2013, 12, 1),
            datetime.date(2013, 12, 20),
            datetime.date(2013, 12, 28),
        ]

        expected_boundaries = [
            # Month 1
            (get_min_time(datetime.datetime(2013, 9, 1)),
             get_max_time(datetime.datetime(2013, 9, 30))),

            # Month 2
            (get_min_time(datetime.datetime(2013, 10, 1)),
             get_max_time(datetime.datetime(2013, 10, 31))),

            # Month 3
            (get_min_time(datetime.datetime(2013, 12, 1)),
             get_max_time(datetime.datetime(2013, 12, 31))),
        ]

        for index, date in enumerate(dates):
            if index <= 2:
                expected = expected_boundaries[0]
            elif index > 2 and index <= 5:
                expected = expected_boundaries[1]
            else:
                expected = expected_boundaries[2]

            boundaries = get_month_boundaries(date=date)
            self.assertEqual(expected, boundaries)
    def test_get_date_boundaries(self):
        dates = [
            datetime.datetime(2013, 9, 17)
        ]

        expected_boundaries = [
            (get_min_time(dates[0]), get_max_time(dates[0]))
        ]

        for index, date in enumerate(dates):
            expected = expected_boundaries[index]
            boundaries = get_date_boundaries(date=date)
            self.assertEqual(expected, boundaries)
    def test_min_date(self):
        today = datetime.datetime.today()
        expected = today.replace(hour=0, minute=0, second=0, microsecond=0)
        actual = get_min_time(today)

        self.assertEqual(actual, expected)