def test_download_asos_data_start_after_end(): # Setup start = meteogram.datetime.datetime(2018, 8, 1, 12) end = meteogram.datetime.datetime(2018, 7, 1, 12) # Exercise/Verify with pytest.raises(ValueError): meteogram.build_asos_request_url('AMW', start, end)
def test_download_asos_data_in_future(): """Test for correct behavior when asking for non-existant (future) data.""" # Setup start = datetime(2999, 10, 10, 10) end = datetime(2999, 11, 10, 10) # Exercise/Verify with pytest.raises(ValueError): meteogram.build_asos_request_url("AMW", start, end)
def test_download_asos_data_start_after_end(): """Test for correct behavior when start and end times are reversed.""" # Setup start = datetime(2018, 8, 1, 12) end = datetime(2018, 7, 1, 12) # Exercise/Verify with pytest.raises(ValueError): meteogram.build_asos_request_url("AMW", start, end)
def test_download_asos_data(): """Test downloading ASOS data.""" # Setup url = meteogram.build_asos_request_url('AMW') # Exercise df = meteogram.download_asos_data(url) # Verify first_row_truth = mtesting.pd.Series({ 'station_id': 'AMW', 'station_name': 'Ames', 'latitude_deg': 41.990439, 'longitude_deg': -93.618515, 'UTC': mtesting.pd.Timestamp('2018-03-25 12:00:00'), 'temperature_degF': 29, 'dewpoint_degF': 24, 'wind_speed_knots': 8, 'wind_direction_degrees': 113 }) mtesting.assert_dataseries_equal(df.iloc[0], first_row_truth)
def test_build_asos_request_url_single_digit_datetimes(): """ Test building URL with single digit month and day. Setup Exercise Verify Cleanup """ # Setup # station, start_date, end_date start = meteogram.datetime.datetime(2018, 1, 2, 3, 4) end = meteogram.datetime.datetime(2018, 5, 6, 7, 8) station = 'FSD' # Exercise result_url = meteogram.build_asos_request_url(station, start, end) truth_url = ('https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?' 'station%5B%5D=FSD&tz=UTC&year1=2018&month1=01&day1=02&' 'hour1=03&minute1=04&year2=2018&month2=05&day2=06&hour2=07&' 'minute2=08&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&' 'vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes') # Verify assert (result_url == truth_url)
def test_build_asos_request_url_default(): #Setup - none #exercise url = meteogram.build_asos_request_url('MLI') # Verify truth = 'https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?station%5B%5D=MLI&tz=UTC&year1=2018&month1=03&day1=25&hour1=12&minute1=00&year2=2018&month2=03&day2=26&hour2=12&minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes' assert url == truth
def test_build_asos_request_url(start, end, station, expected): """ Test URL building for requests """ # Setup - done by parameterized fixture # Exercise url = meteogram.build_asos_request_url(station, start, end) # Verify assert (url == expected)
def test_build_asos_request_url_defaults() -> None: """Make sure that we get the correct URL when we are using defaults """ # Setup - None station = "FSD" # Exercise url = meteogram.build_asos_request_url(station=station) # Verify desired = "https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?station%5B%5D=FSD&tz=UTC&year1=2018&month1=03&day1=25&hour1=12&minute1=00&year2=2018&month2=03&day2=26&hour2=12&minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes" assert url == desired
def test_build_asos_request_url_double_digit_datetimes(): """ Test building URL with double digit month and day. """ # setup, note -> if you change data value you need to adapt string start = datetime(2018, 10, 11, 11) end = datetime(2018, 10, 16, 11) station = "FSD" expected_url = 'https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?station%5B%5D=FSD&tz=UTC&year1=2018&month1=10&day1=11&hour1=11&minute1=00&year2=2018&month2=10&day2=16&hour2=11&minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes' # excersize url = meteogram.build_asos_request_url(station, start, end) # verify assert url == expected_url
def test_build_asos_request_url_default_end_only(): """ Test building URL with default end date """ # Setup start_date = datetime(2018, 3, 24, 12) # Exercise url = meteogram.build_asos_request_url('MLI', start_date=start_date) # Verify truth = 'https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?station%5B%5D=MLI&tz=UTC&year1=2018&month1=03&day1=24&hour1=12&minute1=00&year2=2018&month2=03&day2=26&hour2=12&minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes' assert truth == url
def test_build_asos_request_url(start, end, station, expected): """ Test URL building for requests :param start: start date in datetime :param end: end date in datetime: :param station: station name in string :param expected: expected URL in string """ # Setup - Done by parameterized fixture # Exercise url = meteogram.build_asos_request_url(station, start, end) # Verify assert url == expected
def test_build_asos_request_url_double_digit_datetimes(): """ Test building URL with double digit month and day. """ # Setup start = datetime.datetime(2018, 10, 11, 11) end = datetime.datetime(2018, 10, 16, 11) station = 'FSD' #Exercise result_url = meteogram.build_asos_request_url(station, start, end) #verify truth_url = 'https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?station%5B%5D=FSD&tz=UTC&year1=2018&month1=10&day1=11&hour1=11&minute1=00&year2=2018&month2=10&day2=16&hour2=11&minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes' assert result_url == truth_url
def test_plotting_meteogram_defaults(): # setup url = meteogram.build_asos_request_url('AMW',\ start_date=datetime(2018,3,26),\ end_date=datetime(2018,3,27)) df = meteogram.download_asos_data(url) # print(df) if df.empty == False: # exersize fig, _, _, _ = meteogram.plot_meteogram(df) # verify - needs to return image to return fig else: Exception("No dataframe received from download_asos_data")
def test_build_asos_request_url_single_digit_datetimes(): """ Test building URL with single digit month and day. """ # Setup start = datetime(2018, 1, 5, 1) end = datetime(2018, 1, 9, 1) station = "FSD" # Exercise result_url = meteogram.build_asos_request_url(station=station, start_date=start, end_date=end) # Verify desired_url = "https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?station%5B%5D=FSD&tz=UTC&year1=2018&month1=01&day1=05&hour1=01&minute1=00&year2=2018&month2=01&day2=09&hour2=01&minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes" assert result_url == desired_url
def test_build_asos_request_url_double_digit_datetimes(): """ Test building URL with double digit month and day. """ station = "FSD" start_date = datetime.datetime(2019, 11, 11, 16) end_date = datetime.datetime(2019, 11, 25, 15) des = ( "https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?station%5B%5D=FSD&tz=UTC&year1=2019" "&month1=11&day1=11&hour1=16&minute1=00&year2=2019&month2=11&day2=25&hour2=15&minute2=00&" "vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes" ) res_srt = meteogram.build_asos_request_url(station, start_date, end_date) assert res_srt == des
def test_build_asos_request_url_with_only_end_given(): """ Test with no end date given, only start date """ # Setup station = 'FSD' end = meteogram.datetime.datetime(2018, 2, 16, 4) # Exercise result_url = meteogram.build_asos_request_url(station, None, end) # test time: 24 hrs before end - datetime.datetime(2018, 2, 15, 4) truth_url = ('https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?' 'station%5B%5D=FSD&tz=UTC&year1=2018&month1=02&day1=15&' 'hour1=04&minute1=00&year2=2018&month2=02&day2=16&hour2=04&' 'minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&' 'vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes') # Verify assert (result_url == truth_url)
def test_build_asos_request_url_with_defaults(): """ Test with no start or end date given """ # Setup # station only station = 'FSD' # Exercise result_url = meteogram.build_asos_request_url(station) # test time: meteogram.datetime.datetime(2018, 3, 26, 12) truth_url = ('https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?' 'station%5B%5D=FSD&tz=UTC&year1=2018&month1=03&day1=25&' 'hour1=12&minute1=00&year2=2018&month2=03&day2=26&hour2=12' '&minute2=00&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&' 'vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes') # Verify assert (result_url == truth_url)
def test_build_asos_request_url_double_digit_datetimes(): """ Test building URL with double digit month and day. """ # Setup station = 'FSD' # two-digits in the datetime start = meteogram.datetime.datetime(2018, 11, 12, 13, 14) end = meteogram.datetime.datetime(2018, 11, 12, 15, 16) # Exercise result_url = meteogram.build_asos_request_url(station, start, end) truth_url = ('https://mesonet.agron.iastate.edu/request/asos/1min_dl.php?' 'station%5B%5D=FSD&tz=UTC&year1=2018&month1=11&day1=12&' 'hour1=13&minute1=14&year2=2018&month2=11&day2=12&hour2=15&' 'minute2=16&vars%5B%5D=tmpf&vars%5B%5D=dwpf&vars%5B%5D=sknt&' 'vars%5B%5D=drct&sample=1min&what=view&delim=comma&gis=yes') # Verify assert (result_url == truth_url)
def test_plotting_meteogram_defaults(): """ Test default meteogram plotting :return fig: matplotlib.figure.Figure, matplotlib.axes._subplots.AxesSubplot, """ # Setup url = meteogram.build_asos_request_url("AMW", start_date=datetime(2018, 3, 26), end_date=datetime(2018, 3, 27)) df = meteogram.download_asos_data(url) # this will hit the web server # Exercise fig, _, _, _ = meteogram.plot_meteogram(df) # Verify - done elsewhere # Cleanup - none necessary return fig