Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,6 @@ omit =
homeassistant/components/zeroconf.py
homeassistant/components/zwave/__init__.py
homeassistant/components/zwave/util.py
homeassistant/components/zwave/workaround.py


[report]
Expand Down
33 changes: 12 additions & 21 deletions homeassistant/components/zwave/workaround.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,28 +68,19 @@

def get_device_component_mapping(value):
"""Get mapping of value to another component."""
if (value.node.manufacturer_id.strip() and
value.node.product_type.strip()):

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this was ever actually doing anything. strip() returns a stripped copy of the string. Since there's always a string object returned it always evaluates to true. It doesn't modify the original string.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Empty string is considered false:

image

But I don't know if manufacturer_id or product_type would ever return a string that is just whitespace.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I must have messed something up when I tested it in the interpreter. I'll restore it then and add a test.

manufacturer_id = int(value.node.manufacturer_id, 16)
product_type = int(value.node.product_type, 16)
return DEVICE_COMPONENT_MAPPING.get(
(manufacturer_id, product_type, value.command_class))

return None
manufacturer_id = int(value.node.manufacturer_id, 16)
product_type = int(value.node.product_type, 16)
return DEVICE_COMPONENT_MAPPING.get(
(manufacturer_id, product_type, value.command_class))


def get_device_mapping(value):
"""Get mapping of value to a workaround."""
if (value.node.manufacturer_id.strip() and
value.node.product_id.strip() and
value.node.product_type.strip()):
manufacturer_id = int(value.node.manufacturer_id, 16)
product_type = int(value.node.product_type, 16)
product_id = int(value.node.product_id, 16)
result = DEVICE_MAPPINGS_MTII.get(
(manufacturer_id, product_type, product_id, value.index))
if result:
return result
return DEVICE_MAPPINGS_MT.get((manufacturer_id, product_type))

return None
manufacturer_id = int(value.node.manufacturer_id, 16)
product_type = int(value.node.product_type, 16)
product_id = int(value.node.product_id, 16)
result = DEVICE_MAPPINGS_MTII.get(
(manufacturer_id, product_type, product_id, value.index))
if result:
return result
return DEVICE_MAPPINGS_MT.get((manufacturer_id, product_type))
40 changes: 40 additions & 0 deletions tests/components/zwave/test_workaround.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"""Test Z-Wave workarounds."""
from homeassistant.components.zwave import const, workaround
from tests.mock.zwave import MockNode, MockValue


def test_get_device_no_component_mapping():
"""Test that None is returned."""
node = MockNode()
value = MockValue(data=0, node=node)
assert workaround.get_device_component_mapping(value) is None


def test_get_device_component_mapping():
"""Test that component is returned."""
node = MockNode(manufacturer_id='010f', product_type='0b00')
value = MockValue(data=0, node=node,
command_class=const.COMMAND_CLASS_SENSOR_ALARM)
assert workaround.get_device_component_mapping(value) == 'binary_sensor'


def test_get_device_no_mapping():
"""Test that no device mapping is returned."""
node = MockNode()
value = MockValue(data=0, node=node)
assert workaround.get_device_mapping(value) is None


def test_get_device_mapping_mt():
"""Test that device mapping mt is returned."""
node = MockNode(manufacturer_id='0047', product_type='5a52')
value = MockValue(data=0, node=node)
assert workaround.get_device_mapping(value) == 'workaround_no_position'


def test_get_device_mapping_mtii():
"""Test that device mapping mtii is returned."""
node = MockNode(manufacturer_id='013c', product_type='0002',
product_id='0002')
value = MockValue(data=0, node=node, index=0)
assert workaround.get_device_mapping(value) == 'trigger_no_off_event'