def test_parse_json_missing_name(self):
        location = Location(MetOfficeWeatherReport.FORECAST, metoffer.DAILY)
        self.assertIsNotNone(location)

        json = {
            "Period": [],
            "continent": "EUROPE",
            "country": "ENGLAND",
            "elevation": "4.0",
            "i": "351747",
            "lat": "51.4007",
            "lon": "-0.3337",
        }
        with self.assertRaises(ValueError):
            location.parse_json(json)
    def test_init(self):
        location = Location(MetOfficeWeatherReport.FORECAST, metoffer.DAILY)
        self.assertIsNotNone(location)

        self.assertEqual(MetOfficeWeatherReport.FORECAST, location._data_type)
        self.assertEqual(metoffer.DAILY, location._time_period)

        self.assertIsNotNone(location._reports)
        self.assertEqual([], location._reports)

        self.assertIsNone(location._continent)
        self.assertIsNone(location._country)
        self.assertIsNone(location._elevation)
        self.assertIsNone(location._i)
        self.assertIsNone(location._lat)
        self.assertIsNone(location._lon)
        self.assertIsNone(location._name)

        self.assertEquals(metoffer.DAILY, location.time_period)
        self.assertEquals(MetOfficeWeatherReport.FORECAST, location.data_type)

        self.assertIsNone(location.get_latest_report())
        self.assertIsNone(location.get_report_for_date("2017-04-03Z"))
    def test_parse_json(self):
        location = Location(MetOfficeWeatherReport.FORECAST, metoffer.DAILY)
        self.assertIsNotNone(location)

        json = {
            "Period": [{
                "Rep": [{
                    "$": "Day",
                    "D": "S",
                    "Dm": "15",
                    "FDm": "13",
                    "Gn": "16",
                    "Hn": "54",
                    "PPd": "0",
                    "S": "9",
                    "U": "4",
                    "V": "VG",
                    "W": "1"
                }, {
                    "$": "Night",
                    "D": "SSW",
                    "FNm": "7",
                    "Gm": "16",
                    "Hm": "86",
                    "Nm": "9",
                    "PPn": "57",
                    "S": "7",
                    "V": "GO",
                    "W": "7"
                }],
                "type":
                "Day",
                "value":
                "2017-04-03Z"
            }, {
                "Rep": [{
                    "$": "Day",
                    "D": "N",
                    "Dm": "13",
                    "FDm": "11",
                    "Gn": "11",
                    "Hn": "82",
                    "PPd": "49",
                    "S": "7",
                    "U": "2",
                    "V": "GO",
                    "W": "8"
                }, {
                    "$": "Night",
                    "D": "NNW",
                    "FNm": "4",
                    "Gm": "11",
                    "Hm": "81",
                    "Nm": "5",
                    "PPn": "9",
                    "S": "4",
                    "V": "VG",
                    "W": "2"
                }],
                "type":
                "Day",
                "value":
                "2017-04-04Z"
            }],
            "continent":
            "EUROPE",
            "country":
            "ENGLAND",
            "elevation":
            "4.0",
            "i":
            "351747",
            "lat":
            "51.4007",
            "lon":
            "-0.3337",
            "name":
            "HAMPTON COURT PALACE"
        }

        location.parse_json(json)

        self.assertIsNotNone(location._reports)
        self.assertEqual(2, len(location._reports))

        self.assertEqual("EUROPE", location._continent)
        self.assertEqual("ENGLAND", location._country)
        self.assertEqual("4.0", location._elevation)
        self.assertEqual("351747", location._i)
        self.assertEqual("51.4007", location._lat)
        self.assertEqual("-0.3337", location._lon)
        self.assertEqual("HAMPTON COURT PALACE", location._name)

        self.assertIsNotNone(location.get_latest_report())
        self.assertIsNotNone(
            location.get_report_for_date(
                datetime.datetime.strptime("2017-04-03Z", "%Y-%m-%dZ")))
        self.assertIsNone(
            location.get_report_for_date(
                datetime.datetime.strptime("2013-04-03Z", "%Y-%m-%dZ")))