2860fb5d18
Security / Dependency review (push) Has been skipped
Scorecard / Scorecard analysis (push) Failing after 0s
Validate / eval (push) Failing after 0s
Security / Dependency audit (push) Failing after 1s
Security / Secret scan (push) Failing after 1s
Validate / tests (push) Failing after 0s
Validate / mcp-tests (push) Failing after 1s
GitHub Actions Security Analysis with zizmor 🌈 / zizmor (push) Failing after 1s
Security / SAST scan (push) Failing after 13m52s
56 lines
2.5 KiB
Python
56 lines
2.5 KiB
Python
"""Tests for scripts/lib/web_fetch_keyless.py — keyless URL-to-markdown fetch."""
|
|
|
|
from unittest import mock
|
|
|
|
from lib import web_fetch_keyless
|
|
|
|
|
|
class TestFetchMarkdown:
|
|
"""fetch_markdown turns a URL into clean markdown via the keyless reader."""
|
|
|
|
def test_happy_path(self):
|
|
body = "Title: Example\nURL Source: https://example.com\n\n# Example\n\nReal content."
|
|
with mock.patch.object(web_fetch_keyless.http, "get_text", return_value=body) as gt:
|
|
result = web_fetch_keyless.fetch_markdown("https://example.com")
|
|
assert result.ok is True
|
|
assert "Real content." in result.markdown
|
|
assert result.cached_snapshot is False
|
|
# Requests the reader-prefixed URL with a text accept header.
|
|
called_url = gt.call_args.args[0]
|
|
assert called_url == "https://r.jina.ai/https://example.com"
|
|
assert gt.call_args.kwargs.get("accept") == "text/plain"
|
|
|
|
def test_cached_snapshot_flagged(self):
|
|
body = "Warning: showing a cached snapshot of this page.\n\n# Title\n\nbody"
|
|
with mock.patch.object(web_fetch_keyless.http, "get_text", return_value=body):
|
|
result = web_fetch_keyless.fetch_markdown("https://example.com/post")
|
|
assert result.ok is True
|
|
assert result.cached_snapshot is True
|
|
|
|
def test_fetch_failure_returns_typed_empty(self):
|
|
with mock.patch.object(web_fetch_keyless.http, "get_text", return_value=None):
|
|
result = web_fetch_keyless.fetch_markdown("https://example.com")
|
|
assert result.ok is False
|
|
assert result.markdown == ""
|
|
assert result.reason == "fetch-failed"
|
|
|
|
def test_empty_body_returns_typed_empty(self):
|
|
with mock.patch.object(web_fetch_keyless.http, "get_text", return_value=" \n "):
|
|
result = web_fetch_keyless.fetch_markdown("https://example.com")
|
|
assert result.ok is False
|
|
assert result.reason == "empty-body"
|
|
|
|
def test_invalid_url_makes_no_request(self):
|
|
with mock.patch.object(web_fetch_keyless.http, "get_text") as gt:
|
|
result = web_fetch_keyless.fetch_markdown("not a url")
|
|
assert result.ok is False
|
|
assert result.reason == "invalid-url"
|
|
gt.assert_not_called()
|
|
|
|
def test_empty_url_makes_no_request(self):
|
|
with mock.patch.object(web_fetch_keyless.http, "get_text") as gt:
|
|
result = web_fetch_keyless.fetch_markdown("")
|
|
assert result.ok is False
|
|
assert result.reason == "invalid-url"
|
|
gt.assert_not_called()
|