"""REQ-103: sample contracts use naming patterns with interpolation.""" import sys from pathlib import Path import pytest ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT)) from core.contract_resolver import resolve def test_static_assets_bucket_name_uses_naming_pattern(): stack = resolve(str(ROOT / "contracts" / "static-assets.yml")) s3 = [r for r in stack["resources"] if r["type"] == "aws:s3:bucket"][0] bucket = s3["inputs"]["bucket_name"] # The naming pattern: acdl---- assert bucket.startswith("acdl-dev-assets-") assert "000000000000" in bucket assert bucket.endswith("us-east-1") assert bucket == "acdl-dev-assets-000000000000-us-east-1" def test_static_assets_region_uses_env_region(): stack = resolve(str(ROOT / "contracts" / "static-assets.yml")) s3 = [r for r in stack["resources"] if r["type"] == "aws:s3:bucket"][0] assert s3["inputs"]["region"] == "us-east-1" def test_static_assets_contract_has_interpolation_tokens_pre_resolve(): """The contract file itself contains the raw ${env.*} tokens (pre-resolution).""" text = (ROOT / "contracts" / "static-assets.yml").read_text() assert "${env.environment}" in text assert "${contract.id}" in text assert "${env.account_id}" in text assert "${env.region}" in text def test_microservice_contract_has_interpolation_tokens(): text = (ROOT / "contracts" / "microservice.yml").read_text() assert "${env.environment}" in text assert "${env.account_id}" in text assert "${env.region}" in text def test_microservice_resolves_with_interpolation(): stack = resolve(str(ROOT / "contracts" / "microservice.yml")) assert stack["stack"]["name"] == "msvc" # Resolution succeeded — no unresolved tokens. def test_interpolation_uses_all_naming_components(): """The naming pattern includes region, account id, and environment (the binding requirement).""" stack = resolve(str(ROOT / "contracts" / "static-assets.yml")) s3 = [r for r in stack["resources"] if r["type"] == "aws:s3:bucket"][0] bucket = s3["inputs"]["bucket_name"] # Verify all three required components are present in the resolved name. assert "dev" in bucket # environment assert "000000000000" in bucket # account_id assert "us-east-1" in bucket # region assert "assets" in bucket # contract id