from pathlib import Path import pytest from app.agents.new_chat.middleware.multi_root_local_folder_backend import ( MultiRootLocalFolderBackend, ) from app.agents.new_chat.filesystem_selection import FilesystemMode from app.agents.new_chat.middleware.filesystem import SurfSenseFilesystemMiddleware pytestmark = pytest.mark.unit class _BackendWithRawRead: def __init__(self, content: str) -> None: self._content = content def read(self, file_path: str, offset: int = 0, limit: int = 200000) -> str: del file_path, offset, limit return " 1\tline1\n 2\tline2" async def aread(self, file_path: str, offset: int = 0, limit: int = 200000) -> str: return self.read(file_path, offset, limit) def read_raw(self, file_path: str) -> str: del file_path return self._content async def aread_raw(self, file_path: str) -> str: return self.read_raw(file_path) class _RuntimeNoSuggestedPath: state = {"file_operation_contract": {}} def test_verify_written_content_prefers_raw_sync() -> None: middleware = SurfSenseFilesystemMiddleware.__new__(SurfSenseFilesystemMiddleware) expected = "line1\nline2" backend = _BackendWithRawRead(expected) verify_error = middleware._verify_written_content_sync( backend=backend, path="/note.md", expected_content=expected, ) assert verify_error is None def test_contract_suggested_path_falls_back_to_notes_md() -> None: middleware = SurfSenseFilesystemMiddleware.__new__(SurfSenseFilesystemMiddleware) middleware._filesystem_mode = FilesystemMode.CLOUD suggested = middleware._get_contract_suggested_path(_RuntimeNoSuggestedPath()) # type: ignore[arg-type] assert suggested == "/notes.md" @pytest.mark.asyncio async def test_verify_written_content_prefers_raw_async() -> None: middleware = SurfSenseFilesystemMiddleware.__new__(SurfSenseFilesystemMiddleware) expected = "line1\nline2" backend = _BackendWithRawRead(expected) verify_error = await middleware._verify_written_content_async( backend=backend, path="/note.md", expected_content=expected, ) assert verify_error is None def test_normalize_local_mount_path_prefixes_default_mount(tmp_path: Path) -> None: root = tmp_path / "PC Backups" root.mkdir() backend = MultiRootLocalFolderBackend((("pc_backups", str(root)),)) runtime = _RuntimeNoSuggestedPath() middleware = SurfSenseFilesystemMiddleware.__new__(SurfSenseFilesystemMiddleware) middleware._get_backend = lambda _runtime: backend # type: ignore[method-assign] resolved = middleware._normalize_local_mount_path("/random-note.md", runtime) # type: ignore[arg-type] assert resolved == "/pc_backups/random-note.md" def test_normalize_local_mount_path_keeps_explicit_mount(tmp_path: Path) -> None: root = tmp_path / "PC Backups" root.mkdir() backend = MultiRootLocalFolderBackend((("pc_backups", str(root)),)) runtime = _RuntimeNoSuggestedPath() middleware = SurfSenseFilesystemMiddleware.__new__(SurfSenseFilesystemMiddleware) middleware._get_backend = lambda _runtime: backend # type: ignore[method-assign] resolved = middleware._normalize_local_mount_path( # type: ignore[arg-type] "/pc_backups/notes/random-note.md", runtime, ) assert resolved == "/pc_backups/notes/random-note.md"