"""Fixtures for PrusaLink.""" from unittest.mock import patch import pytest from homeassistant.components.prusalink import DOMAIN from tests.common import MockConfigEntry @pytest.fixture def mock_config_entry(hass): """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(hass): """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(hass): """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(hass): """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(hass): """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(hass): """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(hass): """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_printing(hass): """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(hass, mock_get_status_printing, mock_job_api_printing): """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, mock_info_api, mock_get_legacy_printer, mock_get_status_idle, mock_job_api_idle, ): """Mock PrusaLink API."""