bae705aa97
- 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
113 lines
3.3 KiB
Python
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 ===")
|