61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
|
|
import os
|
||
|
|
import sys
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||
|
|
|
||
|
|
import main
|
||
|
|
|
||
|
|
|
||
|
|
def test_resolve_permissions_mode_selection_without_tier():
|
||
|
|
services = ["gmail", "drive"]
|
||
|
|
resolved_services, tier_tool_filter = main.resolve_permissions_mode_selection(
|
||
|
|
services, None
|
||
|
|
)
|
||
|
|
assert resolved_services == services
|
||
|
|
assert tier_tool_filter is None
|
||
|
|
|
||
|
|
|
||
|
|
def test_resolve_permissions_mode_selection_with_tier_filters_services(monkeypatch):
|
||
|
|
def fake_resolve_tools_from_tier(tier, services):
|
||
|
|
assert tier == "core"
|
||
|
|
assert services == ["gmail", "drive", "slides"]
|
||
|
|
return ["search_gmail_messages"], ["gmail"]
|
||
|
|
|
||
|
|
monkeypatch.setattr(main, "resolve_tools_from_tier", fake_resolve_tools_from_tier)
|
||
|
|
|
||
|
|
resolved_services, tier_tool_filter = main.resolve_permissions_mode_selection(
|
||
|
|
["gmail", "drive", "slides"], "core"
|
||
|
|
)
|
||
|
|
assert resolved_services == ["gmail"]
|
||
|
|
assert tier_tool_filter == {"search_gmail_messages"}
|
||
|
|
|
||
|
|
|
||
|
|
def test_narrow_permissions_to_services_keeps_selected_order():
|
||
|
|
permissions = {"drive": "full", "gmail": "readonly", "calendar": "readonly"}
|
||
|
|
narrowed = main.narrow_permissions_to_services(permissions, ["gmail", "drive"])
|
||
|
|
assert narrowed == {"gmail": "readonly", "drive": "full"}
|
||
|
|
|
||
|
|
|
||
|
|
def test_narrow_permissions_to_services_drops_non_selected_services():
|
||
|
|
permissions = {"gmail": "send", "drive": "full"}
|
||
|
|
narrowed = main.narrow_permissions_to_services(permissions, ["gmail"])
|
||
|
|
assert narrowed == {"gmail": "send"}
|
||
|
|
|
||
|
|
|
||
|
|
def test_permissions_and_tools_flags_are_rejected(monkeypatch, capsys):
|
||
|
|
monkeypatch.setattr(main, "configure_safe_logging", lambda: None)
|
||
|
|
monkeypatch.setattr(
|
||
|
|
sys,
|
||
|
|
"argv",
|
||
|
|
["main.py", "--permissions", "gmail:readonly", "--tools", "gmail"],
|
||
|
|
)
|
||
|
|
|
||
|
|
with pytest.raises(SystemExit) as exc:
|
||
|
|
main.main()
|
||
|
|
|
||
|
|
assert exc.value.code == 1
|
||
|
|
captured = capsys.readouterr()
|
||
|
|
assert "--permissions and --tools cannot be combined" in captured.err
|