1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-18 06:20:17 +01:00
Files

134 lines
3.2 KiB
Python

"""Common fixtures for the Teleinfo tests."""
from collections.abc import Generator
from unittest.mock import MagicMock, patch
import pytest
from homeassistant.components.teleinfo.const import CONF_SERIAL_PORT, DOMAIN
from homeassistant.helpers.service_info.usb import UsbServiceInfo
from tests.common import MockConfigEntry
USB_DISCOVERY_INFO = UsbServiceInfo(
device="/dev/ttyUSB0",
pid="6015",
vid="0403",
serial_number="AB1234",
manufacturer="FTDI",
description="FT230X Basic UART",
)
# Common labels shared by all contract types (monophase)
_COMMON_LABELS: dict[str, str] = {
"ADCO": "021861348497",
"OPTARIF": "", # overridden per contract
"ISOUSC": "30",
"PTEC": "", # overridden per contract
"IINST": "012",
"IMAX": "090",
"PAPP": "02830",
"HHPHC": "A",
"MOTDETAT": "000000",
}
MOCK_DECODED_DATA_BASE: dict[str, str] = {
**_COMMON_LABELS,
"OPTARIF": "BASE",
"PTEC": "TH..",
"BASE": "045367891",
}
MOCK_DECODED_DATA_HC: dict[str, str] = {
**_COMMON_LABELS,
"OPTARIF": "HC..",
"PTEC": "HC..",
"HCHC": "025643781",
"HCHP": "031285904",
}
MOCK_DECODED_DATA_EJP: dict[str, str] = {
**_COMMON_LABELS,
"OPTARIF": "EJP.",
"PTEC": "HN..",
"EJPHN": "038912456",
"EJPHPM": "007654321",
"PEJP": "30",
}
MOCK_DECODED_DATA_TEMPO: dict[str, str] = {
**_COMMON_LABELS,
"OPTARIF": "BBR(",
"PTEC": "HCJB",
"BBRHCJB": "018328702",
"BBRHPJB": "023739545",
"BBRHCJW": "001466099",
"BBRHPJW": "002132883",
"BBRHCJR": "000860118",
"BBRHPJR": "000844115",
"DEMAIN": "ROUG",
}
# Default mock data (Tempo) — used by most existing tests
MOCK_DECODED_DATA = MOCK_DECODED_DATA_TEMPO
MOCK_FRAME = b"\x02\nADCO 021861348497 L\r\x03"
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return the default mocked config entry."""
return MockConfigEntry(
title="Teleinfo (/dev/ttyUSB0)",
domain=DOMAIN,
data={
CONF_SERIAL_PORT: "/dev/ttyUSB0",
},
unique_id="021861348497",
)
@pytest.fixture
def mock_setup_entry() -> Generator[None]:
"""Mock setting up a config entry."""
with patch(
"homeassistant.components.teleinfo.async_setup_entry", return_value=True
):
yield
@pytest.fixture
def mock_teleinfo() -> Generator[MagicMock]:
"""Mock the teleinfo (pyteleinfo) library decode function."""
mock = MagicMock()
mock.decode = MagicMock(return_value=MOCK_DECODED_DATA)
mock.TeleinfoError = type("TeleinfoError", (Exception,), {})
with (
patch(
"homeassistant.components.teleinfo.coordinator.decode",
mock.decode,
),
patch(
"homeassistant.components.teleinfo.config_flow.decode",
mock.decode,
),
):
yield mock
@pytest.fixture
def mock_serial_port() -> Generator[MagicMock]:
"""Mock read_frame to return a frame without real serial I/O."""
with (
patch(
"homeassistant.components.teleinfo.coordinator.read_frame",
return_value=MOCK_FRAME,
) as mock_read,
patch(
"homeassistant.components.teleinfo.config_flow.read_frame",
new=mock_read,
),
):
yield mock_read