============================= test session starts ==============================
platform linux -- Python 3.11.15, pytest-9.1.1, pluggy-1.6.0
rootdir: /app
configfile: pyproject.toml
testpaths: tests
plugins: anyio-4.14.1, respx-0.23.1, asyncio-1.4.0, cov-7.1.0
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function
collected 152 items

tests/test_api.py .....................                                  [ 13%]
tests/test_browse_client.py .F....                                       [ 17%]
tests/test_config.py ........                                            [ 23%]
tests/test_evidence_packer.py ......................                     [ 37%]
tests/test_fetch_client.py .............                                 [ 46%]
tests/test_image_search_client.py ................                       [ 56%]
tests/test_llm_provider.py .......                                       [ 61%]
tests/test_middleware.py ...                                             [ 63%]
tests/test_orchestrator.py .........                                     [ 69%]
tests/test_schemas_common.py ..........                                  [ 75%]
tests/test_search_client.py ............                                 [ 83%]
tests/test_validation.py .................FF                             [ 96%]
tests/test_vision_client.py ......                                       [100%]

=================================== FAILURES ===================================
________________ TestBrowseClientBrowse.test_browse_single_page ________________
tests/test_browse_client.py:100: in test_browse_single_page
    assert "Main content" in response.pages[0].text
E   AssertionError: assert 'Main content' in 'Content'
E    +  where 'Content' = BrowsePageResult(url='https://example.com/page', final_url='https://example.com/page', canonical_url=None, title='Test....040318+00:00', extraction_time_ms=5.37, warnings=[], screenshot_base64=None, viewport_width=1280, viewport_height=720).text
______________ TestValidateUrlsAsync.test_validates_multiple_urls ______________
tests/test_validation.py:137: in test_validates_multiple_urls
    assert result == urls
E   AssertionError: assert (['https://ex...e.com/c'], []) == ['https://exa...xample.com/c']
E     
E     At index 0 diff: ['https://example.com/a', 'https://example.com/b', 'https://example.com/c'] != 'https://example.com/a'
E     Right contains one more item: 'https://example.com/c'
E     Use -v to get more diff
___________ TestValidateUrlsAsync.test_raises_on_private_ip_in_batch ___________
tests/test_validation.py:145: in test_raises_on_private_ip_in_batch
    with pytest.raises(ValueError, match="private/reserved"):
E   Failed: DID NOT RAISE ValueError
------------------------------ Captured log call -------------------------------
WARNING  web.validation:validation.py:150 Dropping URL https://evil.example.com/steal: URL hostname 'evil.example.com' resolves to private/reserved address 10.0.0.1
=============================== warnings summary ===============================
../usr/local/lib/python3.11/site-packages/fastapi/testclient.py:1
  /usr/local/lib/python3.11/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
    from starlette.testclient import TestClient as TestClient  # noqa

tests/test_browse_client.py::TestBrowseClientBrowse::test_browse_single_page
tests/test_browse_client.py::TestBrowseClientBrowse::test_browse_handles_timeout
tests/test_browse_client.py::TestBrowseClientBrowse::test_browse_multiple_urls
  /app/src/web/browse/client.py:445: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
    page.on("response", _on_response)
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
------------------ generated xml file: /app/test-results.xml -------------------
=========================== short test summary info ============================
FAILED tests/test_browse_client.py::TestBrowseClientBrowse::test_browse_single_page
FAILED tests/test_validation.py::TestValidateUrlsAsync::test_validates_multiple_urls
FAILED tests/test_validation.py::TestValidateUrlsAsync::test_raises_on_private_ip_in_batch
================== 3 failed, 149 passed, 4 warnings in 16.74s ==================
