Files
strix/tests/test_state_repo_context.py
T

86 lines
2.8 KiB
Python
Raw Normal View History

"""Tests for SARIF repository-context derivation in strix.report.state."""
from __future__ import annotations
import subprocess
from typing import TYPE_CHECKING
from strix.report.state import ReportState, _parse_repo_full_name
if TYPE_CHECKING:
from pathlib import Path
def test_parse_repo_full_name_handles_common_forms() -> None:
assert _parse_repo_full_name("https://github.com/acme/widget") == "acme/widget"
assert _parse_repo_full_name("https://github.com/acme/widget.git") == "acme/widget"
assert _parse_repo_full_name("git@github.com:acme/widget.git") == "acme/widget"
assert _parse_repo_full_name("acme/widget") == "acme/widget"
assert _parse_repo_full_name("") is None
assert _parse_repo_full_name("nothost") is None
def test_repository_context_none_for_non_repository_targets() -> None:
state = ReportState(run_name="t")
state.run_record["targets_info"] = [
{"type": "web_application", "details": {"target_url": "https://example.com"}}
]
assert state._sarif_repository_context() is None
def test_repository_context_uri_only_without_clone() -> None:
state = ReportState(run_name="t")
state.run_record["targets_info"] = [
{"type": "repository", "details": {"target_repo": "https://github.com/acme/widget"}}
]
ctx = state._sarif_repository_context()
assert ctx == {
"repositoryUri": "https://github.com/acme/widget",
"repositoryFullName": "acme/widget",
}
def test_repository_context_derives_commit_and_branch_from_clone(tmp_path: Path) -> None:
repo = tmp_path / "widget"
repo.mkdir()
def _git(*args: str) -> None:
subprocess.run( # noqa: S603
["git", "-C", str(repo), *args], # noqa: S607
check=True,
capture_output=True,
)
_git("init", "-b", "main")
_git("config", "user.email", "t@example.com")
_git("config", "user.name", "Test")
(repo / "README.md").write_text("hi", encoding="utf-8")
_git("add", "README.md")
_git("commit", "-m", "init")
head = subprocess.run( # noqa: S603
["git", "-C", str(repo), "rev-parse", "HEAD"], # noqa: S607
check=True,
capture_output=True,
text=True,
).stdout.strip()
state = ReportState(run_name="t")
state.run_record["targets_info"] = [
{
"type": "repository",
"details": {
"target_repo": "https://github.com/acme/widget",
"cloned_repo_path": str(repo),
},
}
]
ctx = state._sarif_repository_context()
assert ctx is not None
assert ctx["repositoryUri"] == "https://github.com/acme/widget"
assert ctx["repositoryFullName"] == "acme/widget"
assert ctx["commitSha"] == head
assert ctx["branch"] == "main"
assert ctx["ref"] == "refs/heads/main"