def test_calculate_date_range_non_leap(self):
        expected = datetime.datetime.combine(datetime.date(2013, 2, 27),
                                             self.min_time)
        start_value = datetime.date(2013, 3, 14)

        patcher = mock.patch("datetime.date", spec=True)
        patched_date = patcher.start()
        patched_date.today.return_value = start_value
        self.addCleanup(patcher.stop)

        self.assertEqual(expected, calculate_date_range(15))
    def test_calculate_date_range_wrong_type(self):
        expected = datetime.datetime.combine(datetime.date(2013, 12, 27),
                                             self.min_time)
        start_value = datetime.date(2014, 1, 1)

        patcher = mock.patch("datetime.date", spec=True)
        patched_date = patcher.start()
        patched_date.today.return_value = start_value
        self.addCleanup(patcher.stop)

        self.assertEqual(expected, calculate_date_range("15foo$%^%&^%&"))
    def test_calculate_date_range_negative_string(self):
        expected = datetime.datetime.combine(datetime.date(2013, 12, 31),
                                             self.min_time)
        start_value = datetime.date(2014, 1, 1)

        patcher = mock.patch("datetime.date", spec=True)
        patched_date = patcher.start()
        patched_date.today.return_value = start_value
        self.addCleanup(patcher.stop)

        self.assertEqual(expected, calculate_date_range("-1"))
    def test_calculate_date_range_out_of_range(self):
        expected = datetime.datetime.combine(datetime.date(2013, 12, 27),
                                             self.min_time)
        start_value = datetime.date(2014, 1, 1)

        patcher = mock.patch("datetime.date", spec=True)
        patched_date = patcher.start()
        patched_date.today.return_value = start_value
        self.addCleanup(patcher.stop)

        self.assertEqual(
            expected, calculate_date_range(datetime.timedelta.max.days + 10))