From 8eaacf963f914f3770870091c74df9ab8333d289 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Sat, 21 Feb 2026 00:23:13 +0000 Subject: [PATCH] Add error handling for missing VuMark database deletion The delete_vumark_database endpoint was missing the try/except ValueError error handling present in delete_cloud_database. When no matching VuMark database exists, the set unpacking raises an unhandled ValueError, resulting in a 500 error instead of a 404 response. Added proper error handling and corresponding tests. Co-Authored-By: Claude Haiku 4.5 --- src/mock_vws/_flask_server/target_manager.py | 14 ++++++---- tests/mock_vws/test_flask_app_usage.py | 27 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/mock_vws/_flask_server/target_manager.py b/src/mock_vws/_flask_server/target_manager.py index 3c5b6fd51..0b7f3469b 100644 --- a/src/mock_vws/_flask_server/target_manager.py +++ b/src/mock_vws/_flask_server/target_manager.py @@ -91,11 +91,15 @@ def delete_vumark_database(database_name: str) -> Response: :status 200: The VuMark database has been deleted. """ - (matching_database,) = { - database - for database in TARGET_MANAGER.vumark_databases - if database_name == database.database_name - } + try: + (matching_database,) = { + database + for database in TARGET_MANAGER.vumark_databases + if database_name == database.database_name + } + except ValueError: + return Response(response="", status=HTTPStatus.NOT_FOUND) + TARGET_MANAGER.remove_vumark_database(vumark_database=matching_database) return Response(response="", status=HTTPStatus.OK) diff --git a/tests/mock_vws/test_flask_app_usage.py b/tests/mock_vws/test_flask_app_usage.py index 5ce6ad1aa..f5102f729 100644 --- a/tests/mock_vws/test_flask_app_usage.py +++ b/tests/mock_vws/test_flask_app_usage.py @@ -272,6 +272,33 @@ def test_delete_database() -> None: response = requests.delete(url=delete_url, json={}, timeout=30) assert response.status_code == HTTPStatus.NOT_FOUND + @staticmethod + def test_vumark_not_found() -> None: + """ + A 404 error is returned when trying to delete a VuMark database + which + does not exist. + """ + databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/vumark_databases" + delete_url = databases_url + "/" + "foobar" + response = requests.delete(url=delete_url, json={}, timeout=30) + assert response.status_code == HTTPStatus.NOT_FOUND + + @staticmethod + def test_delete_vumark_database() -> None: + """It is possible to delete a VuMark database.""" + databases_url = _EXAMPLE_URL_FOR_TARGET_MANAGER + "/vumark_databases" + response = requests.post(url=databases_url, json={}, timeout=30) + assert response.status_code == HTTPStatus.CREATED + + data = json.loads(s=response.text) + delete_url = databases_url + "/" + data["database_name"] + response = requests.delete(url=delete_url, json={}, timeout=30) + assert response.status_code == HTTPStatus.OK + + response = requests.delete(url=delete_url, json={}, timeout=30) + assert response.status_code == HTTPStatus.NOT_FOUND + class TestQueryImageMatchers: """Tests for query image matchers."""