from typing import Any, Optional from pdp.connectors.redis_client import JSONSerializer, RedisConnector from pdp.constants.constants import CACHE_ENTRY_CERBOS_POLICY_METADATA from tests.integration.utils import run_command async def test_seed_policy_metadata_cache_cli( local_redis_connector: RedisConnector, ) -> None: """The seed command writes the policy metadata DB to Redis.""" # Sanity check: the key does not exist before seeding. before: Optional[dict[str, Any]] = await local_redis_connector.get( key=CACHE_ENTRY_CERBOS_POLICY_METADATA, serializer=JSONSerializer(), ) assert before is None run_command( [ "uv", "run", "pdpcli", "cerbos", "seed_policy_metadata_cache", "--policies-dir", "cerbos/policies/demo", ] ) after: Optional[dict[str, Any]] = await local_redis_connector.get( key=CACHE_ENTRY_CERBOS_POLICY_METADATA, serializer=JSONSerializer(), ) assert after is not None # The demo policies directory contains these resource types. assert "demo_check_feature_control" in after assert after["demo_check_feature_control"]["requires_account_feature_controls"] assert "demo_action_wildcard" in after assert not after["demo_action_wildcard"]["requires_account_feature_controls"] async def test_seed_policy_metadata_cache_cli_empty_dir_exits( local_redis_connector: RedisConnector, ) -> None: """An empty/missing policies dir exits non-zero and writes nothing.""" run_command( [ "uv", "run", "pdpcli", "cerbos", "seed_policy_metadata_cache", "--policies-dir", "cerbos/policies/does_not_exist", ], expected_returncode=1, ) after: Optional[dict[str, Any]] = await local_redis_connector.get( key=CACHE_ENTRY_CERBOS_POLICY_METADATA, serializer=JSONSerializer(), ) assert after is None