from typing import Optional from fastapi import FastAPI from fastapi.params import Query from fastapi.testclient import TestClient app = FastAPI() @app.get("/") def get( x: Optional[float] = Query(default=0, allow_inf_nan=False), y: Optional[float] = Query(default=0, allow_inf_nan=True), z: Optional[float] = Query(default=0), ) -> str: # type: ignore return "OK" client = TestClient(app) def test_allow_inf_nan_false(): response = client.get("/?x=inf") assert response.status_code == 422, response.text response = client.get("/?x=-inf") assert response.status_code == 422, response.text response = client.get("/?x=nan") assert response.status_code == 422, response.text response = client.get("/?x=0") assert response.status_code == 200, response.text def test_allow_inf_nan_true(): response = client.get("/?y=inf") assert response.status_code == 200, response.text response = client.get("/?y=-inf") assert response.status_code == 200, response.text response = client.get("/?y=nan") assert response.status_code == 200, response.text response = client.get("/?y=0") assert response.status_code == 200, response.text def test_allow_inf_nan_not_specified(): response = client.get("/?z=inf") assert response.status_code == 200, response.text response = client.get("/?z=-inf") assert response.status_code == 200, response.text response = client.get("/?z=nan") assert response.status_code == 200, response.text response = client.get("/?z=0") assert response.status_code == 200, response.text