diff --git a/backend/src/tests/test_main.py b/backend/src/tests/test_main.py index b389376..f4600e5 100644 --- a/backend/src/tests/test_main.py +++ b/backend/src/tests/test_main.py @@ -1,10 +1,69 @@ from fastapi.testclient import TestClient -import pytest, requests +from typing import List +import pytest from ..main import app from ..structs.landmark import Landmark -def landmarks_to_osmid(landmarks: list) -> list : +@pytest.fixture() +def client(): + return TestClient(app) + + +# Base test for checking if the API returns correct error code when no preferences are specified. +def test_new_trip_invalid_prefs(client): + response = client.post( + "/trip/new", + json={ + "preferences": {}, + "start": [48.8566, 2.3522] + } + ) + assert response.status_code == 422 + + +# Test no. 1 +def test_turckheim(client): + duration_minutes = 15 + response = client.post( + "/trip/new", + json={ + "preferences": {"sightseeing": {"type": "sightseeing", "score": 5}, "nature": {"type": "nature", "score": 5}, "shopping": {"type": "shopping", "score": 5}, "max_time_minute": duration_minutes, "detour_tolerance_minute": 0}, + "start": [48.084588, 7.280405] + } + ) + result = response.json() + landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) + + # checks : + assert response.status_code == 200 # check for successful planning + assert isinstance(landmarks, list) # check that the return type is a list + assert duration_minutes*0.8 < int(result['total_time']) < duration_minutes*1.2 + assert len(landmarks) > 2 # check that there is something to visit + + +# Test no. 2 +def test_bellecour(client) : + duration_minutes = 35 + response = client.post( + "/trip/new", + json={ + "preferences": {"sightseeing": {"type": "sightseeing", "score": 5}, "nature": {"type": "nature", "score": 5}, "shopping": {"type": "shopping", "score": 5}, "max_time_minute": duration_minutes, "detour_tolerance_minute": 0}, + "start": [45.7576485, 4.8330241] + } + ) + result = response.json() + landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) + osm_ids = landmarks_to_osmid(landmarks) + + # checks : + assert response.status_code == 200 # check for successful planning + assert duration_minutes*0.8 < int(result['total_time']) < duration_minutes*1.2 + assert 136200148 in osm_ids # check for Cathédrale St. Jean in trip + + + +def landmarks_to_osmid(landmarks: List[Landmark]) -> list : """ Convert the list of landmarks into a list containing their osm ids for quick landmark checking. @@ -64,56 +123,6 @@ def load_trip_landmarks(client, first_uuid): return landmarks -@pytest.fixture() -def client(): - return TestClient(app) - - -# Base test for checking if the API returns correct error code when no preferences are specified. -def test_new_trip_invalid_prefs(client): - response = client.post( - "/trip/new", - json={ - "preferences": {}, - "start": [48.8566, 2.3522] - } - ) - assert response.status_code == 422 - - -# Test no. 1 -def test_turckheim(client): - response = client.post( - "/trip/new", - json={ - "preferences": {"sightseeing": {"type": "sightseeing", "score": 5}, "nature": {"type": "nature", "score": 5}, "shopping": {"type": "shopping", "score": 5}, "max_time_minute": 15, "detour_tolerance_minute": 0}, - "start": [48.084588, 7.280405] - } - ) - result = response.json() - landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) - - # checks : - assert response.status_code == 200 # check for successful planning - assert isinstance(landmarks, list) # check that the return type is a list - assert len(landmarks) > 2 # check that there is something to visit - -def test_bellecour(client) : - response = client.post( - "/trip/new", - json={ - "preferences": {"sightseeing": {"type": "sightseeing", "score": 5}, "nature": {"type": "nature", "score": 5}, "shopping": {"type": "shopping", "score": 5}, "max_time_minute": 35, "detour_tolerance_minute": 0}, - "start": [45.7576485, 4.8330241] - } - ) - result = response.json() - landmarks = load_trip_landmarks(client, result['first_landmark_uuid']) - osm_ids = landmarks_to_osmid(landmarks) - - # checks : - assert response.status_code == 200 # check for successful planning - assert 136200148 in osm_ids # check for Cathédrale St. Jean in trip - # def test_new_trip_single_prefs(client):