From 00795bd71e5105c739843edbace30c6ae5dae2ea Mon Sep 17 00:00:00 2001 From: Sara Zan Date: Wed, 16 Feb 2022 10:32:22 +0100 Subject: [PATCH] Add type check for meta on REST API & add tests (#2184) * Add type check for meta & add tests * Improve tests * Handle properly the ValueError ad an HTTPException Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- rest_api/controller/file_upload.py | 5 +++- rest_api/test/test_rest_api.py | 38 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/rest_api/controller/file_upload.py b/rest_api/controller/file_upload.py index a59add36a..0c186745b 100644 --- a/rest_api/controller/file_upload.py +++ b/rest_api/controller/file_upload.py @@ -91,7 +91,10 @@ def upload_file( file_paths: list = [] file_metas: list = [] - meta_form = json.loads(meta) # type: ignore + + meta_form = json.loads(meta) or {} # type: ignore + if not isinstance(meta_form, dict): + raise HTTPException(status_code=500, detail=f"The meta field must be a dict or None, not {type(meta_form)}") for file in files: try: diff --git a/rest_api/test/test_rest_api.py b/rest_api/test/test_rest_api.py index a46e71ff2..722d1db37 100644 --- a/rest_api/test/test_rest_api.py +++ b/rest_api/test/test_rest_api.py @@ -124,6 +124,9 @@ def test_delete_documents(populated_client: TestClient): def test_file_upload(client: TestClient): + response = client.post(url="/documents/get_by_filters", data='{"filters": {}}') + assert len(response.json()) == 0 + file_to_upload = {"files": (Path(__file__).parent / "samples" / "pdf" / "sample_pdf_1.pdf").open("rb")} response = client.post( url="/file-upload", @@ -132,6 +135,41 @@ def test_file_upload(client: TestClient): ) assert 200 == response.status_code + response = client.post(url="/documents/get_by_filters", data='{"filters": {}}') + assert len(response.json()) > 0 + + +def test_file_upload_with_no_meta(client: TestClient): + response = client.post(url="/documents/get_by_filters", data='{"filters": {}}') + assert len(response.json()) == 0 + + file_to_upload = {"files": (Path(__file__).parent / "samples" / "pdf" / "sample_pdf_1.pdf").open("rb")} + response = client.post( + url="/file-upload", + files=file_to_upload, + data={"meta": ""}, + ) + assert 200 == response.status_code + + response = client.post(url="/documents/get_by_filters", data='{"filters": {}}') + assert len(response.json()) > 0 + + +def test_file_upload_with_wrong_meta(client: TestClient): + response = client.post(url="/documents/get_by_filters", data='{"filters": {}}') + assert len(response.json()) == 0 + + file_to_upload = {"files": (Path(__file__).parent / "samples" / "pdf" / "sample_pdf_1.pdf").open("rb")} + response = client.post( + url="/file-upload", + files=file_to_upload, + data={"meta": "1"}, + ) + assert 500 == response.status_code + + response = client.post(url="/documents/get_by_filters", data='{"filters": {}}') + assert len(response.json()) == 0 + def test_query_with_no_filter(populated_client: TestClient): query_with_no_filter_value = {"query": "Who made the PDF specification?"}