42 lines
1.8 KiB
Python
42 lines
1.8 KiB
Python
import os
|
|
import unittest
|
|
|
|
from mileage_logger.logic.detect_itinerary import SiteConfig, haversine_distance
|
|
from mileage_logger.distance.resolve import DistanceResolver
|
|
|
|
|
|
CONFIG_PATH = os.path.join(os.path.dirname(__file__), "..", "config", "sites.yml")
|
|
ROUTES_PATH = os.path.join(os.path.dirname(__file__), "data", "routes_golden.csv")
|
|
|
|
|
|
class TestDistanceResolver(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.site_config = SiteConfig.from_yaml(CONFIG_PATH)
|
|
cls.resolver = DistanceResolver(route_csv_path=ROUTES_PATH)
|
|
|
|
def test_route_lookup(self):
|
|
origin = "Home"
|
|
dest = "Lingwood Primary Academy"
|
|
origin_site = self.site_config.by_canonical[origin]
|
|
dest_site = self.site_config.by_canonical[dest]
|
|
dist = self.resolver.resolve(origin, dest, (origin_site.lat, origin_site.lon), (dest_site.lat, dest_site.lon))
|
|
self.assertAlmostEqual(dist, 13.0, places=1)
|
|
# Second call should hit cache and return same
|
|
dist2 = self.resolver.resolve(origin, dest, (origin_site.lat, origin_site.lon), (dest_site.lat, dest_site.lon))
|
|
self.assertEqual(dist2, dist)
|
|
|
|
def test_fallback_haversine(self):
|
|
# Choose a pair not in the route catalogue
|
|
origin = "Lingwood Primary Academy"
|
|
dest = "Unity SP"
|
|
origin_site = self.site_config.by_canonical[origin]
|
|
dest_site = self.site_config.by_canonical[dest]
|
|
dist = self.resolver.resolve(origin, dest, (origin_site.lat, origin_site.lon), (dest_site.lat, dest_site.lon))
|
|
# Compute haversine expected
|
|
expected = haversine_distance(origin_site.lat, origin_site.lon, dest_site.lat, dest_site.lon)
|
|
self.assertAlmostEqual(dist, expected, places=1)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |