165 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Python
		
	
	
"""Fixtures for Pinecil tests."""
 | 
						|
 | 
						|
from collections.abc import Generator
 | 
						|
from unittest.mock import AsyncMock, MagicMock, patch
 | 
						|
 | 
						|
from bleak.backends.device import BLEDevice
 | 
						|
from habluetooth import BluetoothServiceInfoBleak
 | 
						|
from pynecil import DeviceInfoResponse, LiveDataResponse, OperatingMode, PowerSource
 | 
						|
import pytest
 | 
						|
 | 
						|
from homeassistant.components.iron_os import DOMAIN
 | 
						|
from homeassistant.const import CONF_ADDRESS
 | 
						|
 | 
						|
from tests.common import MockConfigEntry
 | 
						|
from tests.components.bluetooth import generate_advertisement_data, generate_ble_device
 | 
						|
 | 
						|
USER_INPUT = {CONF_ADDRESS: "c0:ff:ee:c0:ff:ee"}
 | 
						|
DEFAULT_NAME = "Pinecil-C0FFEEE"
 | 
						|
PINECIL_SERVICE_INFO = BluetoothServiceInfoBleak(
 | 
						|
    name="Pinecil-C0FFEEE",
 | 
						|
    address="c0:ff:ee:c0:ff:ee",
 | 
						|
    device=generate_ble_device(
 | 
						|
        address="c0:ff:ee:c0:ff:ee",
 | 
						|
        name="Pinecil-C0FFEEE",
 | 
						|
    ),
 | 
						|
    rssi=-61,
 | 
						|
    manufacturer_data={},
 | 
						|
    service_data={},
 | 
						|
    service_uuids=["9eae1000-9d0d-48c5-aa55-33e27f9bc533"],
 | 
						|
    source="local",
 | 
						|
    advertisement=generate_advertisement_data(
 | 
						|
        manufacturer_data={},
 | 
						|
        service_uuids=["9eae1000-9d0d-48c5-aa55-33e27f9bc533"],
 | 
						|
    ),
 | 
						|
    connectable=True,
 | 
						|
    time=0,
 | 
						|
    tx_power=None,
 | 
						|
)
 | 
						|
 | 
						|
