def setUp(self):
     self.interval_start_one = "2015-12-29"
     self.interval_end_one = "2016-01-02"
     self.interval_code_one = "unit_test_one"
     self.dateIntervalOne = DateInterval(self.interval_start_one, self.interval_end_one, self.interval_code_one)
     self.interval_start_two = "2016-01-02"
     self.interval_end_two = "2016-01-12"
     self.interval_code_two = "unit_test_two"
     self.dateIntervalTwo = DateInterval(self.interval_start_two, self.interval_end_two, self.interval_code_two)
     self.interval_start_three = "2015-12-12"
     self.interval_end_three = "2015-12-20"
     self.interval_code_three = "unit_test_three"
     self.dateIntervalThree = DateInterval(
         self.interval_start_three, self.interval_end_three, self.interval_code_three
     )
     self.test_dictionary_code = "unit_test_dictionary"
     self.dateIntervalDictionaryInstance = DateIntervalDictionary(
         self.test_dictionary_code
     )  # type: DateIntervalDictionary
     self.dateIntervalDictionaryInstance.addDateInterval(self.dateIntervalOne)
     self.dateIntervalDictionaryInstance.addDateInterval(self.dateIntervalTwo)
     self.dateIntervalDictionaryInstance.addDateInterval(self.dateIntervalThree)
     self.interval_code_four = "unit_test_four"
     self.start_date_four = "2016-01-31"
     self.end_date_four = "2016-02-15"
     self.dateIntervalDictionaryInstance.addDateIntervalByDates(
         self.start_date_four, self.end_date_four, self.interval_code_four
     )
     self.expected_date_interval_codes = [
         self.interval_code_one,
         self.interval_code_two,
         self.interval_code_three,
         self.interval_code_four,
     ]
     self.expected_date_interval_codes.sort()
     self.expected_earliest_date = self.interval_start_three
     self.expected_latest_date = self.end_date_four
