"""Shared fixtures and helpers for node tests.""" import sys from pathlib import Path import pytest from meshbay_node.roots import RootSet # ffmpeg / ffprobe run via asyncio.create_subprocess_exec, which needs the # ProactorEventLoop — but the repo-root conftest forces the SelectorEventLoop # on win32 so aiortc's ICE stack works there (see devel/windows-devel.md §5). # The two are mutually exclusive on one Windows asyncio loop; until the media # path gets a thread-based subprocess runner, these tests can't run on win32. needs_subprocess = pytest.mark.skipif( sys.platform == "win32", reason="ffmpeg subprocess needs ProactorEventLoop; win32 conftest forces " "SelectorEventLoop for aiortc", ) # Windows-only gaps still to close (see devel/windows-devel.md §5/§6). win32_todo = pytest.mark.skipif( sys.platform == "win32", reason="Windows behaviour not implemented yet (W3 / platform specifics)", ) def one_root(path: Path, *, name: str = "", kind: str = "generic", writable: bool = True) -> RootSet: """ A RootSet with a single writable root over `path`. The equivalent of the old `shared_dir`. Note what it implies for assertions: a file directly in `path` now has `entry.path == `, not `""` — every index path carries its root name, in a group with one root as much as in a group with five. Writable by default because most callers are testing something else and want a root an upload can reach. `writable=False` is the read-only group. """ return RootSet.build([{"path": str(path), "name": name, "kind": kind, "writable": writable}])