From d993c81f08444a191d1dd3ed8bed9ac4d8203792 Mon Sep 17 00:00:00 2001 From: chengyongru <2755839590@qq.com> Date: Fri, 24 Jul 2026 00:23:34 +0800 Subject: [PATCH] test(webui): cover restricted media previews --- tests/webui/test_file_preview.py | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/webui/test_file_preview.py diff --git a/tests/webui/test_file_preview.py b/tests/webui/test_file_preview.py new file mode 100644 index 00000000..e219163d --- /dev/null +++ b/tests/webui/test_file_preview.py @@ -0,0 +1,40 @@ +from pathlib import Path + +import pytest + +from nanobot.security.workspace_access import default_workspace_scope +from nanobot.webui.file_preview import WebUIFilePreviewError, file_preview_payload + + +def test_restricted_preview_allows_media_file(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + workspace = tmp_path / "workspace" + workspace.mkdir() + media = tmp_path / "media" + media.mkdir() + uploaded = media / "upload.txt" + uploaded.write_text("uploaded", encoding="utf-8") + monkeypatch.setattr("nanobot.webui.file_preview.get_media_dir", lambda: media) + + scope = default_workspace_scope(workspace, restrict_to_workspace=True) + + payload = file_preview_payload(str(uploaded), scope=scope) + + assert payload["content"] == "uploaded" + assert Path(payload["path"]) == uploaded.resolve() + + +def test_restricted_preview_rejects_other_root(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + workspace = tmp_path / "workspace" + workspace.mkdir() + media = tmp_path / "media" + media.mkdir() + outside = tmp_path / "outside.txt" + outside.write_text("secret", encoding="utf-8") + monkeypatch.setattr("nanobot.webui.file_preview.get_media_dir", lambda: media) + + scope = default_workspace_scope(workspace, restrict_to_workspace=True) + + with pytest.raises(WebUIFilePreviewError, match="outside the current workspace") as exc_info: + file_preview_payload(str(outside), scope=scope) + + assert exc_info.value.status == 403