Add SNMP profile mapping and fix asset cleanup

This commit is contained in:
Keith Smith
2026-05-26 16:34:10 -06:00
parent fe7157fdad
commit e59733d331
15 changed files with 676 additions and 35 deletions
+39 -1
View File
@@ -3,7 +3,7 @@ from sqlalchemy import select
from sqlalchemy.orm import Session
from app.core.secrets import encrypt_secret
from app.models import AlertRule, Asset, Credential, Monitor
from app.models import AlertRule, Asset, Credential, Incident, Monitor
def test_create_website_monitor_creates_asset_and_alert_rule(client: TestClient, db_session: Session) -> None:
@@ -211,3 +211,41 @@ def test_create_snmp_monitors_rejects_missing_profile(client: TestClient, db_ses
)
assert response.status_code == 404
def test_delete_asset_deletes_attached_monitors_and_resolves_incidents(client: TestClient, db_session: Session) -> None:
asset = Asset(name="Router", asset_type="network_device", address="192.0.2.1", status="down", extra={})
monitor = Monitor(
asset=asset,
name="Router ping",
monitor_type="ping",
target="192.0.2.1",
config={},
interval_seconds=60,
status="down",
)
db_session.add_all([asset, monitor])
db_session.flush()
incident = Incident(
asset_id=asset.id,
monitor_id=monitor.id,
alert_rule_id=None,
title="Router ping is failing",
severity="warning",
status="open",
details={"last_message": "Ping failed"},
)
db_session.add(incident)
db_session.commit()
response = client.delete(f"/assets/{asset.id}")
assert response.status_code == 204
assert db_session.get(Asset, asset.id) is None
assert db_session.get(Monitor, monitor.id) is None
db_session.refresh(incident)
assert incident.status == "resolved"
assert incident.resolved_at is not None
assert incident.asset_id is None
assert incident.monitor_id is None
assert incident.details["recovery_message"] == "Asset was deleted"