"""Mocks for powerwall.""" import json import os from asynctest import MagicMock, PropertyMock from homeassistant.components.powerwall.const import DOMAIN from homeassistant.const import CONF_IP_ADDRESS from tests.common import load_fixture async def _mock_powerwall_with_fixtures(hass): """Mock data used to build powerwall state.""" meters = await _async_load_json_fixture(hass, "meters.json") sitemaster = await _async_load_json_fixture(hass, "sitemaster.json") site_info = await _async_load_json_fixture(hass, "site_info.json") status = await _async_load_json_fixture(hass, "status.json") device_type = await _async_load_json_fixture(hass, "device_type.json") return _mock_powerwall_return_value( site_info=site_info, charge=47.31993232, sitemaster=sitemaster, meters=meters, grid_status="SystemGridConnected", status=status, device_type=device_type, ) def _mock_powerwall_return_value( site_info=None, charge=None, sitemaster=None, meters=None, grid_status=None, status=None, device_type=None, ): powerwall_mock = MagicMock() type(powerwall_mock).site_info = PropertyMock(return_value=site_info) type(powerwall_mock).charge = PropertyMock(return_value=charge) type(powerwall_mock).sitemaster = PropertyMock(return_value=sitemaster) type(powerwall_mock).meters = PropertyMock(return_value=meters) type(powerwall_mock).grid_status = PropertyMock(return_value=grid_status) type(powerwall_mock).status = PropertyMock(return_value=status) type(powerwall_mock).device_type = PropertyMock(return_value=device_type) return powerwall_mock def _mock_powerwall_side_effect(site_info=None): powerwall_mock = MagicMock() type(powerwall_mock).site_info = PropertyMock(side_effect=site_info) return powerwall_mock async def _async_load_json_fixture(hass, path): fixture = await hass.async_add_executor_job( load_fixture, os.path.join("powerwall", path) ) return json.loads(fixture) def _mock_get_config(): """Return a default powerwall config.""" return {DOMAIN: {CONF_IP_ADDRESS: "1.2.3.4"}}