mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 00:36:31 +02:00
164 lines
5.8 KiB
Python
164 lines
5.8 KiB
Python
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"
|
|
|
|
|
|
def test_normalize_local_mount_path_windows_backslashes(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]
|
|
r"\notes\random-note.md",
|
|
runtime,
|
|
)
|
|
|
|
assert resolved == "/pc_backups/notes/random-note.md"
|
|
|
|
|
|
def test_normalize_local_mount_path_normalizes_mixed_separators(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]
|
|
r"\\notes//nested\\random-note.md",
|
|
runtime,
|
|
)
|
|
|
|
assert resolved == "/pc_backups/notes/nested/random-note.md"
|
|
|
|
|
|
def test_normalize_local_mount_path_keeps_explicit_mount_with_backslashes(
|
|
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]
|
|
r"\pc_backups\notes\random-note.md",
|
|
runtime,
|
|
)
|
|
|
|
assert resolved == "/pc_backups/notes/random-note.md"
|
|
|
|
|
|
def test_normalize_local_mount_path_prefixes_posix_absolute_path_for_linux_and_macos(
|
|
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("/var/log/app.log", runtime) # type: ignore[arg-type]
|
|
|
|
assert resolved == "/pc_backups/var/log/app.log"
|