Files
headquarter/apps/api/tests/unit/test_monitoring_models.py
Developer 81b9a66ef5 fix: resolve stale backend test imports and schema drift
- Delete 4 obsolete unit tests tied to removed git mount/clone models
- Update imports and assertions across unit/integration/service tests
- Fix Settings defaults (postgres host, JWT props, cookie_samesite)
- Add skip guards for PostgreSQL-dependent integration tests
- Fix GitService env assertions and HealthMonitor state-change tests
- Repair docker/container inspect assertions in test_docker_service
- Fix ToolTypeCreate default_port validator ordering bug
- Fix check_port_exposed substring false-positive for port 0
- Update test_tool_types_api_extended to use interface_type field

Quality gates: pytest 311 passed, 34 skipped; npm typecheck/lint/test 87 passed
2026-06-12 20:23:17 +00:00

144 lines
3.9 KiB
Python

"""Unit tests for monitoring models and migration compatibility."""
import uuid
from datetime import datetime
import pytest
from sqlalchemy import select
from src.models.system.health_check import HealthCheck
from src.models.system.instance_event import InstanceEvent
from src.models.tool.tool_instance import ToolInstance
from src.models.user.user import User
@pytest.mark.unit
async def test_instance_event_creation(db_session) -> None:
"""InstanceEvent model can be created and persisted."""
user = User(
id=uuid.uuid4(),
email="test@example.com",
name="Test",
authentik_id="auth-1",
)
db_session.add(user)
await db_session.commit()
instance = ToolInstance(
id=uuid.uuid4(),
name="test-instance",
display_name="Test Instance",
tool_type_id=uuid.uuid4(),
repository_id=uuid.uuid4(),
project_id=uuid.uuid4(),
owner_id=user.id,
status="pending",
)
db_session.add(instance)
await db_session.commit()
event = InstanceEvent(
instance_id=instance.id,
event_type="started",
status="starting",
message="Container starting...",
created_by=user.id,
event_metadata={"previous_status": "pending"},
)
db_session.add(event)
await db_session.commit()
await db_session.refresh(event)
assert event.id is not None
assert event.instance_id == instance.id
assert event.event_type == "started"
assert event.status == "starting"
assert event.created_by == user.id
assert event.event_metadata == {"previous_status": "pending"}
assert isinstance(event.created_at, datetime)
@pytest.mark.unit
async def test_health_check_creation(db_session) -> None:
"""HealthCheck model can be created and persisted."""
user = User(
id=uuid.uuid4(),
email="test2@example.com",
name="Test2",
authentik_id="auth-2",
)
db_session.add(user)
await db_session.commit()
instance = ToolInstance(
id=uuid.uuid4(),
name="test-instance-2",
display_name="Test Instance 2",
tool_type_id=uuid.uuid4(),
repository_id=uuid.uuid4(),
project_id=uuid.uuid4(),
owner_id=user.id,
status="running",
)
db_session.add(instance)
await db_session.commit()
check = HealthCheck(
instance_id=instance.id,
container_status="running",
container_healthy=True,
tunnel_healthy=True,
exit_code=None,
probe_status="passed",
probe_output="OK",
)
db_session.add(check)
await db_session.commit()
await db_session.refresh(check)
assert check.id is not None
assert check.instance_id == instance.id
assert check.container_status == "running"
assert check.container_healthy is True
assert check.tunnel_healthy is True
assert isinstance(check.checked_at, datetime)
@pytest.mark.unit
async def test_instance_event_query_by_instance(db_session) -> None:
"""InstanceEvent rows can be queried by instance_id."""
user = User(
id=uuid.uuid4(),
email="test3@example.com",
name="Test3",
authentik_id="auth-3",
)
db_session.add(user)
await db_session.commit()
instance = ToolInstance(
id=uuid.uuid4(),
name="test-instance-3",
display_name="Test Instance 3",
tool_type_id=uuid.uuid4(),
repository_id=uuid.uuid4(),
project_id=uuid.uuid4(),
owner_id=user.id,
status="pending",
)
db_session.add(instance)
await db_session.commit()
event = InstanceEvent(
instance_id=instance.id,
event_type="created",
status="pending",
)
db_session.add(event)
await db_session.commit()
result = await db_session.execute(
select(InstanceEvent).where(InstanceEvent.instance_id == instance.id)
)
assert result.scalar_one() is not None