Exemple #1
0
    def test_invalid_date_format(self):
        """Test error is raised when a date is provided in an unexpected
        format."""

        forecast_date = '17MARCH2017'
        msg = 'Date .* is in unexpected format'
        with self.assertRaisesRegex(ValueError, msg):
            get_forecast_times(144, forecast_date=forecast_date,
                               forecast_time=6)
Exemple #2
0
    def test_no_data_provided(self):
        """Test setting up a forecast range when no data is provided. Expect a
        range of times starting from last hour before now that was an interval
        of 6 hours. Length set to 7 days (168 hours).

        Note: this could fail if time between forecast_start being set and
        reaching the get_forecast_times call bridges a 6-hour time
        (00, 06, 12, 18). As such it is allowed two goes before
        reporting a failure (slightly unconventional I'm afraid)."""

        second_chance = 0
        while second_chance < 2:
            forecast_start = datetime.datetime.utcnow()
            expected_date = forecast_start.date()
            expected_hour = time(divmod(forecast_start.hour, 6)[0] * 6)
            forecast_date = None
            forecast_time = None
            forecast_length = 168
            result = get_forecast_times(forecast_length,
                                        forecast_date=forecast_date,
                                        forecast_time=forecast_time)

            check1 = (expected_date == result[0].date())
            check2 = (expected_hour.hour == result[0].hour)
            check3 = (timedelta(hours=168) == (result[-1] - result[0]))

            if not all([check1, check2, check3]):
                second_chance += 1
                continue
            else:
                break

        self.assertTrue(check1)
        self.assertTrue(check2)
        self.assertTrue(check3)
Exemple #3
0
    def test_all_data_provided(self):
        """Test setting up a forecast range when start date, start hour and
        forecast length are all provided."""

        forecast_start = datetime.datetime(2017, 6, 1, 9, 0)
        forecast_date = forecast_start.strftime("%Y%m%d")
        forecast_time = int(forecast_start.strftime("%H"))
        forecast_length = 300
        forecast_end = forecast_start + timedelta(hours=forecast_length)
        result = get_forecast_times(forecast_length,
                                    forecast_date=forecast_date,
                                    forecast_time=forecast_time)
        self.assertEqual(forecast_start, result[0])
        self.assertEqual(forecast_end, result[-1])
        self.assertEqual(timedelta(hours=1), result[1] - result[0])
        self.assertEqual(timedelta(hours=3), result[-1] - result[-2])
Exemple #4
0
    def test_partial_data_provided(self):
        """Test setting up a forecast range when start hour and forecast length
        are both provided, but no start date."""

        forecast_start = datetime.datetime(2017, 6, 1, 15, 0)
        forecast_date = None
        forecast_time = int(forecast_start.strftime("%H"))
        forecast_length = 144
        expected_date = datetime.datetime.utcnow().date()
        expected_start = datetime.datetime.combine(expected_date,
                                                   time(forecast_time))
        expected_end = expected_start + timedelta(hours=144)
        result = get_forecast_times(forecast_length,
                                    forecast_date=forecast_date,
                                    forecast_time=forecast_time)

        self.assertEqual(expected_start, result[0])
        self.assertEqual(expected_end, result[-1])
        self.assertEqual(timedelta(hours=1), result[1] - result[0])
        self.assertEqual(timedelta(hours=3), result[-1] - result[-2])