Spaces:
Sleeping
Sleeping
| """Tests for account data JSON consistency.""" | |
| import json | |
| from collections import deque | |
| from pathlib import Path | |
| import pytest | |
| DATA_DIR = Path(__file__).parent.parent / "env" / "data" | |
| ACCOUNT_FILES = [ | |
| ("easy_account.json", "easy", 7), | |
| ("medium_account.json", "med-", 15), | |
| ("hard_account.json", "hard", 40), | |
| ] | |
| def account(request): | |
| filename, prefix, expected_count = request.param | |
| path = DATA_DIR / filename | |
| with open(path) as f: | |
| data = json.load(f) | |
| return data, prefix, expected_count | |
| def test_resource_count(account): | |
| data, _, expected = account | |
| assert len(data) == expected | |
| def test_required_fields(account): | |
| data, _, _ = account | |
| required = ["resource_id", "resource_type", "name", "environment", "current_config", | |
| "utilization", "monthly_cost", "has_backups", "is_critical", | |
| "dependencies", "usage_pattern"] | |
| for r in data: | |
| for field in required: | |
| assert field in r, f"{r['resource_id']} missing {field}" | |
| def test_resource_id_format(account): | |
| data, prefix, _ = account | |
| for r in data: | |
| assert r["resource_id"].startswith(f"res-{prefix}"), ( | |
| f"Bad resource_id: {r['resource_id']} (expected prefix res-{prefix})" | |
| ) | |
| def test_no_orphaned_dependencies(account): | |
| data, _, _ = account | |
| ids = {r["resource_id"] for r in data} | |
| for r in data: | |
| for dep in r["dependencies"]: | |
| assert dep in ids, f"{r['resource_id']} depends on non-existent {dep}" | |
| def test_no_circular_dependencies(account): | |
| data, _, _ = account | |
| lookup = {r["resource_id"]: r for r in data} | |
| for r in data: | |
| visited = set() | |
| queue = deque(r["dependencies"]) | |
| while queue: | |
| dep_id = queue.popleft() | |
| assert dep_id != r["resource_id"], f"Circular dependency: {r['resource_id']}" | |
| if dep_id in visited: | |
| continue | |
| visited.add(dep_id) | |
| if dep_id in lookup: | |
| queue.extend(lookup[dep_id]["dependencies"]) | |
| def test_positive_costs(account): | |
| data, _, _ = account | |
| for r in data: | |
| assert r["monthly_cost"] >= 0, f"{r['resource_id']} has negative cost" | |
| def test_unique_resource_ids(account): | |
| data, _, _ = account | |
| ids = [r["resource_id"] for r in data] | |
| assert len(ids) == len(set(ids)), "Duplicate resource IDs found" | |
| def test_valid_environments(account): | |
| data, _, _ = account | |
| valid = {"prod", "staging", "dev"} | |
| for r in data: | |
| assert r["environment"] in valid, f"{r['resource_id']} has invalid env: {r['environment']}" | |
| def test_valid_resource_types(account): | |
| data, _, _ = account | |
| valid = {"ec2", "rds", "s3", "load_balancer", "kubernetes", "nat_gateway", "elasticsearch", "ebs", "eip"} | |
| for r in data: | |
| assert r["resource_type"] in valid, f"{r['resource_id']} has invalid type: {r['resource_type']}" | |