Files
boc/iom/tests/test_digital_twin.py
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

113 lines
3.3 KiB
Python

"""
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 ===")