import json from pathlib import Path import pytest import yaml REPO_ROOT = Path(__file__).resolve().parents[2] KUSTOMIZE_ENVS_DIR = REPO_ROOT / "deployment" / "kustomize" / "envs" def _config_map_literals(path: str, generator_name: str) -> dict[str, str]: manifest = yaml.safe_load((REPO_ROOT / path).read_text(encoding="utf-8")) generator = next( item for item in manifest["configMapGenerator"] if item["name"] == generator_name ) values: dict[str, str] = {} for literal in generator.get("literals", []): key, value = literal.split("=", 1) values[key] = value return values def _agent_model_id(path: str, provider: str, model: str) -> str: config_map = yaml.safe_load((REPO_ROOT / path).read_text(encoding="utf-8")) opencode_config = json.loads(config_map["data"]["opencode.jsonc"]) return opencode_config["provider"][provider]["models"][model]["id"] def _image_parse_envs() -> list[str]: envs = [] for kustomization in sorted(KUSTOMIZE_ENVS_DIR.glob("*/kustomization.yaml")): env_name = kustomization.parent.name config = _config_map_literals( str(kustomization.relative_to(REPO_ROOT)), "investibook-backend-config", ) if "INVESTIBOOK_IMAGE_PARSE_BEDROCK_MODEL_ID" in config: envs.append(env_name) return envs @pytest.mark.parametrize("env_name", _image_parse_envs()) def test_image_parser_uses_chat_standard_bedrock_profile(env_name: str): backend_config = _config_map_literals( f"deployment/kustomize/envs/{env_name}/kustomization.yaml", "investibook-backend-config", ) chat_standard_model_id = _agent_model_id( f"deployment/kustomize/envs/{env_name}/agent-config.yaml", "chat", "claude-standard", ) assert backend_config["INVESTIBOOK_IMAGE_PARSE_PROVIDER"] == "bedrock" assert backend_config["INVESTIBOOK_IMAGE_PARSE_BEDROCK_REGION"] == "us-east-1" assert backend_config["INVESTIBOOK_IMAGE_PARSE_BEDROCK_MODEL_ID"] == chat_standard_model_id assert ":application-inference-profile/" in chat_standard_model_id