"""Grok native --deny covers raw package-manager commands (Makefile guardrail).

Native ``--deny`` is graceful on grok (the model gets a permission error and
adapts to ``make``; the run continues — unlike a hook deny, which cancels the
whole run). So raw-PM commands are denied via ``_RAW_PM_DENY`` in
``_deny_rules()``, mirroring ``_GIT_MUTATE_DENY``. The bash-guard hook handles
only the compound-command case the globs miss, and there
``ROBOCO_GUARD_SKIP_PM=1`` nudges instead of canceling.
"""

from __future__ import annotations

from roboco.llm.providers.grok_cli_config import _RAW_PM_DENY, _deny_rules


def test_raw_pm_deny_rules_present() -> None:
    rules = _deny_rules("developer")
    assert "Bash(uv run*)" in rules
    assert "Bash(uv sync*)" in rules
    assert "Bash(uv pip install*)" in rules
    assert "Bash(pip install*)" in rules
    assert "Bash(conda install*)" in rules
    assert "Bash(poetry run*)" in rules


def test_raw_pm_deny_is_subset_of_deny_rules() -> None:
    rules = set(_deny_rules("developer"))
    assert set(_RAW_PM_DENY) <= rules


def test_raw_pm_deny_only_for_bash_roles() -> None:
    """Non-bash roles have bash removed entirely — no deny rules at all."""
    assert _deny_rules("auditor") == []
