82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import shutil
|
|
import subprocess # nosec B404
|
|
|
|
import pytest
|
|
|
|
from cline_support import prepare_fixture
|
|
|
|
|
|
CLINE_CORE_ENTRY = os.environ.get("ELYDORA_CLINE_CORE_ENTRY")
|
|
CLINE_ENTRY = os.environ.get("ELYDORA_CLINE_ENTRY")
|
|
|
|
|
|
@pytest.mark.skipif(
|
|
not (CLINE_CORE_ENTRY and CLINE_ENTRY),
|
|
reason=(
|
|
"set ELYDORA_CLINE_CORE_ENTRY and ELYDORA_CLINE_ENTRY "
|
|
"to official Cline files"
|
|
),
|
|
)
|
|
def test_official_cline_loader_discovers_both_managed_hooks(
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
tmp_path: Path,
|
|
) -> None:
|
|
node = shutil.which("node")
|
|
assert node is not None
|
|
assert CLINE_CORE_ENTRY is not None
|
|
assert CLINE_ENTRY is not None
|
|
fixture = prepare_fixture(monkeypatch, tmp_path)
|
|
fixture.install()
|
|
version = subprocess.run( # nosec B603
|
|
[node, CLINE_ENTRY, "--version"],
|
|
cwd=fixture.project_dir,
|
|
env=fixture.environment(),
|
|
capture_output=True,
|
|
check=False,
|
|
text=True,
|
|
timeout=10,
|
|
)
|
|
assert version.returncode == 0, version.stderr
|
|
assert version.stdout.strip() == "3.0.46"
|
|
|
|
source = """
|
|
import { pathToFileURL } from 'node:url';
|
|
const { listHookConfigFiles } = await import(
|
|
pathToFileURL(process.env.ELYDORA_CLINE_CORE_ENTRY).href
|
|
);
|
|
console.log(JSON.stringify(listHookConfigFiles(process.env.ELYDORA_WORKSPACE)));
|
|
"""
|
|
environment = {
|
|
**fixture.environment(),
|
|
"ELYDORA_CLINE_CORE_ENTRY": CLINE_CORE_ENTRY,
|
|
"ELYDORA_WORKSPACE": str(fixture.project_dir),
|
|
}
|
|
loaded = subprocess.run( # nosec B603
|
|
[node, "--input-type=module", "--eval", source],
|
|
cwd=fixture.project_dir,
|
|
env=environment,
|
|
capture_output=True,
|
|
check=False,
|
|
text=True,
|
|
timeout=10,
|
|
)
|
|
|
|
assert loaded.returncode == 0, loaded.stderr
|
|
assert json.loads(loaded.stdout) == [
|
|
{
|
|
"fileName": "PostToolUse",
|
|
"hookEventName": "tool_result",
|
|
"path": str(fixture.audit_wrapper),
|
|
},
|
|
{
|
|
"fileName": "PreToolUse",
|
|
"hookEventName": "tool_call",
|
|
"path": str(fixture.guard_wrapper),
|
|
},
|
|
]
|