mirror of
https://github.com/craigerl/aprsd.git
synced 2024-11-25 01:18:43 -05:00
Hemna
1477e61b0f
this patch removes the need for dacite2 package for creating packet objects from the aprslib decoded packet dictionary. moved the factory method from the base Packet object to the core module.
208 lines
7.4 KiB
Python
208 lines
7.4 KiB
Python
from unittest import mock
|
|
|
|
from oslo_config import cfg
|
|
|
|
from aprsd import conf # noqa: F401
|
|
from aprsd.plugins import weather as weather_plugin
|
|
|
|
from .. import fake, test_plugin
|
|
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
class TestUSWeatherPlugin(test_plugin.TestPlugin):
|
|
|
|
def test_not_enabled_missing_aprs_fi_key(self):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the LocationPlugin will be disabled.
|
|
CONF.aprs_fi.apiKey = None
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USWeatherPlugin()
|
|
expected = "USWeatherPlugin isn't enabled"
|
|
packet = fake.fake_packet(message="weather")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
|
def test_failed_aprs_fi_location(self, mock_check):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the Plugin will be disabled.
|
|
mock_check.side_effect = Exception
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USWeatherPlugin()
|
|
expected = "Failed to fetch aprs.fi location"
|
|
packet = fake.fake_packet(message="weather")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
|
def test_failed_aprs_fi_location_no_entries(self, mock_check):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the Plugin will be disabled.
|
|
mock_check.return_value = {"entries": []}
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USWeatherPlugin()
|
|
wx.enabled = True
|
|
expected = "Failed to fetch aprs.fi location"
|
|
packet = fake.fake_packet(message="weather")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
|
@mock.patch("aprsd.plugin_utils.get_weather_gov_for_gps")
|
|
def test_unknown_gps(self, mock_weather, mock_check_aprs):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the LocationPlugin will be disabled.
|
|
mock_check_aprs.return_value = {
|
|
"entries": [
|
|
{
|
|
"lat": 10,
|
|
"lng": 11,
|
|
"lasttime": 10,
|
|
},
|
|
],
|
|
}
|
|
mock_weather.side_effect = Exception
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USWeatherPlugin()
|
|
wx.enabled = True
|
|
expected = "Unable to get weather"
|
|
packet = fake.fake_packet(message="weather")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
|
@mock.patch("aprsd.plugin_utils.get_weather_gov_for_gps")
|
|
def test_working(self, mock_weather, mock_check_aprs):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the LocationPlugin will be disabled.
|
|
mock_check_aprs.return_value = {
|
|
"entries": [
|
|
{
|
|
"lat": 10,
|
|
"lng": 11,
|
|
"lasttime": 10,
|
|
},
|
|
],
|
|
}
|
|
mock_weather.return_value = {
|
|
"currentobservation": {"Temp": "400"},
|
|
"data": {
|
|
"temperature": ["10", "11"],
|
|
"weather": ["test", "another"],
|
|
},
|
|
"time": {"startPeriodName": ["ignored", "sometime"]},
|
|
}
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USWeatherPlugin()
|
|
wx.enabled = True
|
|
expected = "400F(10F/11F) test. sometime, another."
|
|
packet = fake.fake_packet(message="weather")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
class TestUSMetarPlugin(test_plugin.TestPlugin):
|
|
|
|
def test_not_enabled_missing_aprs_fi_key(self):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the LocationPlugin will be disabled.
|
|
CONF.aprs_fi.apiKey = None
|
|
wx = weather_plugin.USMetarPlugin()
|
|
expected = "USMetarPlugin isn't enabled"
|
|
packet = fake.fake_packet(message="metar")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
|
def test_failed_aprs_fi_location(self, mock_check):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the Plugin will be disabled.
|
|
mock_check.side_effect = Exception
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USMetarPlugin()
|
|
wx.enabled = True
|
|
expected = "Failed to fetch aprs.fi location"
|
|
packet = fake.fake_packet(message="metar")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
|
def test_failed_aprs_fi_location_no_entries(self, mock_check):
|
|
# When the aprs.fi api key isn't set, then
|
|
# the Plugin will be disabled.
|
|
mock_check.return_value = {"entries": []}
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USMetarPlugin()
|
|
wx.enabled = True
|
|
expected = "Failed to fetch aprs.fi location"
|
|
packet = fake.fake_packet(message="metar")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_weather_gov_metar")
|
|
def test_gov_metar_fetch_fails(self, mock_metar):
|
|
mock_metar.side_effect = Exception
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USMetarPlugin()
|
|
wx.enabled = True
|
|
expected = "Unable to find station METAR"
|
|
packet = fake.fake_packet(message="metar KPAO")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_weather_gov_metar")
|
|
def test_airport_works(self, mock_metar):
|
|
|
|
class Response:
|
|
text = '{"properties": {"rawMessage": "BOGUSMETAR"}}'
|
|
mock_metar.return_value = Response()
|
|
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USMetarPlugin()
|
|
wx.enabled = True
|
|
expected = "BOGUSMETAR"
|
|
packet = fake.fake_packet(message="metar KPAO")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
|
|
@mock.patch("aprsd.plugin_utils.get_weather_gov_metar")
|
|
@mock.patch("aprsd.plugin_utils.get_aprs_fi")
|
|
@mock.patch("aprsd.plugin_utils.get_weather_gov_for_gps")
|
|
def test_metar_works(self, mock_wx_for_gps, mock_check_aprs, mock_metar):
|
|
mock_wx_for_gps.return_value = {
|
|
"location": {"metar": "BOGUSMETAR"},
|
|
}
|
|
|
|
class Response:
|
|
text = '{"properties": {"rawMessage": "BOGUSMETAR"}}'
|
|
|
|
mock_check_aprs.return_value = {
|
|
"entries": [
|
|
{
|
|
"lat": 10,
|
|
"lng": 11,
|
|
"lasttime": 10,
|
|
},
|
|
],
|
|
}
|
|
mock_metar.return_value = Response()
|
|
|
|
CONF.aprs_fi.apiKey = "abc123"
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
wx = weather_plugin.USMetarPlugin()
|
|
wx.enabled = True
|
|
expected = "BOGUSMETAR"
|
|
packet = fake.fake_packet(message="metar")
|
|
actual = wx.filter(packet)
|
|
self.assertEqual(expected, actual)
|