diff --git a/tests/components/modbus/conftest.py b/tests/components/modbus/conftest.py index 43221b219e5..2902f0f7675 100644 --- a/tests/components/modbus/conftest.py +++ b/tests/components/modbus/conftest.py @@ -40,7 +40,7 @@ def mock_pymodbus(): @pytest.fixture -async def mock_modbus(hass, mock_pymodbus): +async def mock_modbus(hass, do_config): """Load integration modbus using mocked pymodbus.""" config = { DOMAIN: [ @@ -49,12 +49,16 @@ async def mock_modbus(hass, mock_pymodbus): CONF_HOST: "modbusTestHost", CONF_PORT: 5501, CONF_NAME: TEST_MODBUS_NAME, + **do_config, } ] } - assert await async_setup_component(hass, DOMAIN, config) is True - await hass.async_block_till_done() - yield mock_pymodbus + with mock.patch( + "homeassistant.components.modbus.modbus.ModbusTcpClient", autospec=True + ) as mock_pb: + assert await async_setup_component(hass, DOMAIN, config) is True + await hass.async_block_till_done() + yield mock_pb # dataclass diff --git a/tests/components/modbus/test_binary_sensor.py b/tests/components/modbus/test_binary_sensor.py index ebf487b129d..17f5dfb87a4 100644 --- a/tests/components/modbus/test_binary_sensor.py +++ b/tests/components/modbus/test_binary_sensor.py @@ -25,33 +25,32 @@ from tests.common import mock_restore_cache @pytest.mark.parametrize( - "do_options", + "do_config", [ - {}, { - CONF_SLAVE: 10, - CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, - CONF_DEVICE_CLASS: "door", + CONF_BINARY_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + } + ] + }, + { + CONF_BINARY_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + CONF_SLAVE: 10, + CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, + CONF_DEVICE_CLASS: "door", + } + ] }, ], ) -async def test_config_binary_sensor(hass, do_options): - """Run test for binary sensor.""" - sensor_name = "test_sensor" - config_sensor = { - CONF_NAME: sensor_name, - CONF_ADDRESS: 51, - **do_options, - } - await base_config_test( - hass, - config_sensor, - sensor_name, - SENSOR_DOMAIN, - CONF_BINARY_SENSORS, - None, - method_discovery=True, - ) +async def test_config_binary_sensor(hass, mock_modbus): + """Run config test for binary sensor.""" + assert SENSOR_DOMAIN in hass.config.components @pytest.mark.parametrize("do_type", [CALL_TYPE_COIL, CALL_TYPE_DISCRETE]) diff --git a/tests/components/modbus/test_climate.py b/tests/components/modbus/test_climate.py index c5201593480..0f02470d10a 100644 --- a/tests/components/modbus/test_climate.py +++ b/tests/components/modbus/test_climate.py @@ -20,34 +20,35 @@ from tests.common import mock_restore_cache @pytest.mark.parametrize( - "do_options", + "do_config", [ - {}, { - CONF_SCAN_INTERVAL: 20, - CONF_COUNT: 2, + CONF_CLIMATES: [ + { + CONF_NAME: "test_climate", + CONF_TARGET_TEMP: 117, + CONF_ADDRESS: 117, + CONF_SLAVE: 10, + } + ], + }, + { + CONF_CLIMATES: [ + { + CONF_NAME: "test_climate", + CONF_TARGET_TEMP: 117, + CONF_ADDRESS: 117, + CONF_SLAVE: 10, + CONF_SCAN_INTERVAL: 20, + CONF_COUNT: 2, + } + ], }, ], ) -async def test_config_climate(hass, do_options): - """Run test for climate.""" - device_name = "test_climate" - device_config = { - CONF_NAME: device_name, - CONF_TARGET_TEMP: 117, - CONF_ADDRESS: 117, - CONF_SLAVE: 10, - **do_options, - } - await base_config_test( - hass, - device_config, - device_name, - CLIMATE_DOMAIN, - CONF_CLIMATES, - None, - method_discovery=True, - ) +async def test_config_climate(hass, mock_modbus): + """Run configuration test for climate.""" + assert CLIMATE_DOMAIN in hass.config.components @pytest.mark.parametrize( diff --git a/tests/components/modbus/test_cover.py b/tests/components/modbus/test_cover.py index 98c4e84699f..e2f58173442 100644 --- a/tests/components/modbus/test_cover.py +++ b/tests/components/modbus/test_cover.py @@ -35,34 +35,33 @@ from tests.common import mock_restore_cache @pytest.mark.parametrize( - "do_options", + "do_config", [ - {}, { - CONF_SLAVE: 10, - CONF_SCAN_INTERVAL: 20, + CONF_COVERS: [ + { + CONF_NAME: "test_cover", + CONF_ADDRESS: 1234, + CONF_INPUT_TYPE: CALL_TYPE_COIL, + } + ] + }, + { + CONF_COVERS: [ + { + CONF_NAME: "test_cover", + CONF_ADDRESS: 1234, + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, + CONF_SLAVE: 10, + CONF_SCAN_INTERVAL: 20, + } + ] }, ], ) -@pytest.mark.parametrize("read_type", [CALL_TYPE_COIL, CALL_TYPE_REGISTER_HOLDING]) -async def test_config_cover(hass, do_options, read_type): - """Run test for cover.""" - device_name = "test_cover" - device_config = { - CONF_NAME: device_name, - CONF_ADDRESS: 1234, - CONF_INPUT_TYPE: read_type, - **do_options, - } - await base_config_test( - hass, - device_config, - device_name, - COVER_DOMAIN, - CONF_COVERS, - None, - method_discovery=True, - ) +async def test_config_cover(hass, mock_modbus): + """Run configuration test for cover.""" + assert COVER_DOMAIN in hass.config.components @pytest.mark.parametrize( diff --git a/tests/components/modbus/test_fan.py b/tests/components/modbus/test_fan.py index 2a9414d2277..1f24bf7231c 100644 --- a/tests/components/modbus/test_fan.py +++ b/tests/components/modbus/test_fan.py @@ -41,75 +41,90 @@ from tests.common import mock_restore_cache "do_config", [ { - CONF_ADDRESS: 1234, + CONF_FANS: [ + { + CONF_NAME: "test_fan", + CONF_ADDRESS: 1234, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_WRITE_TYPE: CALL_TYPE_COIL, + CONF_FANS: [ + { + CONF_NAME: "test_fan", + CONF_ADDRESS: 1234, + CONF_WRITE_TYPE: CALL_TYPE_COIL, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_FANS: [ + { + CONF_NAME: "test_fan", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_FANS: [ + { + CONF_NAME: "test_fan", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_FANS: [ + { + CONF_NAME: "test_fan", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: None, + CONF_FANS: [ + { + CONF_NAME: "test_fan", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: None, + } + ] }, ], ) -async def test_config_fan(hass, do_config): - """Run test for fan.""" - device_name = "test_fan" - - device_config = { - CONF_NAME: device_name, - **do_config, - } - - await base_config_test( - hass, - device_config, - device_name, - FAN_DOMAIN, - CONF_FANS, - None, - method_discovery=True, - ) +async def test_config_fan(hass, mock_modbus): + """Run configuration test for fan.""" + assert FAN_DOMAIN in hass.config.components @pytest.mark.parametrize("call_type", [CALL_TYPE_COIL, CALL_TYPE_REGISTER_HOLDING]) diff --git a/tests/components/modbus/test_light.py b/tests/components/modbus/test_light.py index 12e72e54155..a7826681678 100644 --- a/tests/components/modbus/test_light.py +++ b/tests/components/modbus/test_light.py @@ -41,75 +41,90 @@ from tests.common import mock_restore_cache "do_config", [ { - CONF_ADDRESS: 1234, + CONF_LIGHTS: [ + { + CONF_NAME: "test_light", + CONF_ADDRESS: 1234, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_WRITE_TYPE: CALL_TYPE_COIL, + CONF_LIGHTS: [ + { + CONF_NAME: "test_light", + CONF_ADDRESS: 1234, + CONF_WRITE_TYPE: CALL_TYPE_COIL, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_LIGHTS: [ + { + CONF_NAME: "test_light", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_LIGHTS: [ + { + CONF_NAME: "test_light", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_LIGHTS: [ + { + CONF_NAME: "test_light", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_VERIFY: None, + CONF_LIGHTS: [ + { + CONF_NAME: "test_light", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_VERIFY: None, + } + ] }, ], ) -async def test_config_light(hass, do_config): - """Run test for light.""" - device_name = "test_light" - - device_config = { - CONF_NAME: device_name, - **do_config, - } - - await base_config_test( - hass, - device_config, - device_name, - LIGHT_DOMAIN, - CONF_LIGHTS, - None, - method_discovery=True, - ) +async def test_config_light(hass, mock_modbus): + """Run configuration test for light.""" + assert LIGHT_DOMAIN in hass.config.components @pytest.mark.parametrize("call_type", [CALL_TYPE_COIL, CALL_TYPE_REGISTER_HOLDING]) diff --git a/tests/components/modbus/test_sensor.py b/tests/components/modbus/test_sensor.py index 4deb5ee8392..e581fd8fb1d 100644 --- a/tests/components/modbus/test_sensor.py +++ b/tests/components/modbus/test_sensor.py @@ -45,68 +45,90 @@ from tests.common import mock_restore_cache "do_config", [ { - CONF_ADDRESS: 51, + CONF_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + } + ] }, { - CONF_ADDRESS: 51, - CONF_SLAVE: 10, - CONF_COUNT: 1, - CONF_DATA_TYPE: "int", - CONF_PRECISION: 0, - CONF_SCALE: 1, - CONF_OFFSET: 0, - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, - CONF_DEVICE_CLASS: "battery", + CONF_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + CONF_SLAVE: 10, + CONF_COUNT: 1, + CONF_DATA_TYPE: "int", + CONF_PRECISION: 0, + CONF_SCALE: 1, + CONF_OFFSET: 0, + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, + CONF_DEVICE_CLASS: "battery", + } + ] }, { - CONF_ADDRESS: 51, - CONF_SLAVE: 10, - CONF_COUNT: 1, - CONF_DATA_TYPE: "int", - CONF_PRECISION: 0, - CONF_SCALE: 1, - CONF_OFFSET: 0, - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, - CONF_DEVICE_CLASS: "battery", + CONF_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + CONF_SLAVE: 10, + CONF_COUNT: 1, + CONF_DATA_TYPE: "int", + CONF_PRECISION: 0, + CONF_SCALE: 1, + CONF_OFFSET: 0, + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, + CONF_DEVICE_CLASS: "battery", + } + ] }, { - CONF_ADDRESS: 51, - CONF_COUNT: 1, - CONF_SWAP: CONF_SWAP_NONE, + CONF_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + CONF_COUNT: 1, + CONF_SWAP: CONF_SWAP_NONE, + } + ] }, { - CONF_ADDRESS: 51, - CONF_COUNT: 1, - CONF_SWAP: CONF_SWAP_BYTE, + CONF_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + CONF_COUNT: 1, + CONF_SWAP: CONF_SWAP_BYTE, + } + ] }, { - CONF_ADDRESS: 51, - CONF_COUNT: 2, - CONF_SWAP: CONF_SWAP_WORD, + CONF_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + CONF_COUNT: 2, + CONF_SWAP: CONF_SWAP_WORD, + } + ] }, { - CONF_ADDRESS: 51, - CONF_COUNT: 2, - CONF_SWAP: CONF_SWAP_WORD_BYTE, + CONF_SENSORS: [ + { + CONF_NAME: "test_sensor", + CONF_ADDRESS: 51, + CONF_COUNT: 2, + CONF_SWAP: CONF_SWAP_WORD_BYTE, + } + ] }, ], ) -async def test_config_sensor(hass, do_config): - """Run test for sensor.""" - sensor_name = "test_sensor" - config_sensor = { - CONF_NAME: sensor_name, - **do_config, - } - await base_config_test( - hass, - config_sensor, - sensor_name, - SENSOR_DOMAIN, - CONF_SENSORS, - CONF_REGISTERS, - method_discovery=True, - ) +async def test_config_sensor(hass, mock_modbus): + """Run configuration test for sensor.""" + assert SENSOR_DOMAIN in hass.config.components @pytest.mark.parametrize( diff --git a/tests/components/modbus/test_switch.py b/tests/components/modbus/test_switch.py index 37ddfec2b4d..eb4efbc048c 100644 --- a/tests/components/modbus/test_switch.py +++ b/tests/components/modbus/test_switch.py @@ -48,81 +48,96 @@ from tests.common import async_fire_time_changed, mock_restore_cache "do_config", [ { - CONF_ADDRESS: 1234, + CONF_SWITCHES: [ + { + CONF_NAME: "test_switch", + CONF_ADDRESS: 1234, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_WRITE_TYPE: CALL_TYPE_COIL, + CONF_SWITCHES: [ + { + CONF_NAME: "test_switch", + CONF_ADDRESS: 1234, + CONF_WRITE_TYPE: CALL_TYPE_COIL, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_DEVICE_CLASS: "switch", - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_SWITCHES: [ + { + CONF_NAME: "test_switch", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_DEVICE_CLASS: "switch", + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_HOLDING, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_DEVICE_CLASS: "switch", - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - CONF_DELAY: 10, - }, + CONF_SWITCHES: [ + { + CONF_NAME: "test_switch", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_DEVICE_CLASS: "switch", + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_REGISTER_INPUT, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + CONF_DELAY: 10, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_DEVICE_CLASS: "switch", - CONF_VERIFY: { - CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, - CONF_ADDRESS: 1235, - CONF_STATE_OFF: 0, - CONF_STATE_ON: 1, - }, + CONF_SWITCHES: [ + { + CONF_NAME: "test_switch", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_DEVICE_CLASS: "switch", + CONF_VERIFY: { + CONF_INPUT_TYPE: CALL_TYPE_DISCRETE, + CONF_ADDRESS: 1235, + CONF_STATE_OFF: 0, + CONF_STATE_ON: 1, + }, + } + ] }, { - CONF_ADDRESS: 1234, - CONF_SLAVE: 1, - CONF_COMMAND_OFF: 0x00, - CONF_COMMAND_ON: 0x01, - CONF_DEVICE_CLASS: "switch", - CONF_SCAN_INTERVAL: 0, - CONF_VERIFY: None, + CONF_SWITCHES: [ + { + CONF_NAME: "test_switch", + CONF_ADDRESS: 1234, + CONF_SLAVE: 1, + CONF_COMMAND_OFF: 0x00, + CONF_COMMAND_ON: 0x01, + CONF_DEVICE_CLASS: "switch", + CONF_SCAN_INTERVAL: 0, + CONF_VERIFY: None, + } + ] }, ], ) -async def test_config_switch(hass, do_config): - """Run test for switch.""" - device_name = "test_switch" - - device_config = { - CONF_NAME: device_name, - **do_config, - } - - await base_config_test( - hass, - device_config, - device_name, - SWITCH_DOMAIN, - CONF_SWITCHES, - None, - method_discovery=True, - ) +async def test_config_switch(hass, mock_modbus): + """Run configurationtest for switch.""" + assert SWITCH_DOMAIN in hass.config.components @pytest.mark.parametrize("call_type", [CALL_TYPE_COIL, CALL_TYPE_REGISTER_HOLDING])