class TestDateIntervalDictionary(unittest.TestCase):
    def tearDown(self):
        self.dateIntervalOne = None
        self.dateIntervalTwo = None
        self.dateIntervalThree = None

        self.dateIntervalDictionaryInstance = None

    def setUp(self):
        self.interval_start_one = "2015-12-29"
        self.interval_end_one = "2016-01-02"
        self.interval_code_one = "unit_test_one"
        self.dateIntervalOne = DateInterval(self.interval_start_one, self.interval_end_one, self.interval_code_one)
        self.interval_start_two = "2016-01-02"
        self.interval_end_two = "2016-01-12"
        self.interval_code_two = "unit_test_two"
        self.dateIntervalTwo = DateInterval(self.interval_start_two, self.interval_end_two, self.interval_code_two)
        self.interval_start_three = "2015-12-12"
        self.interval_end_three = "2015-12-20"
        self.interval_code_three = "unit_test_three"
        self.dateIntervalThree = DateInterval(
            self.interval_start_three, self.interval_end_three, self.interval_code_three
        )
        self.test_dictionary_code = "unit_test_dictionary"
        self.dateIntervalDictionaryInstance = DateIntervalDictionary(
            self.test_dictionary_code
        )  # type: DateIntervalDictionary
        self.dateIntervalDictionaryInstance.addDateInterval(self.dateIntervalOne)
        self.dateIntervalDictionaryInstance.addDateInterval(self.dateIntervalTwo)
        self.dateIntervalDictionaryInstance.addDateInterval(self.dateIntervalThree)
        self.interval_code_four = "unit_test_four"
        self.start_date_four = "2016-01-31"
        self.end_date_four = "2016-02-15"
        self.dateIntervalDictionaryInstance.addDateIntervalByDates(
            self.start_date_four, self.end_date_four, self.interval_code_four
        )
        self.expected_date_interval_codes = [
            self.interval_code_one,
            self.interval_code_two,
            self.interval_code_three,
            self.interval_code_four,
        ]
        self.expected_date_interval_codes.sort()
        self.expected_earliest_date = self.interval_start_three
        self.expected_latest_date = self.end_date_four

    def test_getEarliestDateInDictionary(self):
        test_earliest_date = self.dateIntervalDictionaryInstance.getEarliestDateInDictionary()
        self.assertEqual(test_earliest_date, self.expected_earliest_date)

    def test_getLatestDateInDictionary(self):
        test_latest_date = self.dateIntervalDictionaryInstance.getLatestDateInDictionary()
        self.assertEqual(test_latest_date, self.expected_latest_date)

    def test_getDateIntervalCodes(self):
        test_date_intervals = self.dateIntervalDictionaryInstance.getDateIntervalCodes()
        test_date_intervals.sort()
        self.assertListEqual(self.expected_date_interval_codes, test_date_intervals)

    def test_init(self):
        test_code = self.dateIntervalDictionaryInstance.dictionary_code
        self.assertEqual(test_code, self.test_dictionary_code)

    def test_addDateInterval(self):
        dictionary_length = len(self.dateIntervalDictionaryInstance.date_interval_dictionary)
        self.assertEqual(dictionary_length, 4)

    def test_addDateIntervalByDates(self):
        testDateIntervalFour = self.dateIntervalDictionaryInstance.getDateIntervalByCode(self.interval_code_four)
        self.assertEqual(testDateIntervalFour.code, self.interval_code_four)

    def test_getDateIntervalByCode(self):
        testDateIntervalTwo = self.dateIntervalDictionaryInstance.getDateIntervalByCode(self.interval_code_two)
        self.assertIsNotNone(testDateIntervalTwo)
        self.assertEqual(self.interval_start_two, testDateIntervalTwo.start_date)
        self.assertEqual(self.interval_end_two, testDateIntervalTwo.end_date)
        self.assertEqual(self.interval_code_two, testDateIntervalTwo.code)
        noneInterval = self.dateIntervalDictionaryInstance.getDateIntervalByCode("fake_interval")
        self.assertIsNone(noneInterval)

    def test_getIntervalCodesByDate(self):
        test_dates_for_interval_one = ["2015-12-29", "2016-01-01", "2015-12-31"]
        interval_one_code_list = [self.interval_code_one]
        test_dates_for_interval_two = ["2016-01-12", "2016-01-07"]
        interval_two_code_list = [self.interval_code_two]
        test_dates_for_interval_three = ["2015-12-12", "2015-12-20", "2015-12-16"]
        interval_three_code_list = [self.interval_code_three]
        date_in_intervals_one_and_two = "2016-01-02"
        expected_interval_one_and_two_list = [self.interval_code_one, self.interval_code_two]
        for date_string in test_dates_for_interval_one:
            test_list_of_codes = self.dateIntervalDictionaryInstance.getIntervalCodesByDate(date_string)
            self.assertEqual(test_list_of_codes, interval_one_code_list, "Failed for date {0}".format(date_string))
        for date_string in test_dates_for_interval_two:
            test_list_of_codes = self.dateIntervalDictionaryInstance.getIntervalCodesByDate(date_string)
            self.assertEqual(test_list_of_codes, interval_two_code_list, "Failed for date {0}".format(date_string))
        for date_string in test_dates_for_interval_three:
            test_list_of_codes = self.dateIntervalDictionaryInstance.getIntervalCodesByDate(date_string)
            self.assertEqual(test_list_of_codes, interval_three_code_list, "Failed for date {0}".format(date_string))
        test_interval_one_and_two_list = self.dateIntervalDictionaryInstance.getIntervalCodesByDate(
            date_in_intervals_one_and_two
        )
        self.assertEqual(test_interval_one_and_two_list, expected_interval_one_and_two_list)
        test_interval_four_dates = ["2016-01-31", "2016-02-02", "2016-02-15"]
        interval_four_code_list = [self.interval_code_four]
        for date_string in test_interval_four_dates:
            test_list_of_codes = self.dateIntervalDictionaryInstance.getIntervalCodesByDate(date_string)
            self.assertEqual(test_list_of_codes, interval_four_code_list, "Failed for date {0}".format(date_string))
        test_dates_in_no_intervals = ["2015-12-11", "2015-12-21", "2015-12-28", "2016-01-30", "2016-02-16"]
        for date_string in test_dates_in_no_intervals:
            test_none = self.dateIntervalDictionaryInstance.getIntervalCodesByDate(date_string)
            self.assertIsNone(test_none)