Files
core/tests/components/octoprint/conftest.py
2025-11-08 15:15:25 +01:00

106 lines
2.9 KiB
Python

"""Tests for the OctoPrint integration."""
from __future__ import annotations
from collections.abc import AsyncGenerator
from typing import Any
from unittest.mock import patch
from pyoctoprintapi import (
DiscoverySettings,
OctoprintJobInfo,
OctoprintPrinterInfo,
TrackingSetting,
WebcamSettings,
)
import pytest
from homeassistant.components.octoprint import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from . import DEFAULT_JOB, DEFAULT_PRINTER
from tests.common import MockConfigEntry
@pytest.fixture
def job() -> dict[str, Any]:
"""Job fixture."""
return DEFAULT_JOB
@pytest.fixture
def printer() -> dict[str, Any]:
"""Printer fixture."""
return DEFAULT_PRINTER
@pytest.fixture
def webcam() -> dict[str, Any] | None:
"""Webcam fixture."""
return None
@pytest.fixture
async def init_integration(
hass: HomeAssistant,
platform: Platform,
printer: dict[str, Any] | None,
job: dict[str, Any],
webcam: dict[str, Any] | None,
) -> AsyncGenerator[MockConfigEntry]:
"""Set up the octoprint integration in Home Assistant."""
printer_info: OctoprintPrinterInfo | None = None
if printer is not None:
printer_info = OctoprintPrinterInfo(printer)
webcam_info: WebcamSettings | None = None
if webcam is not None:
webcam_info = WebcamSettings(**webcam)
with (
patch("homeassistant.components.octoprint.PLATFORMS", [platform]),
patch("pyoctoprintapi.OctoprintClient.get_server_info", return_value={}),
patch(
"pyoctoprintapi.OctoprintClient.get_printer_info",
return_value=printer_info,
),
patch(
"pyoctoprintapi.OctoprintClient.get_job_info",
return_value=OctoprintJobInfo(job),
),
patch(
"pyoctoprintapi.OctoprintClient.get_tracking_info",
return_value=TrackingSetting({"unique_id": "uuid"}),
),
patch(
"pyoctoprintapi.OctoprintClient.get_discovery_info",
return_value=DiscoverySettings({"upnpUuid": "uuid"}),
),
patch(
"pyoctoprintapi.OctoprintClient.get_webcam_info",
return_value=webcam_info,
),
):
config_entry = MockConfigEntry(
domain=DOMAIN,
entry_id="uuid",
unique_id="uuid",
data={
"host": "1.1.1.1",
"api_key": "test-key",
"name": "OctoPrint",
"port": 81,
"ssl": True,
"path": "/",
},
title="OctoPrint",
)
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.LOADED
yield config_entry