test(skills): skip POSIX mode-bit assertions on Windows (#5244)

* test(skills): skip POSIX mode-bit assertions on Windows

Windows has no POSIX mode bits: st_mode always reports 0o777 and
Path.chmod only honors the read-only flag, so the readability
assertions in both skill-permissions tests cannot hold on Windows
hosts. Skip them there with an explicit reason; they still run on
POSIX where the chmod contract applies.

* test(skills): address review feedback on Windows skips

- correct the skip reason: Windows mode bits are observable; it is
  Path.chmod() that only toggles the read-only bit, so the asserted
  0o644/0o755 modes are never observable there;
- hoist the repeated skipif to a module-level requires_posix_mode_bits
  decorator so the reason stays single-sourced;
- keep test_written_path_readability_is_limited_to_written_path
  executing the resolve()/relative_to() traversal on Windows with
  content-intact smoke assertions, skipping only the mode-bit asserts.

* test(skills): single-source the skip reason string

Follow-up to the re-review: the reason text lived verbatim in both the
module-level skipif and the inline pytest.skip() call; promote it to a
_POSIX_MODE_BITS_REASON constant used by both call sites.
This commit is contained in:
Shxiao 2026-09-08 10:21:38 +09:00 committed by GitHub
parent e5d23943ce
commit 9ce6fdcb22
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,5 +1,8 @@
import os
import stat
import pytest
from deerflow.skills.permissions import make_skill_tree_sandbox_readable, make_skill_written_path_sandbox_readable
@ -7,6 +10,12 @@ def _mode(path):
return stat.S_IMODE(path.stat().st_mode)
_POSIX_MODE_BITS_REASON = "Windows chmod only toggles the read-only bit, so the 0o644/0o755 modes asserted here are never observable"
requires_posix_mode_bits = pytest.mark.skipif(os.name == "nt", reason=_POSIX_MODE_BITS_REASON)
@requires_posix_mode_bits
def test_skill_tree_readability_includes_hidden_paths_and_removes_sandbox_write(tmp_path):
root = tmp_path / "demo-skill"
hidden_dir = root / ".hidden"
@ -56,6 +65,15 @@ def test_written_path_readability_is_limited_to_written_path(tmp_path):
make_skill_written_path_sandbox_readable(root, target)
# The resolve()/relative_to() traversal is the platform-sensitive part
# (drive letters, case-insensitive roots, symlinks), so keep it executing
# on Windows where the chmod effects themselves are not observable.
assert target.read_text(encoding="utf-8") == "guide"
assert sibling.read_text(encoding="utf-8") == "note"
if os.name == "nt":
pytest.skip(_POSIX_MODE_BITS_REASON)
assert _mode(root) == 0o755
assert _mode(ref_dir) == 0o755
assert _mode(target) == 0o644