UNKNOWN_SERVICE_INFO = BluetoothServiceInfoBleak(
 | 
						|
    name="",
 | 
						|
    address="c0:ff:ee:c0:ff:ee",
 | 
						|
    device=generate_ble_device(
 | 
						|
        address="c0:ff:ee:c0:ff:ee",
 | 
						|
        name="",
 | 
						|
    ),
 | 
						|
    rssi=-61,
 | 
						|
    manufacturer_data={},
 | 
						|
    service_data={},
 | 
						|
    service_uuids=[],
 | 
						|
    source="local",
 | 
						|
    advertisement=generate_advertisement_data(
 | 
						|
        manufacturer_data={},
 | 
						|
        service_uuids=[],
 | 
						|
    ),
 | 
						|
    connectable=True,
 | 
						|
    time=0,
 | 
						|
    tx_power=None,
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture(autouse=True)
 | 
						|
def mock_bluetooth(enable_bluetooth: None) -> None:
 | 
						|
    """Auto mock bluetooth."""
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def mock_setup_entry() -> Generator[AsyncMock]:
 | 
						|
    """Override async_setup_entry."""
 | 
						|
    with patch(
 | 
						|
        "homeassistant.components.iron_os.async_setup_entry", return_value=True
 | 
						|
    ) as mock_setup_entry:
 | 
						|
        yield mock_setup_entry
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture(name="discovery")
 | 
						|
def mock_async_discovered_service_info() -> Generator[MagicMock]:
 | 
						|
    """Mock service discovery."""
 | 
						|
    with patch(
 | 
						|
        "homeassistant.components.iron_os.config_flow.async_discovered_service_info",
 | 
						|
        return_value=[PINECIL_SERVICE_INFO, UNKNOWN_SERVICE_INFO],
 | 
						|
    ) as discovery:
 | 
						|
        yield discovery
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture(name="config_entry")
 | 
						|
def mock_config_entry() -> MockConfigEntry:
 | 
						|
    """Mock Pinecil configuration entry."""
 | 
						|
    return MockConfigEntry(
 | 
						|
        domain=DOMAIN,
 | 
						|
        title=DEFAULT_NAME,
 | 
						|
        data={},
 | 
						|
        unique_id="c0:ff:ee:c0:ff:ee",
 | 
						|
        entry_id="1234567890",
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture(name="ble_device")
 | 
						|
def mock_ble_device() -> Generator[MagicMock]:
 | 
						|
    """Mock BLEDevice."""
 | 
						|
    with patch(
 | 
						|
        "homeassistant.components.bluetooth.async_ble_device_from_address",
 | 
						|
        return_value=BLEDevice(
 | 
						|
            address="c0:ff:ee:c0:ff:ee", name=DEFAULT_NAME, rssi=-50, details={}
 | 
						|
        ),
 | 
						|
    ) as ble_device:
 | 
						|
        yield ble_device
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture(autouse=True)
 | 
						|
def mock_githubapi() -> Generator[AsyncMock]:
 | 
						|
    """Mock aiogithubapi."""
 | 
						|
 | 
						|
    with patch(
 | 
						|
        "homeassistant.components.iron_os.GitHubAPI",
 | 
						|
        autospec=True,
 | 
						|
    ) as mock_client:
 | 
						|
        client = mock_client.return_value
 | 
						|
        client.repos.releases.latest = AsyncMock()
 | 
						|
 | 
						|
        client.repos.releases.latest.return_value.data.html_url = (
 | 
						|
            "https://github.com/Ralim/IronOS/releases/tag/v2.22"
 | 
						|
        )
 | 
						|
        client.repos.releases.latest.return_value.data.name = (
 | 
						|
            "V2.22 | TS101 & S60 Added | PinecilV2 improved"
 | 
						|
        )
 | 
						|
        client.repos.releases.latest.return_value.data.tag_name = "v2.22"
 | 
						|
        client.repos.releases.latest.return_value.data.body = "**RELEASE_NOTES**"
 | 
						|
 | 
						|
        yield client
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def mock_pynecil() -> Generator[AsyncMock]:
 | 
						|
    """Mock Pynecil library."""
 | 
						|
    with patch(
 | 
						|
        "homeassistant.components.iron_os.Pynecil", autospec=True
 | 
						|
    ) as mock_client:
 | 
						|
        client = mock_client.return_value
 | 
						|
 | 
						|
        client.get_device_info.return_value = DeviceInfoResponse(
 | 
						|
            build="v2.22",
 | 
						|
            device_id="c0ffeeC0",
 | 
						|
            address="c0:ff:ee:c0:ff:ee",
 | 
						|
            device_sn="0000c0ffeec0ffee",
 | 
						|
            name=DEFAULT_NAME,
 | 
						|
        )
 | 
						|
        client.get_live_data.return_value = LiveDataResponse(
 | 
						|
            live_temp=298,
 | 
						|
            setpoint_temp=300,
 | 
						|
            dc_voltage=20.6,
 | 
						|
            handle_temp=36.3,
 | 
						|
            pwm_level=41,
 | 
						|
            power_src=PowerSource.PD,
 | 
						|
            tip_resistance=6.2,
 | 
						|
            uptime=1671,
 | 
						|
            movement_time=10000,
 | 
						|
            max_tip_temp_ability=460,
 | 
						|
            tip_voltage=2212,
 | 
						|
            hall_sensor=0,
 | 
						|
            operating_mode=OperatingMode.SOLDERING,
 | 
						|
            estimated_power=24.8,
 | 
						|
        )
 | 
						|
        yield client
 |