From 24546b28d6e9da14e31e85da123be9ef9d9441ec Mon Sep 17 00:00:00 2001 From: SpudGunMan Date: Fri, 24 Oct 2025 10:33:19 -0700 Subject: [PATCH] Create test_bot.py --- modules/test_bot.py | 203 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 modules/test_bot.py diff --git a/modules/test_bot.py b/modules/test_bot.py new file mode 100644 index 0000000..3763052 --- /dev/null +++ b/modules/test_bot.py @@ -0,0 +1,203 @@ +# test_bot.py +# Unit tests for various modules in the meshing-around project +import unittest +import os +import sys +import importlib +import pkgutil +# Add the parent directory to sys.path to allow module imports +parent_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +sys.path.append(parent_path) +modules_path = os.path.join(parent_path, 'modules') + +# List of module names to exclude +exclude = ['test_bot','udp', 'system', 'log', 'gpio', 'web',] +available_modules = [ + m.name for m in pkgutil.iter_modules([modules_path]) + if m.name not in exclude] + +try: + print("\nImporting Core Modules:") + from modules.log import * + print(" ✔ Imported 'log'") + # Set location default + lat = latitudeValue + lon = longitudeValue + print(f" ✔ Location set to Latitude: {lat}, Longitude: {lon}") + from modules.system import * + print(" ✔ Imported 'system'") + + print("\nImporting non-excluded modules:") + for module_name in [m.name for m in pkgutil.iter_modules([modules_path])]: + if module_name not in exclude: + importlib.import_module(module_name) + print(f" ✔ Imported '{module_name}'") +except Exception as e: + print(f"\nError importing modules: {e}") + print("Run this program from the main program directory: python3 script/test_bot.py") + exit(1) + +class TestBot(unittest.TestCase): + def test_example(self): + # Example test case + self.assertEqual(1 + 1, 2) + + # bbstools.py + def test_bbsdb_load(self): + from bbstools import load_bbsdb + test_load = load_bbsdb() + self.assertTrue(test_load) + + def test_bbs_list_messages(self): + from bbstools import bbs_list_messages + messages = bbs_list_messages() + print("list_messages() returned:", messages) + self.assertIsInstance(messages, str) + + def test_initialize_checklist_database(self): + from checklist import initialize_checklist_database, process_checklist_command + result = initialize_checklist_database() + result1 = process_checklist_command(0, 'checklist', name="none", location="none") + self.assertTrue(result) + self.assertIsInstance(result1, str) + + def test_init_news_sources(self): + from filemon import initNewsSources + result = initNewsSources() + self.assertTrue(result) + + def test_get_nina_alerts(self): + from globalalert import get_nina_alerts + alerts = get_nina_alerts() + self.assertIsInstance(alerts, str) + + def test_llmTool_get_google(self): + from llm import llmTool_get_google + result = llmTool_get_google("What is 2+2?", 1) + self.assertIsInstance(result, list) + + def test_send_ollama_query(self): + from llm import send_ollama_query + response = send_ollama_query("Hello, Ollama!") + self.assertIsInstance(response, str) + + def test_where_am_i(self): + from locationdata import where_am_i + location = where_am_i(lat, lon) + self.assertIsInstance(location, str) + + def test_getRepeaterBook(self): + from locationdata import getRepeaterBook + repeaters = getRepeaterBook(lat, lon) + self.assertIsInstance(repeaters, str) + + def test_getArtSciRepeaters(self): + from locationdata import getArtSciRepeaters + repeaters = getArtSciRepeaters(lat, lon) + self.assertIsInstance(repeaters, str) + + def test_get_NOAAtides(self): + from locationdata import get_NOAAtide + tides = get_NOAAtide(lat, lon) + self.assertIsInstance(tides, str) + + def test_get_NOAAweather(self): + from locationdata import get_NOAAweather + weather = get_NOAAweather(lat, lon) + self.assertIsInstance(weather, str) + + def test_getWeatherAlertsNOAA(self): + from locationdata import getWeatherAlertsNOAA + alerts = getWeatherAlertsNOAA(lat, lon) + if isinstance(alerts, tuple): + self.assertIsInstance(alerts[0], str) + else: + self.assertIsInstance(alerts, str) + + def test_getActiveWeatherAlertsDetailNOAA(self): + from locationdata import getActiveWeatherAlertsDetailNOAA + alerts_detail = getActiveWeatherAlertsDetailNOAA(lat, lon) + self.assertIsInstance(alerts_detail, str) + + def test_getIpawsAlerts(self): + from locationdata import getIpawsAlert + alerts = getIpawsAlert(lat, lon) + self.assertIsInstance(alerts, str) + + def test_get_flood_noaa(self): + from locationdata import get_flood_noaa + flood_info = get_flood_noaa(lat, lon, 12484500) # Example gauge UID + self.assertIsInstance(flood_info, str) + + def test_get_volcano_usgs(self): + from locationdata import get_volcano_usgs + volcano_info = get_volcano_usgs(lat, lon) + self.assertIsInstance(volcano_info, str) + + def test_get_nws_marine_alerts(self): + from locationdata import get_nws_marine + marine_alerts = get_nws_marine('https://tgftp.nws.noaa.gov/data/forecasts/marine/coastal/pz/pzz135.txt',1) # Example zone + self.assertIsInstance(marine_alerts, str) + + def test_checkUSGSEarthQuakes(self): + from locationdata import checkUSGSEarthQuake + earthquakes = checkUSGSEarthQuake(lat, lon) + self.assertIsInstance(earthquakes, str) + + def get_openskynetwork(self): + from locationdata import get_openskynetwork + flights = get_openskynetwork(lat, lon) + self.assertIsInstance(flights, str) + + def test_initalize_qrz_database(self): + from qrz import initalize_qrz_database + result = initalize_qrz_database() + self.assertTrue(result) + + def test_get_hamlib(self): + from radio import get_hamlib + frequency = get_hamlib('f') + self.assertIsInstance(frequency, str) + + def test_get_rss_feed(self): + from rss import get_rss_feed + result = get_rss_feed('') + self.assertIsInstance(result, str) + + def test_getNextSatellitePass(self): + from space import getNextSatellitePass + pass_info = getNextSatellitePass('25544', lat, lon) + self.assertIsInstance(pass_info, str) + + def test_get_moon_phase(self): + from space import get_moon + phase = get_moon(lat, lon) + self.assertIsInstance(phase, str) + + def test_get_sun_times(self): + from space import get_sun + sun_times = get_sun(lat, lon) + self.assertIsInstance(sun_times, str) + + def test_hf_band_conditions(self): + from space import hf_band_conditions + conditions = hf_band_conditions() + self.assertIsInstance(conditions, str) + + def test_get_wikipedia_summary(self): + from wiki import get_wikipedia_summary + summary = get_wikipedia_summary("Python", location=(lat, lon)) + self.assertIsInstance(summary, str) + + def test_get_kiwix_summary(self): + from wiki import get_kiwix_summary + summary = get_kiwix_summary("Python ") + self.assertIsInstance(summary, str) + + + + + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file