From 885e393df9ec9765822ca96d262076d44ef382a5 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Sun, 22 Nov 2020 22:42:16 +0100 Subject: [PATCH] Make Brother uptime sensor disabled by default (#43478) --- homeassistant/components/brother/const.py | 30 ++++++++++++++++- homeassistant/components/brother/sensor.py | 3 +- tests/components/brother/__init__.py | 19 ++++++----- tests/components/brother/test_sensor.py | 38 +++++++++++++++++++--- 4 files changed, 76 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/brother/const.py b/homeassistant/components/brother/const.py index 9aa0a4f4a00..cbb3d2a70cb 100644 --- a/homeassistant/components/brother/const.py +++ b/homeassistant/components/brother/const.py @@ -18,6 +18,7 @@ ATTR_DRUM_COUNTER = "drum_counter" ATTR_DRUM_REMAINING_LIFE = "drum_remaining_life" ATTR_DRUM_REMAINING_PAGES = "drum_remaining_pages" ATTR_DUPLEX_COUNTER = "duplex_unit_pages_counter" +ATTR_ENABLED = "enabled" ATTR_FUSER_REMAINING_LIFE = "fuser_remaining_life" ATTR_ICON = "icon" ATTR_LABEL = "label" @@ -51,71 +52,85 @@ SENSOR_TYPES = { ATTR_ICON: "mdi:printer", ATTR_LABEL: ATTR_STATUS.title(), ATTR_UNIT: None, + ATTR_ENABLED: True, }, ATTR_PAGE_COUNTER: { ATTR_ICON: "mdi:file-document-outline", ATTR_LABEL: ATTR_PAGE_COUNTER.replace("_", " ").title(), ATTR_UNIT: UNIT_PAGES, + ATTR_ENABLED: True, }, ATTR_BW_COUNTER: { ATTR_ICON: "mdi:file-document-outline", ATTR_LABEL: ATTR_BW_COUNTER.replace("_", " ").title(), ATTR_UNIT: UNIT_PAGES, + ATTR_ENABLED: True, }, ATTR_COLOR_COUNTER: { ATTR_ICON: "mdi:file-document-outline", ATTR_LABEL: ATTR_COLOR_COUNTER.replace("_", " ").title(), ATTR_UNIT: UNIT_PAGES, + ATTR_ENABLED: True, }, ATTR_DUPLEX_COUNTER: { ATTR_ICON: "mdi:file-document-outline", ATTR_LABEL: ATTR_DUPLEX_COUNTER.replace("_", " ").title(), ATTR_UNIT: UNIT_PAGES, + ATTR_ENABLED: True, }, ATTR_DRUM_REMAINING_LIFE: { ATTR_ICON: "mdi:chart-donut", ATTR_LABEL: ATTR_DRUM_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_BLACK_DRUM_REMAINING_LIFE: { ATTR_ICON: "mdi:chart-donut", ATTR_LABEL: ATTR_BLACK_DRUM_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_CYAN_DRUM_REMAINING_LIFE: { ATTR_ICON: "mdi:chart-donut", ATTR_LABEL: ATTR_CYAN_DRUM_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_MAGENTA_DRUM_REMAINING_LIFE: { ATTR_ICON: "mdi:chart-donut", ATTR_LABEL: ATTR_MAGENTA_DRUM_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_YELLOW_DRUM_REMAINING_LIFE: { ATTR_ICON: "mdi:chart-donut", ATTR_LABEL: ATTR_YELLOW_DRUM_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_BELT_UNIT_REMAINING_LIFE: { ATTR_ICON: "mdi:current-ac", ATTR_LABEL: ATTR_BELT_UNIT_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_FUSER_REMAINING_LIFE: { ATTR_ICON: "mdi:water-outline", ATTR_LABEL: ATTR_FUSER_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_LASER_REMAINING_LIFE: { ATTR_ICON: "mdi:spotlight-beam", ATTR_LABEL: ATTR_LASER_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_PF_KIT_1_REMAINING_LIFE: { ATTR_ICON: "mdi:printer-3d", ATTR_LABEL: ATTR_PF_KIT_1_REMAINING_LIFE.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_PF_KIT_MP_REMAINING_LIFE: { ATTR_ICON: "mdi:printer-3d", @@ -126,41 +141,54 @@ SENSOR_TYPES = { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_BLACK_TONER_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_CYAN_TONER_REMAINING: { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_CYAN_TONER_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_MAGENTA_TONER_REMAINING: { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_MAGENTA_TONER_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_YELLOW_TONER_REMAINING: { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_YELLOW_TONER_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_BLACK_INK_REMAINING: { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_BLACK_INK_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_CYAN_INK_REMAINING: { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_CYAN_INK_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_MAGENTA_INK_REMAINING: { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_MAGENTA_INK_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, }, ATTR_YELLOW_INK_REMAINING: { ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_LABEL: ATTR_YELLOW_INK_REMAINING.replace("_", " ").title(), ATTR_UNIT: PERCENTAGE, + ATTR_ENABLED: True, + }, + ATTR_UPTIME: { + ATTR_ICON: None, + ATTR_LABEL: ATTR_UPTIME.title(), + ATTR_UNIT: None, + ATTR_ENABLED: False, }, - ATTR_UPTIME: {ATTR_ICON: None, ATTR_LABEL: ATTR_UPTIME.title(), ATTR_UNIT: None}, } diff --git a/homeassistant/components/brother/sensor.py b/homeassistant/components/brother/sensor.py index 7239976f85e..97890e83cff 100644 --- a/homeassistant/components/brother/sensor.py +++ b/homeassistant/components/brother/sensor.py @@ -15,6 +15,7 @@ from .const import ( ATTR_DRUM_COUNTER, ATTR_DRUM_REMAINING_LIFE, ATTR_DRUM_REMAINING_PAGES, + ATTR_ENABLED, ATTR_ICON, ATTR_LABEL, ATTR_MAGENTA_DRUM_COUNTER, @@ -139,4 +140,4 @@ class BrotherPrinterSensor(CoordinatorEntity): @property def entity_registry_enabled_default(self): """Return if the entity should be enabled when first added to the entity registry.""" - return True + return SENSOR_TYPES[self.kind][ATTR_ENABLED] diff --git a/tests/components/brother/__init__.py b/tests/components/brother/__init__.py index 1a3ba2a3e20..b24ef97705b 100644 --- a/tests/components/brother/__init__.py +++ b/tests/components/brother/__init__.py @@ -8,7 +8,7 @@ from tests.async_mock import patch from tests.common import MockConfigEntry, load_fixture -async def init_integration(hass) -> MockConfigEntry: +async def init_integration(hass, skip_setup=False) -> MockConfigEntry: """Set up the Brother integration in Home Assistant.""" entry = MockConfigEntry( domain=DOMAIN, @@ -16,12 +16,15 @@ async def init_integration(hass) -> MockConfigEntry: unique_id="0123456789", data={CONF_HOST: "localhost", CONF_TYPE: "laser"}, ) - with patch( - "brother.Brother._get_data", - return_value=json.loads(load_fixture("brother_printer_data.json")), - ): - entry.add_to_hass(hass) - await hass.config_entries.async_setup(entry.entry_id) - await hass.async_block_till_done() + + entry.add_to_hass(hass) + + if not skip_setup: + with patch( + "brother.Brother._get_data", + return_value=json.loads(load_fixture("brother_printer_data.json")), + ): + await hass.config_entries.async_setup(entry.entry_id) + await hass.async_block_till_done() return entry diff --git a/tests/components/brother/test_sensor.py b/tests/components/brother/test_sensor.py index c8dc91ebcf4..ac32e1b983c 100644 --- a/tests/components/brother/test_sensor.py +++ b/tests/components/brother/test_sensor.py @@ -2,7 +2,8 @@ from datetime import datetime, timedelta import json -from homeassistant.components.brother.const import UNIT_PAGES +from homeassistant.components.brother.const import DOMAIN, UNIT_PAGES +from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN from homeassistant.const import ( ATTR_DEVICE_CLASS, ATTR_ENTITY_ID, @@ -25,13 +26,27 @@ ATTR_COUNTER = "counter" async def test_sensors(hass): """Test states of the sensors.""" + entry = await init_integration(hass, skip_setup=True) + + registry = await hass.helpers.entity_registry.async_get_registry() + + # Pre-create registry entries for disabled by default sensors + registry.async_get_or_create( + SENSOR_DOMAIN, + DOMAIN, + "0123456789_uptime", + suggested_object_id="hl_l2340dw_uptime", + disabled_by=None, + ) test_time = datetime(2019, 11, 11, 9, 10, 32, tzinfo=UTC) with patch( "homeassistant.components.brother.sensor.utcnow", return_value=test_time + ), patch( + "brother.Brother._get_data", + return_value=json.loads(load_fixture("brother_printer_data.json")), ): - await init_integration(hass) - - registry = await hass.helpers.entity_registry.async_get_registry() + await hass.config_entries.async_setup(entry.entry_id) + await hass.async_block_till_done() state = hass.states.get("sensor.hl_l2340dw_status") assert state @@ -224,6 +239,21 @@ async def test_sensors(hass): assert entry.unique_id == "0123456789_uptime" +async def test_disabled_by_default_sensors(hass): + """Test the disabled by default Brother sensors.""" + await init_integration(hass) + + registry = await hass.helpers.entity_registry.async_get_registry() + state = hass.states.get("sensor.hl_l2340dw_uptime") + assert state is None + + entry = registry.async_get("sensor.hl_l2340dw_uptime") + assert entry + assert entry.unique_id == "0123456789_uptime" + assert entry.disabled + assert entry.disabled_by == "integration" + + async def test_availability(hass): """Ensure that we mark the entities unavailable correctly when device is offline.""" await init_integration(hass)