from pathlib import Path ROOT = Path(__file__).resolve().parents[2] def test_device_observability_workbench_exposes_evidence_bound_contract(): page = ( ROOT / "frontend/src/views/dataGovernance/development/" "deviceObservability.vue" ).read_text(encoding="utf-8") api = (ROOT / "frontend/src/api/dataDevelopment.js").read_text( encoding="utf-8" ) routes = (ROOT / "frontend/src/router/routes.js").read_text( encoding="utf-8" ) center = ( ROOT / "frontend/src/views/dataGovernance/development/index.vue" ).read_text(encoding="utf-8") model = ( ROOT / "frontend/src/views/dataGovernance/development/" "deviceObservabilityModel.js" ).read_text(encoding="utf-8") for text in ( "设备关系与根因", "证据不足,无法确认根因", "根因候选", "关系证据", "运行证据导入", "不等同于已确认根因", ): assert text in page assert "this.$snackbar.success" in page assert "this.$snackbar.error" in page assert "this.$message" not in page assert "device-observability:edit" in model assert "getDeviceOperationalEvents" in api assert "getDeviceEvidenceGraph" in api assert "getDeviceRootCause" in api assert "importDeviceOperationalEvidence" in api assert "/data-governance/development/device-observability" in routes assert "deviceObservability" in routes assert "设备关系与根因" in center