70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from wf_api.platform_context import SourceBindingPlatformContext
|
|
from wf_api.source_helpers import read_resource
|
|
from wf_api.source_refs import SourceResourceRef
|
|
from wf_core import RuntimeContext
|
|
|
|
|
|
async def test_read_resource_resolves_logical_source_and_bounds_text() -> None:
|
|
calls: list[tuple[str, str, int]] = []
|
|
|
|
async def handler(source_id: str, uri: str, max_chars: int):
|
|
calls.append((source_id, uri, max_chars))
|
|
return {
|
|
"contents": [
|
|
{
|
|
"type": "text",
|
|
"text": "abcdefghijklmnopqrstuvwxyz",
|
|
"mimeType": "text/plain",
|
|
}
|
|
]
|
|
}
|
|
|
|
platform = SourceBindingPlatformContext(
|
|
source_bindings={"drive": "drive.personal"},
|
|
read_resource_handler=handler,
|
|
)
|
|
|
|
result = await read_resource(
|
|
SourceResourceRef(logical_source="drive", uri="gdrive://file/abc"),
|
|
RuntimeContext(current_node_id="read", platform=platform),
|
|
max_chars=5,
|
|
)
|
|
|
|
assert calls == [("drive.personal", "gdrive://file/abc", 5)]
|
|
assert result.truncated is True
|
|
assert result.text == "abcde"
|
|
|
|
|
|
async def test_read_resource_preserves_upstream_truncated_signal() -> None:
|
|
async def handler(source_id: str, uri: str, max_chars: int):
|
|
return {
|
|
"contents": [{"type": "text", "text": "abc", "mimeType": "text/plain"}],
|
|
"truncated": True,
|
|
}
|
|
|
|
platform = SourceBindingPlatformContext(
|
|
source_bindings={"drive": "drive.personal"},
|
|
read_resource_handler=handler,
|
|
)
|
|
|
|
result = await read_resource(
|
|
SourceResourceRef(logical_source="drive", uri="gdrive://file/abc"),
|
|
RuntimeContext(current_node_id="read", platform=platform),
|
|
max_chars=5,
|
|
)
|
|
|
|
assert result.truncated is True
|
|
assert result.text == "abc"
|
|
|
|
|
|
async def test_read_resource_requires_platform_context() -> None:
|
|
with pytest.raises(RuntimeError, match="platform context"):
|
|
await read_resource(
|
|
SourceResourceRef(logical_source="drive", uri="gdrive://file/abc"),
|
|
RuntimeContext(current_node_id="read"),
|
|
)
|