From f458e0f5af51bdb2f12350de2ab5aafbb6f51e57 Mon Sep 17 00:00:00 2001 From: Dinakar Sarbada Date: Wed, 6 May 2026 12:36:50 -0700 Subject: [PATCH 1/3] test: cover parallel grounding backend --- tests/test_grounding_v3.py | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/test_grounding_v3.py b/tests/test_grounding_v3.py index 30d663b..e881506 100644 --- a/tests/test_grounding_v3.py +++ b/tests/test_grounding_v3.py @@ -122,6 +122,48 @@ class ExaSearchTests(unittest.TestCase): self.assertEqual(0, artifact["resultCount"]) +class ParallelSearchTests(unittest.TestCase): + def test_parallel_search_filters_to_in_range_dated_items(self): + mock_response = { + "results": [ + { + "title": "Parallel Result", + "url": "https://example.com/parallel", + "snippet": "A parallel snippet", + "published_date": "2026-03-15T00:00:00Z", + }, + { + "title": "Old Parallel Result", + "url": "https://example.com/old-parallel", + "snippet": "Should be filtered", + "published_date": "2025-12-01T00:00:00Z", + }, + { + "title": "Undated Parallel Result", + "url": "https://example.com/undated-parallel", + "snippet": "Should also be filtered", + }, + ] + } + with patch("lib.grounding.http.request", return_value=mock_response) as mock_req: + items, artifact = grounding.parallel_search( + "test", ("2026-02-25", "2026-03-27"), "fake-parallel-key" + ) + self.assertEqual(1, len(items)) + self.assertEqual("Parallel Result", items[0]["title"]) + self.assertEqual("https://example.com/parallel", items[0]["url"]) + self.assertEqual("2026-03-15", items[0]["date"]) + self.assertTrue(items[0]["id"].startswith("WP")) + self.assertEqual("parallel", artifact["label"]) + self.assertEqual(1, artifact["resultCount"]) + self.assertEqual("POST", mock_req.call_args.args[0]) + self.assertEqual("https://api.parallel.ai/v1/search", mock_req.call_args.args[1]) + self.assertEqual( + "Bearer fake-parallel-key", + mock_req.call_args.kwargs["headers"]["Authorization"], + ) + + class WebSearchDispatchTests(unittest.TestCase): def test_auto_selects_brave_when_key_present(self): config = {"BRAVE_API_KEY": "test-key"} @@ -141,6 +183,12 @@ class WebSearchDispatchTests(unittest.TestCase): grounding.web_search("test", ("2026-02-25", "2026-03-27"), config, backend="auto") mock.assert_called_once() + def test_auto_selects_parallel_when_only_parallel_key(self): + config = {"PARALLEL_API_KEY": "test-key"} + with patch("lib.grounding.parallel_search", return_value=([], {})) as mock: + grounding.web_search("test", ("2026-02-25", "2026-03-27"), config, backend="auto") + mock.assert_called_once() + def test_auto_returns_empty_when_no_keys(self): items, artifact = grounding.web_search("test", ("2026-02-25", "2026-03-27"), {}, backend="auto") self.assertEqual([], items) @@ -185,6 +233,10 @@ class WebSearchDispatchTests(unittest.TestCase): with self.assertRaises(RuntimeError): grounding.web_search("test", ("2026-02-25", "2026-03-27"), {}, backend="brave") + def test_explicit_parallel_without_key_raises(self): + with self.assertRaises(RuntimeError): + grounding.web_search("test", ("2026-02-25", "2026-03-27"), {}, backend="parallel") + def test_unsupported_backend_raises(self): with self.assertRaises(ValueError): grounding.web_search("test", ("2026-02-25", "2026-03-27"), {}, backend="google") From 9ce7264d436229697ee2d6b1d9e7bf448b6cb394 Mon Sep 17 00:00:00 2001 From: Trevin Chow Date: Sun, 17 May 2026 00:35:34 -0700 Subject: [PATCH 2/3] test(grounding): add serper>parallel priority + parallel empty-results coverage --- tests/test_grounding_v3.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_grounding_v3.py b/tests/test_grounding_v3.py index e881506..99ec312 100644 --- a/tests/test_grounding_v3.py +++ b/tests/test_grounding_v3.py @@ -163,6 +163,12 @@ class ParallelSearchTests(unittest.TestCase): mock_req.call_args.kwargs["headers"]["Authorization"], ) + def test_parallel_search_returns_empty_for_no_results(self): + with patch("lib.grounding.http.request", return_value={"results": []}): + items, artifact = grounding.parallel_search("test", ("2026-02-25", "2026-03-27"), "key") + self.assertEqual([], items) + self.assertEqual(0, artifact["resultCount"]) + class WebSearchDispatchTests(unittest.TestCase): def test_auto_selects_brave_when_key_present(self): @@ -215,6 +221,14 @@ class WebSearchDispatchTests(unittest.TestCase): mock_exa.assert_called_once() mock_serper.assert_not_called() + def test_auto_prefers_serper_over_parallel(self): + config = {"SERPER_API_KEY": "serper-key", "PARALLEL_API_KEY": "parallel-key"} + with patch("lib.grounding.serper_search", return_value=([], {})) as mock_serper, \ + patch("lib.grounding.parallel_search", return_value=([], {})) as mock_parallel: + grounding.web_search("test", ("2026-02-25", "2026-03-27"), config, backend="auto") + mock_serper.assert_called_once() + mock_parallel.assert_not_called() + def test_auto_prefers_brave_when_all_keys_present(self): config = {"BRAVE_API_KEY": "brave-key", "EXA_API_KEY": "exa-key", "SERPER_API_KEY": "serper-key"} with patch("lib.grounding.brave_search", return_value=([], {})) as mock_brave, \ From f2737fc035db00be855f9c769445a2b33aabbde3 Mon Sep 17 00:00:00 2001 From: Trevin Chow Date: Sun, 17 May 2026 00:42:07 -0700 Subject: [PATCH 3/3] =?UTF-8?q?test(grounding):=20fix=20published=5Fdate?= =?UTF-8?q?=20=E2=86=92=20publish=5Fdate=20mock=20key=20mismatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_grounding_v3.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_grounding_v3.py b/tests/test_grounding_v3.py index 99ec312..7268d3e 100644 --- a/tests/test_grounding_v3.py +++ b/tests/test_grounding_v3.py @@ -130,13 +130,13 @@ class ParallelSearchTests(unittest.TestCase): "title": "Parallel Result", "url": "https://example.com/parallel", "snippet": "A parallel snippet", - "published_date": "2026-03-15T00:00:00Z", + "publish_date": "2026-03-15T00:00:00Z", }, { "title": "Old Parallel Result", "url": "https://example.com/old-parallel", "snippet": "Should be filtered", - "published_date": "2025-12-01T00:00:00Z", + "publish_date": "2025-12-01T00:00:00Z", }, { "title": "Undated Parallel Result",