Some checks failed
		
		
	
	Build and deploy the backend to staging / Build and push image (pull_request) Successful in 2m9s
				
			Run linting on the backend code / Build (pull_request) Successful in 34s
				
			Run testing on the backend code / Build (pull_request) Failing after 1m56s
				
			Build and deploy the backend to staging / Deploy to staging (pull_request) Successful in 17s
				
			
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Collection of tests to ensure correct implementation and track progress. """
 | 
						|
 | 
						|
from fastapi.testclient import TestClient
 | 
						|
import pytest
 | 
						|
 | 
						|
from ..structs.landmark import Toilets
 | 
						|
from ..main import app
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture(scope="module")
 | 
						|
def client():
 | 
						|
    """Client used to call the app."""
 | 
						|
    return TestClient(app)
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "location,radius,status_code",
 | 
						|
    [
 | 
						|
        ({}, None, 422),                # Invalid case: no location at all.
 | 
						|
        ([443], None, 422),             # Invalid cases: invalid location.
 | 
						|
        ([443, 433], None, 422),             # Invalid cases: invalid location.
 | 
						|
    ]
 | 
						|
)
 | 
						|
def test_invalid_input(client, location, radius, status_code):    # pylint: disable=redefined-outer-name
 | 
						|
    """
 | 
						|
    Test n°1 : Verify handling of invalid input.
 | 
						|
 | 
						|
    Args:
 | 
						|
        client:
 | 
						|
        request:
 | 
						|
    """
 | 
						|
    response = client.post(
 | 
						|
        "/toilets/new",
 | 
						|
        params={
 | 
						|
            "location": location,
 | 
						|
            "radius": radius
 | 
						|
        }
 | 
						|
    )
 | 
						|
 | 
						|
    # checks :
 | 
						|
    assert response.status_code == status_code
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "location,status_code",
 | 
						|
    [
 | 
						|
        ([48.2270, 7.4370], 200), # Orschwiller.
 | 
						|
        ([10.2012, 10.123], 200), # Nigerian desert.
 | 
						|
        ([63.989, -19.677], 200), # Hekla volcano, Iceland
 | 
						|
    ]
 | 
						|
)
 | 
						|
def test_no_toilets(client, location, status_code):    # pylint: disable=redefined-outer-name
 | 
						|
    """
 | 
						|
    Test n°3 : Verify the code finds some toilets in big cities.
 | 
						|
 | 
						|
    Args:
 | 
						|
        client:
 | 
						|
        request:
 | 
						|
    """
 | 
						|
    response = client.post(
 | 
						|
        "/toilets/new",
 | 
						|
        params={
 | 
						|
            "location": location
 | 
						|
        }
 | 
						|
    )
 | 
						|
    toilets_list = [Toilets.model_validate(toilet) for toilet in response.json()]
 | 
						|
 | 
						|
    # checks :
 | 
						|
    assert response.status_code == status_code  # check for successful planning
 | 
						|
    assert isinstance(toilets_list, list)  # check that the return type is a list
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "location,status_code",
 | 
						|
    [
 | 
						|
        ([45.7576485, 4.8330241], 200), # Lyon, Bellecour.
 | 
						|
        ([-6.913795,  107.60278], 200), # Bandung, train station
 | 
						|
        ([-22.970140, -43.18181], 200), # Rio de Janeiro, Copacabana
 | 
						|
    ]
 | 
						|
)
 | 
						|
def test_toilets(client, location, status_code):    # pylint: disable=redefined-outer-name
 | 
						|
    """
 | 
						|
    Test n°3 : Verify the code finds some toilets in big cities.
 | 
						|
 | 
						|
    Args:
 | 
						|
        client:
 | 
						|
        request:
 | 
						|
    """
 | 
						|
    response = client.post(
 | 
						|
        "/toilets/new",
 | 
						|
        params={
 | 
						|
            "location": location,
 | 
						|
            "radius" : 600
 | 
						|
        }
 | 
						|
    )
 | 
						|
    toilets_list = [Toilets.model_validate(toilet) for toilet in response.json()]
 | 
						|
 | 
						|
    # checks :
 | 
						|
    assert response.status_code == status_code  # check for successful planning
 | 
						|
    assert isinstance(toilets_list, list)  # check that the return type is a list
 | 
						|
    assert len(toilets_list) > 0
 |