mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 09:47:13 +00:00
Platinum quality for Tessie (#121962)
This commit is contained in:
parent
e4ef4b81ba
commit
b06d3fe3b7
@ -20,6 +20,8 @@ from .const import TessieState
|
|||||||
from .entity import TessieEnergyEntity, TessieEntity
|
from .entity import TessieEnergyEntity, TessieEntity
|
||||||
from .models import TessieEnergyData, TessieVehicleData
|
from .models import TessieEnergyData, TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, kw_only=True)
|
@dataclass(frozen=True, kw_only=True)
|
||||||
class TessieBinarySensorEntityDescription(BinarySensorEntityDescription):
|
class TessieBinarySensorEntityDescription(BinarySensorEntityDescription):
|
||||||
|
@ -22,6 +22,8 @@ from . import TessieConfigEntry
|
|||||||
from .entity import TessieEntity
|
from .entity import TessieEntity
|
||||||
from .models import TessieVehicleData
|
from .models import TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, kw_only=True)
|
@dataclass(frozen=True, kw_only=True)
|
||||||
class TessieButtonEntityDescription(ButtonEntityDescription):
|
class TessieButtonEntityDescription(ButtonEntityDescription):
|
||||||
|
@ -26,6 +26,8 @@ from .const import TessieClimateKeeper
|
|||||||
from .entity import TessieEntity
|
from .entity import TessieEntity
|
||||||
from .models import TessieVehicleData
|
from .models import TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -38,6 +38,7 @@ class TessieConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
"""Get configuration from the user."""
|
"""Get configuration from the user."""
|
||||||
errors: dict[str, str] = {}
|
errors: dict[str, str] = {}
|
||||||
if user_input:
|
if user_input:
|
||||||
|
self._async_abort_entries_match(dict(user_input))
|
||||||
try:
|
try:
|
||||||
await get_state_of_all_vehicles(
|
await get_state_of_all_vehicles(
|
||||||
session=async_get_clientsession(self.hass),
|
session=async_get_clientsession(self.hass),
|
||||||
|
@ -29,6 +29,8 @@ from .const import TessieCoverStates
|
|||||||
from .entity import TessieEntity
|
from .entity import TessieEntity
|
||||||
from .models import TessieVehicleData
|
from .models import TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -12,6 +12,8 @@ from . import TessieConfigEntry
|
|||||||
from .entity import TessieEntity
|
from .entity import TessieEntity
|
||||||
from .models import TessieVehicleData
|
from .models import TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -26,6 +26,8 @@ from .const import DOMAIN, TessieChargeCableLockStates
|
|||||||
from .entity import TessieEntity
|
from .entity import TessieEntity
|
||||||
from .models import TessieVehicleData
|
from .models import TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -6,5 +6,6 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/tessie",
|
"documentation": "https://www.home-assistant.io/integrations/tessie",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["tessie"],
|
"loggers": ["tessie"],
|
||||||
|
"quality_scale": "platinum",
|
||||||
"requirements": ["tessie-api==0.1.1", "tesla-fleet-api==0.7.2"]
|
"requirements": ["tessie-api==0.1.1", "tesla-fleet-api==0.7.2"]
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ STATES = {
|
|||||||
"Stopped": MediaPlayerState.IDLE,
|
"Stopped": MediaPlayerState.IDLE,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -31,6 +31,8 @@ from .entity import TessieEnergyEntity, TessieEntity
|
|||||||
from .helpers import handle_command
|
from .helpers import handle_command
|
||||||
from .models import TessieEnergyData, TessieVehicleData
|
from .models import TessieEnergyData, TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, kw_only=True)
|
@dataclass(frozen=True, kw_only=True)
|
||||||
class TessieNumberEntityDescription(NumberEntityDescription):
|
class TessieNumberEntityDescription(NumberEntityDescription):
|
||||||
|
@ -32,6 +32,8 @@ SEAT_COOLERS = {
|
|||||||
"climate_state_seat_fan_front_right": "front_right",
|
"climate_state_seat_fan_front_right": "front_right",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -367,6 +367,8 @@ ENERGY_INFO_DESCRIPTIONS: tuple[TessieSensorEntityDescription, ...] = (
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
|
"abort": {
|
||||||
|
"already_configured": "[%key:common::config_flow::abort::already_configured_service%]"
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"invalid_access_token": "[%key:common::config_flow::error::invalid_access_token%]",
|
"invalid_access_token": "[%key:common::config_flow::error::invalid_access_token%]",
|
||||||
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
|
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
|
||||||
|
@ -71,6 +71,8 @@ CHARGE_DESCRIPTION: TessieSwitchEntityDescription = TessieSwitchEntityDescriptio
|
|||||||
off_func=lambda: stop_charging,
|
off_func=lambda: stop_charging,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -15,6 +15,8 @@ from .const import TessieUpdateStatus
|
|||||||
from .entity import TessieEntity
|
from .entity import TessieEntity
|
||||||
from .models import TessieVehicleData
|
from .models import TessieVehicleData
|
||||||
|
|
||||||
|
PARALLEL_UPDATES = 0
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
@ -67,6 +67,33 @@ async def test_form(
|
|||||||
assert result2["data"] == TEST_CONFIG
|
assert result2["data"] == TEST_CONFIG
|
||||||
|
|
||||||
|
|
||||||
|
async def test_abort(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
mock_config_flow_get_state_of_all_vehicles,
|
||||||
|
mock_async_setup_entry,
|
||||||
|
) -> None:
|
||||||
|
"""Test a duplicate entry aborts."""
|
||||||
|
|
||||||
|
mock_entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
data=TEST_CONFIG,
|
||||||
|
)
|
||||||
|
mock_entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
result1 = await hass.config_entries.flow.async_init(
|
||||||
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
|
)
|
||||||
|
|
||||||
|
result2 = await hass.config_entries.flow.async_configure(
|
||||||
|
result1["flow_id"],
|
||||||
|
TEST_CONFIG,
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert result2["type"] is FlowResultType.ABORT
|
||||||
|
assert result2["reason"] == "already_configured"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("side_effect", "error"),
|
("side_effect", "error"),
|
||||||
[
|
[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user