headroom/tests/test_plugin_manifests.py
Garm efd2ac1ca4 chore: renormalize line endings to LF
`.gitattributes` declares `*.py text eol=lf` and `*.sh text eol=lf`, but
74 files (73 .py, 1 .sh) are stored in the index with CRLF line endings,
violating that contract. Every macOS/Linux clone reports these files as
"modified" on fresh checkout because git's diff engine sees the stored
bytes don't match the attribute contract, even though the working tree
and index match byte-for-byte.

Running `git add --renormalize .` rewrites each affected blob so the
stored form matches the attribute declaration. No semantic changes —
every affected file's diff is "N insertions, N deletions" with inserts
and deletes being the same lines modulo line endings.

Follow-up commit adds `.git-blame-ignore-revs` so `git blame` / GitHub
blame skip this mechanical commit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 15:33:30 +02:00

55 lines
2.1 KiB
Python

from __future__ import annotations
import json
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
def _load_json(relative_path: str) -> object:
return json.loads((REPO_ROOT / relative_path).read_text(encoding="utf-8"))
def test_marketplace_manifests_match() -> None:
assert _load_json(".claude-plugin/marketplace.json") == _load_json(
".github/plugin/marketplace.json"
)
def test_plugin_manifests_share_core_metadata() -> None:
claude = _load_json("plugins/headroom-agent-hooks/.claude-plugin/plugin.json")
copilot = _load_json("plugins/headroom-agent-hooks/.github/plugin/plugin.json")
assert isinstance(claude, dict)
assert isinstance(copilot, dict)
for key in ("name", "version", "description", "author", "homepage", "repository", "keywords"):
assert claude[key] == copilot[key]
assert "hooks" not in claude
assert copilot["hooks"] == "./hooks"
def test_marketplace_entry_points_to_plugin_root() -> None:
marketplace = _load_json(".claude-plugin/marketplace.json")
assert isinstance(marketplace, dict)
plugins = marketplace["plugins"]
assert isinstance(plugins, list)
plugin = plugins[0]
assert plugin["name"] == "headroom"
plugin_root = (REPO_ROOT / plugin["source"]).resolve()
assert plugin_root.is_dir()
assert (plugin_root / ".claude-plugin" / "plugin.json").is_file()
assert (plugin_root / "hooks" / "hooks.json").is_file()
def test_plugin_metadata_points_to_upstream_repo() -> None:
expected_repo = "https://github.com/chopratejas/headroom"
marketplace = _load_json(".claude-plugin/marketplace.json")
claude = _load_json("plugins/headroom-agent-hooks/.claude-plugin/plugin.json")
assert isinstance(marketplace, dict)
assert isinstance(claude, dict)
plugin = marketplace["plugins"][0]
assert plugin["author"]["url"] == expected_repo
assert plugin["homepage"] == expected_repo
assert plugin["repository"] == expected_repo
assert claude["author"]["url"] == expected_repo
assert claude["homepage"] == expected_repo
assert claude["repository"] == expected_repo