From d18c05c36dc4324dd24e20e5344bca9c038bbf73 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 09:16:51 +0000 Subject: [PATCH] test: add missing error tests for updating saved searches Added tests to `tests/test_api_advanced_filters.py` to cover missing edge cases and error handling for the `PUT /api/saved-searches/{id}` endpoint. New test coverage includes duplicate name conflicts (409), validation errors for names exceeding max length (422), empty names (422), empty filters (422), and payloads containing only invalid filter keys (422). Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com> --- tests/test_api_advanced_filters.py | 77 ++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/tests/test_api_advanced_filters.py b/tests/test_api_advanced_filters.py index 03bd7b24..8b609d0f 100644 --- a/tests/test_api_advanced_filters.py +++ b/tests/test_api_advanced_filters.py @@ -296,6 +296,83 @@ class TestSavedSearchesCRUD: ) assert response.status_code == 404 + def test_update_saved_search_duplicate_name(self, client: TestClient): + """PUT /api/saved-searches/{id} with duplicate name returns 409.""" + # Create first search + client.post( + "/api/saved-searches", + json={"name": "First Search", "filters": {"status": "pending"}}, + ) + # Create second search + create_resp2 = client.post( + "/api/saved-searches", + json={"name": "Second Search", "filters": {"status": "completed"}}, + ) + search_id2 = create_resp2.json()["id"] + + # Try to rename second search to "First Search" + update_resp = client.put( + f"/api/saved-searches/{search_id2}", + json={"name": "First Search", "filters": {"status": "completed"}}, + ) + assert update_resp.status_code == 409 + + def test_update_saved_search_name_too_long(self, client: TestClient): + """PUT /api/saved-searches/{id} with name > 100 chars returns 422.""" + create_resp = client.post( + "/api/saved-searches", + json={"name": "Valid Name", "filters": {"status": "pending"}}, + ) + search_id = create_resp.json()["id"] + + update_resp = client.put( + f"/api/saved-searches/{search_id}", + json={"name": "x" * 101, "filters": {"status": "completed"}}, + ) + assert update_resp.status_code == 422 + + def test_update_saved_search_empty_name(self, client: TestClient): + """PUT /api/saved-searches/{id} with empty name returns 422.""" + create_resp = client.post( + "/api/saved-searches", + json={"name": "Valid Name", "filters": {"status": "pending"}}, + ) + search_id = create_resp.json()["id"] + + update_resp = client.put( + f"/api/saved-searches/{search_id}", + json={"name": "", "filters": {"status": "completed"}}, + ) + assert update_resp.status_code == 422 + + def test_update_saved_search_empty_filters(self, client: TestClient): + """PUT /api/saved-searches/{id} with empty filters returns 422.""" + create_resp = client.post( + "/api/saved-searches", + json={"name": "Valid Name", "filters": {"status": "pending"}}, + ) + search_id = create_resp.json()["id"] + + update_resp = client.put( + f"/api/saved-searches/{search_id}", + json={"name": "Valid Name", "filters": {}}, + ) + assert update_resp.status_code == 422 + + def test_update_saved_search_invalid_filters(self, client: TestClient): + """PUT /api/saved-searches/{id} with only invalid filters returns 422.""" + create_resp = client.post( + "/api/saved-searches", + json={"name": "Valid Name", "filters": {"status": "pending"}}, + ) + search_id = create_resp.json()["id"] + + update_resp = client.put( + f"/api/saved-searches/{search_id}", + json={"name": "Valid Name", "filters": {"invalid_key": "value"}}, + ) + assert update_resp.status_code == 422 + def test_delete_saved_search(self, client: TestClient): """DELETE /api/saved-searches/{id} removes the saved search.""" # Create