""" Digital Twin Integration Tests """ import requests import json BASE_URL = "http://localhost:8000" def test_digital_twin(): """Test digital twin endpoints""" # Add node print("=== Adding nodes ===") r = requests.post(f"{BASE_URL}/digital-twin/nodes", json={ "goid": "TRN-BRG-ABT-CON-001", "object_type": "abutment", "domain": "TRN", "system": "BRG", "subsystem": "ABT", "lat": 59.3293, "lng": 18.0686, "condition": 3, "risk_level": 5.9, "observations": [ { "timestamp": "2026-06-01T09:00:00Z", "condition": 3, "findings": [{"type": "crack", "code": "1300"}], "risk_level": 5.9 }, { "timestamp": "2026-06-15T09:00:00Z", "condition": 4, "findings": [{"type": "crack", "code": "1300"}, {"type": "corrosion", "code": "1100"}], "risk_level": 7.2 } ] }) print(f"Add node: {r.status_code}") # Add second node r = requests.post(f"{BASE_URL}/digital-twin/nodes", json={ "goid": "BYG-FAC-WIN-GLA-0001", "object_type": "window_glass", "domain": "BYG", "system": "FAC", "subsystem": "WIN", "lat": 59.3300, "lng": 18.0700, "condition": 2, "risk_level": 2.2, "observations": [ { "timestamp": "2026-06-10T10:00:00Z", "condition": 2, "findings": [{"type": "dirt", "code": "2100"}], "risk_level": 2.2 } ] }) print(f"Add node 2: {r.status_code}") # Get statistics print("\n=== Statistics ===") r = requests.get(f"{BASE_URL}/digital-twin/statistics") stats = r.json() print(json.dumps(stats, indent=2)) # Get node print("\n=== Get Node ===") r = requests.get(f"{BASE_URL}/digital-twin/nodes/TRN-BRG-ABT-CON-001") node = r.json() print(f"Node: {node['goid']}, condition: {node['condition']}") # Get timeline print("\n=== Timeline ===") r = requests.get(f"{BASE_URL}/digital-twin/nodes/TRN-BRG-ABT-CON-001/timeline") timeline = r.json() print(f"Timeline entries: {len(timeline['timeline'])}") # Get trend print("\n=== Trend ===") r = requests.get(f"{BASE_URL}/digital-twin/nodes/TRN-BRG-ABT-CON-001/trend") trend = r.json() print(json.dumps(trend, indent=2)) # Get degrading print("\n=== Degrading Objects ===") r = requests.get(f"{BASE_URL}/digital-twin/degrading") degrading = r.json() print(f"Degrading: {len(degrading)}") for obj in degrading: print(f" {obj['goid']}: {obj['trend']['trend']}") # Get contradictions print("\n=== Contradictions ===") r = requests.get(f"{BASE_URL}/digital-twin/contradictions?official_bridges=12") contradictions = r.json() print(f"Contradictions: {len(contradictions)}") for c in contradictions: print(f" {c['type']}: {c['description']}") # Get GeoJSON print("\n=== GeoJSON ===") r = requests.get(f"{BASE_URL}/digital-twin/geojson") geojson = r.json() print(f"Features: {len(geojson['features'])}") if __name__ == "__main__": test_digital_twin() print("\n=== Digital Twin tests complete ===")