arcade-mcp/toolkits/search/tests/test_utils.py
Eric Gustin 99ff11d30e
Various Search Toolkits (#285)
1. Add the following tools:
* Google Finance
    - get_stock_summary
    - get_stock_historical_data
* Google Flights
    - search_roundtrip_flights
    - search_one_way_flights
* Google Hotels
    - search_hotels
    
2. Add some common helper functions for serpAPI tools.
2025-03-14 14:23:14 -07:00

56 lines
1.8 KiB
Python

import pytest
import serpapi
from arcade.sdk.errors import ToolExecutionError
from arcade_search.utils import call_serpapi, prepare_params
@pytest.mark.asyncio
@pytest.mark.parametrize(
"engine, kwargs, expected",
[
("google", {}, {"engine": "google"}),
(
"google",
{"q": "test", "window": 10, "time": "00:12:12"},
{
"engine": "google",
"q": "test",
"window": 10,
"time": "00:12:12",
},
),
],
)
async def test_prepare_params(engine, kwargs, expected):
params = prepare_params(engine, **kwargs)
assert params == expected
@pytest.mark.parametrize(
"error_message, sanitized_message",
[
(
"You hit your rate limit",
"You hit your rate limit",
),
(
"Bad Request for url: https://serpapi.com/search?engine=google_hotels&api_key=ABC123456",
"Bad Request for url: https://serpapi.com/search?engine=google_hotels&api_key=***",
),
(
"Bad Request for url: https://serpapi.com/search?engine=google_hotels&api_key=ABC123456 make sure the api key is correct",
"Bad Request for url: https://serpapi.com/search?engine=google_hotels&api_key=*** make sure the api key is correct",
),
],
)
def test_call_serpapi_failure(monkeypatch, dummy_context, error_message, sanitized_message):
def fake_serpapi_search(self, params: dict) -> dict:
raise Exception(error_message) # noqa: TRY002
monkeypatch.setattr(serpapi.Client, "search", fake_serpapi_search)
with pytest.raises(ToolExecutionError) as excinfo:
call_serpapi(dummy_context, {})
assert excinfo.value.developer_message == sanitized_message