implement basic testing fixtures and linting
This commit is contained in:
		
							
								
								
									
										0
									
								
								backend/src/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								backend/src/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -1,14 +1,14 @@ | ||||
| import logging | ||||
| from fastapi import FastAPI, Query, Body, HTTPException | ||||
|  | ||||
| from structs.landmark import Landmark | ||||
| from structs.preferences import Preferences | ||||
| from structs.linked_landmarks import LinkedLandmarks | ||||
| from structs.trip import Trip | ||||
| from utils.landmarks_manager import LandmarkManager | ||||
| from utils.optimizer import Optimizer | ||||
| from utils.refiner import Refiner | ||||
| from persistence import client as cache_client | ||||
| from .structs.landmark import Landmark | ||||
| from .structs.preferences import Preferences | ||||
| from .structs.linked_landmarks import LinkedLandmarks | ||||
| from .structs.trip import Trip | ||||
| from .utils.landmarks_manager import LandmarkManager | ||||
| from .utils.optimizer import Optimizer | ||||
| from .utils.refiner import Refiner | ||||
| from .persistence import client as cache_client | ||||
|  | ||||
|  | ||||
| logger = logging.getLogger(__name__) | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| from pymemcache.client.base import Client | ||||
|  | ||||
| import constants | ||||
| from .constants import MEMCACHED_HOST_PATH | ||||
|  | ||||
|  | ||||
| class DummyClient: | ||||
| @@ -15,11 +15,11 @@ class DummyClient: | ||||
|         return self._data[key] | ||||
|  | ||||
|  | ||||
| if constants.MEMCACHED_HOST_PATH is None: | ||||
| if MEMCACHED_HOST_PATH is None: | ||||
|     client = DummyClient() | ||||
| else: | ||||
|     client = Client( | ||||
|         constants.MEMCACHED_HOST_PATH, | ||||
|         MEMCACHED_HOST_PATH, | ||||
|         timeout=1, | ||||
|         allow_unicode_keys=True, | ||||
|         encoding='utf-8' | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| from .landmark import Landmark | ||||
| from utils.get_time_separation import get_time | ||||
| from ..utils.get_time_separation import get_time | ||||
|  | ||||
| class LinkedLandmarks: | ||||
|     """ | ||||
|   | ||||
							
								
								
									
										0
									
								
								backend/src/tests/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								backend/src/tests/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										34
									
								
								backend/src/tests/test_main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								backend/src/tests/test_main.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| from fastapi.testclient import TestClient | ||||
| import pytest | ||||
| from ..main import app | ||||
|  | ||||
| @pytest.fixture() | ||||
| def client(): | ||||
|     return TestClient(app) | ||||
|  | ||||
|  | ||||
| def test_new_trip_invalid_prefs(client): | ||||
|     response = client.post( | ||||
|         "/trip/new", | ||||
|         json={ | ||||
|             "preferences": {}, | ||||
|             "start": [48.8566, 2.3522] | ||||
|             } | ||||
|         ) | ||||
|     assert response.status_code == 422 | ||||
|  | ||||
|  | ||||
| def test_new_trip_single_prefs(client): | ||||
|     response = client.post( | ||||
|         "/trip/new", | ||||
|         json={ | ||||
|             "preferences": {"sightseeing": {"type": "sightseeing", "score": 1}, "nature": {"type": "nature", "score": 1}, "shopping": {"type": "shopping", "score": 1}, "max_time_minute": 360, "detour_tolerance_minute": 0}, | ||||
|             "start": [48.8566, 2.3522] | ||||
|             } | ||||
|         ) | ||||
|     assert response.status_code == 200 | ||||
|  | ||||
|  | ||||
| def test_new_trip_matches_prefs(client): | ||||
|     # todo | ||||
|     pass | ||||
| @@ -1,9 +1,9 @@ | ||||
| import yaml | ||||
| from geopy.distance import geodesic | ||||
|  | ||||
| import constants | ||||
| from ..constants import OPTIMIZER_PARAMETERS_PATH | ||||
|  | ||||
| with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
| with OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
|     parameters = yaml.safe_load(f) | ||||
|     DETOUR_FACTOR = parameters['detour_factor'] | ||||
|     AVERAGE_WALKING_SPEED = parameters['average_walking_speed'] | ||||
|   | ||||
| @@ -9,11 +9,10 @@ from pywikibot import config | ||||
| config.put_throttle = 0 | ||||
| config.maxlag = 0 | ||||
|  | ||||
| from structs.preferences import Preferences, Preference | ||||
| from structs.landmark import Landmark | ||||
| from ..structs.preferences import Preferences, Preference | ||||
| from ..structs.landmark import Landmark | ||||
| from .take_most_important import take_most_important | ||||
| import constants | ||||
|  | ||||
| from ..constants import AMENITY_SELECTORS_PATH, LANDMARK_PARAMETERS_PATH, OPTIMIZER_PARAMETERS_PATH, OSM_CACHE_DIR | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -30,10 +29,10 @@ class LandmarkManager: | ||||
|  | ||||
|     def __init__(self) -> None: | ||||
|  | ||||
|         with constants.AMENITY_SELECTORS_PATH.open('r') as f: | ||||
|         with AMENITY_SELECTORS_PATH.open('r') as f: | ||||
|             self.amenity_selectors = yaml.safe_load(f) | ||||
|  | ||||
|         with constants.LANDMARK_PARAMETERS_PATH.open('r') as f: | ||||
|         with LANDMARK_PARAMETERS_PATH.open('r') as f: | ||||
|             parameters = yaml.safe_load(f) | ||||
|             self.max_bbox_side = parameters['city_bbox_side'] | ||||
|             self.radius_close_to = parameters['radius_close_to'] | ||||
| @@ -42,13 +41,13 @@ class LandmarkManager: | ||||
|             self.tag_coeff = parameters['tag_coeff'] | ||||
|             self.N_important = parameters['N_important'] | ||||
|              | ||||
|         with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
|         with OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
|             parameters = yaml.safe_load(f) | ||||
|             self.walking_speed = parameters['average_walking_speed'] | ||||
|             self.detour_factor = parameters['detour_factor'] | ||||
|  | ||||
|         self.overpass = Overpass() | ||||
|         CachingStrategy.use(JSON, cacheDir=constants.OSM_CACHE_DIR) | ||||
|         CachingStrategy.use(JSON, cacheDir=OSM_CACHE_DIR) | ||||
|  | ||||
|  | ||||
|     def generate_landmarks_list(self, center_coordinates: tuple[float, float], preferences: Preferences) -> tuple[list[Landmark], list[Landmark]]: | ||||
|   | ||||
| @@ -5,9 +5,9 @@ from scipy.optimize import linprog | ||||
| from collections import defaultdict, deque | ||||
| from geopy.distance import geodesic | ||||
|  | ||||
| from structs.landmark import Landmark | ||||
| from ..structs.landmark import Landmark | ||||
| from .get_time_separation import get_time | ||||
| import constants | ||||
| from ..constants import OPTIMIZER_PARAMETERS_PATH | ||||
|  | ||||
|      | ||||
|  | ||||
| @@ -26,7 +26,7 @@ class Optimizer: | ||||
|     def __init__(self) : | ||||
|  | ||||
|         # load parameters from file | ||||
|         with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
|         with OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
|             parameters = yaml.safe_load(f) | ||||
|             self.detour_factor = parameters['detour_factor'] | ||||
|             self.average_walking_speed = parameters['average_walking_speed'] | ||||
|   | ||||
| @@ -3,10 +3,10 @@ import yaml, logging | ||||
| from shapely import buffer, LineString, Point, Polygon, MultiPoint, concave_hull | ||||
| from math import pi | ||||
|  | ||||
| from structs.landmark import Landmark | ||||
| from ..structs.landmark import Landmark | ||||
| from . import take_most_important, get_time_separation | ||||
| from .optimizer import Optimizer | ||||
| import constants | ||||
| from ..constants import OPTIMIZER_PARAMETERS_PATH | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -24,7 +24,7 @@ class Refiner : | ||||
|         self.optimizer = optimizer | ||||
|  | ||||
|         # load parameters from file | ||||
|         with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
|         with OPTIMIZER_PARAMETERS_PATH.open('r') as f: | ||||
|             parameters = yaml.safe_load(f) | ||||
|             self.detour_factor = parameters['detour_factor'] | ||||
|             self.detour_corridor_width = parameters['detour_corridor_width'] | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| from structs.landmark import Landmark | ||||
| from ..structs.landmark import Landmark | ||||
|  | ||||
| def take_most_important(landmarks: list[Landmark], N_important) -> list[Landmark] : | ||||
|     L = len(landmarks) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user