Files
pi-pm3/tests/conftest.py
michael 4f35df1781 Initial commit - Phase 3/4
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 13:46:22 -08:00

110 lines
3.2 KiB
Python

"""Pytest configuration and shared fixtures."""
import pytest
import asyncio
from typing import Generator
from unittest.mock import AsyncMock, Mock
# Fixtures available to all tests
@pytest.fixture(scope="session")
def event_loop():
"""Create an event loop for the test session."""
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()
@pytest.fixture
def mock_pm3_worker():
"""Create a mock PM3Worker."""
worker = Mock()
worker.is_connected = AsyncMock(return_value=True)
worker.execute_command = AsyncMock()
worker.connect = AsyncMock()
worker.disconnect = AsyncMock()
worker.device_path = "/dev/ttyACM0"
return worker
@pytest.fixture
def mock_session_manager():
"""Create a mock SessionManager."""
manager = Mock()
manager.can_execute = Mock(return_value=True)
manager.update_activity = Mock()
manager.has_active_session = Mock(return_value=False)
manager.create_session = Mock(return_value="test-session-id")
manager.release_session = Mock()
manager.get_session = Mock(return_value=None)
manager.get_active_session = Mock(return_value=None)
return manager
@pytest.fixture
def mock_wifi_manager():
"""Create a mock WiFiManager."""
from app.backend.managers.wifi_manager import WiFiMode, WiFiStatus, WiFiInterface
manager = Mock()
manager.get_status = AsyncMock(return_value=WiFiStatus(
mode=WiFiMode.AP,
interfaces=[],
current_ssid=None,
current_ip=None,
ap_ssid="raspi-webgui",
ap_ip="10.3.141.1",
supports_dual=False
))
manager.scan_networks = AsyncMock(return_value=[])
manager.connect_to_network = AsyncMock(return_value=True)
manager.disconnect_from_network = AsyncMock(return_value=True)
manager.set_mode = AsyncMock(return_value=True)
manager.get_saved_networks = AsyncMock(return_value=[])
manager.forget_network = AsyncMock(return_value=True)
return manager
@pytest.fixture
def mock_update_manager():
"""Create a mock UpdateManager."""
from app.backend.managers.update_manager import UpdateProgress, UpdateStatus
manager = Mock()
manager.check_for_updates = AsyncMock(return_value={
"update_available": False,
"current_version": "1.0.0",
"message": "System is up to date"
})
manager.download_update = AsyncMock(return_value=True)
manager.install_update = AsyncMock(return_value=True)
manager.get_progress = AsyncMock(return_value=UpdateProgress(
status=UpdateStatus.IDLE,
current_version="1.0.0"
))
manager.get_release_notes = AsyncMock(return_value="Release notes")
return manager
@pytest.fixture
def mock_pm3_service():
"""Create a mock PM3Service for integration tests."""
service = Mock()
service.execute_command = AsyncMock()
service.get_status = AsyncMock()
service.connect = AsyncMock()
service.disconnect = AsyncMock()
service.create_session = Mock()
service.release_session = Mock()
service.get_session_info = Mock()
return service
@pytest.fixture
def test_client():
"""Create a FastAPI TestClient for integration tests."""
from fastapi.testclient import TestClient
from app.backend.main import app
return TestClient(app)