core/tests/components/prusalink/conftest.py

197 lines
5.4 KiB
Python

"""Fixtures for PrusaLink."""
from collections.abc import Generator
from typing import Any
from unittest.mock import patch
import pytest
from homeassistant.components.prusalink import DOMAIN
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
@pytest.fixture
def mock_config_entry(hass: HomeAssistant) -> MockConfigEntry:
"""Mock a PrusaLink config entry."""
entry = MockConfigEntry(
domain=DOMAIN,
data={"host": "http://example.com", "username": "dummy", "password": "dummypw"},
version=1,
minor_version=2,
)
entry.add_to_hass(hass)
return entry
@pytest.fixture
def mock_version_api() -> Generator[dict[str, str]]:
"""Mock PrusaLink version API."""
resp = {
"api": "2.0.0",
"server": "2.1.2",
"text": "PrusaLink",
"hostname": "PrusaXL",
}
with patch("pyprusalink.PrusaLink.get_version", return_value=resp):
yield resp
@pytest.fixture
def mock_info_api() -> Generator[dict[str, Any]]:
"""Mock PrusaLink info API."""
resp = {
"nozzle_diameter": 0.40,
"mmu": False,
"serial": "serial-1337",
"hostname": "PrusaXL",
"min_extrusion_temp": 170,
}
with patch("pyprusalink.PrusaLink.get_info", return_value=resp):
yield resp
@pytest.fixture
def mock_get_legacy_printer() -> Generator[dict[str, Any]]:
"""Mock PrusaLink printer API."""
resp = {"telemetry": {"material": "PLA"}}
with patch("pyprusalink.PrusaLink.get_legacy_printer", return_value=resp):
yield resp
@pytest.fixture
def mock_get_status_idle() -> Generator[dict[str, Any]]:
"""Mock PrusaLink printer API."""
resp = {
"storage": {
"path": "/usb/",
"name": "usb",
"read_only": False,
},
"printer": {
"state": "IDLE",
"temp_bed": 41.9,
"target_bed": 60.5,
"temp_nozzle": 47.8,
"target_nozzle": 210.1,
"axis_z": 1.8,
"axis_x": 7.9,
"axis_y": 8.4,
"flow": 100,
"speed": 100,
"fan_hotend": 100,
"fan_print": 75,
},
}
with patch("pyprusalink.PrusaLink.get_status", return_value=resp):
yield resp
@pytest.fixture
def mock_get_status_printing() -> Generator[dict[str, Any]]:
"""Mock PrusaLink printer API."""
resp = {
"job": {
"id": 129,
"progress": 37.00,
"time_remaining": 73020,
"time_printing": 43987,
},
"storage": {"path": "/usb/", "name": "usb", "read_only": False},
"printer": {
"state": "PRINTING",
"temp_bed": 53.9,
"target_bed": 85.0,
"temp_nozzle": 6.0,
"target_nozzle": 0.0,
"axis_z": 5.0,
"flow": 100,
"speed": 100,
"fan_hotend": 5000,
"fan_print": 2500,
},
}
with patch("pyprusalink.PrusaLink.get_status", return_value=resp):
yield resp
@pytest.fixture
def mock_job_api_idle() -> Generator[dict[str, Any]]:
"""Mock PrusaLink job API having no job."""
resp = {}
with patch("pyprusalink.PrusaLink.get_job", return_value=resp):
yield resp
@pytest.fixture
def mock_job_api_idle_mk3() -> Generator[dict[str, Any]]:
"""Mock PrusaLink job API having a job with idle state (MK3)."""
resp = {
"id": 129,
"state": "IDLE",
"progress": 0.0,
"time_remaining": None,
"time_printing": 0,
"file": {
"refs": {
"icon": "/thumb/s/usb/TabletStand3~4.BGC",
"thumbnail": "/thumb/l/usb/TabletStand3~4.BGC",
"download": "/usb/TabletStand3~4.BGC",
},
"name": "TabletStand3~4.BGC",
"display_name": "TabletStand3.bgcode",
"path": "/usb",
"size": 754535,
"m_timestamp": 1698686881,
},
}
with patch("pyprusalink.PrusaLink.get_job", return_value=resp):
yield resp
@pytest.fixture
def mock_job_api_printing() -> Generator[dict[str, Any]]:
"""Mock PrusaLink printing."""
resp = {
"id": 129,
"state": "PRINTING",
"progress": 37.00,
"time_remaining": 73020,
"time_printing": 43987,
"file": {
"refs": {
"icon": "/thumb/s/usb/TabletStand3~4.BGC",
"thumbnail": "/thumb/l/usb/TabletStand3~4.BGC",
"download": "/usb/TabletStand3~4.BGC",
},
"name": "TabletStand3~4.BGC",
"display_name": "TabletStand3.bgcode",
"path": "/usb",
"size": 754535,
"m_timestamp": 1698686881,
},
}
with patch("pyprusalink.PrusaLink.get_job", return_value=resp):
yield resp
@pytest.fixture
def mock_job_api_paused(
mock_get_status_printing: dict[str, Any], mock_job_api_printing: dict[str, Any]
) -> None:
"""Mock PrusaLink paused printing."""
mock_job_api_printing["state"] = "PAUSED"
mock_get_status_printing["printer"]["state"] = "PAUSED"
@pytest.fixture
def mock_api(
mock_version_api: dict[str, str],
mock_info_api: dict[str, Any],
mock_get_legacy_printer: dict[str, Any],
mock_get_status_idle: dict[str, Any],
mock_job_api_idle: dict[str, Any],
) -> None:
"""Mock PrusaLink API."""