aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@archive.org>2021-02-11 19:16:41 -0800
committerBryan Newbold <bnewbold@archive.org>2021-02-11 19:16:41 -0800
commitc8ca2bcf4000af98f5b4ba8512d14049fce7fc7d (patch)
tree774690758b432a482a700dc8a27f3cce4943c04b
parent9b5e1827331f1c609b3af9fef6067dc91bad53f2 (diff)
downloadfatcat-scholar-c8ca2bcf4000af98f5b4ba8512d14049fce7fc7d.tar.gz
fatcat-scholar-c8ca2bcf4000af98f5b4ba8512d14049fce7fc7d.zip
api: handle null 'q' parameter on search endpoint
-rw-r--r--fatcat_scholar/web.py2
-rw-r--r--tests/test_web.py6
2 files changed, 7 insertions, 1 deletions
diff --git a/fatcat_scholar/web.py b/fatcat_scholar/web.py
index 124e269..31ee617 100644
--- a/fatcat_scholar/web.py
+++ b/fatcat_scholar/web.py
@@ -97,6 +97,8 @@ class HitsModel(BaseModel):
@api.get("/search", operation_id="get_search", response_model=HitsModel)
async def search(query: FulltextQuery = Depends(FulltextQuery)) -> FulltextHits:
hits: Optional[FulltextHits] = None
+ if query.q is None:
+ raise HTTPException(status_code=400, detail=f"Expected a 'q' query parameter")
try:
hits = process_query(query)
except ValueError as e:
diff --git a/tests/test_web.py b/tests/test_web.py
index 810f8e3..df8b832 100644
--- a/tests/test_web.py
+++ b/tests/test_web.py
@@ -39,6 +39,10 @@ def test_basic_api(client: Any, mocker: Any) -> None:
assert resp.status_code == 200
assert resp.json()
+ # request with no 'q' parameter is an error
+ resp = client.get("/search", headers=headers)
+ assert resp.status_code == 400
+
with open("tests/files/elastic_fulltext_search.json") as f:
elastic_resp = json.loads(f.read())
@@ -49,7 +53,7 @@ def test_basic_api(client: Any, mocker: Any) -> None:
(200, {}, json.dumps(elastic_resp)),
]
- resp = client.get("/search", headers=headers)
+ resp = client.get("/search?q=blood", headers=headers)
assert resp.status_code == 200
assert resp.json()