Preserve customize glob order. (#6963)

* Preserve customize glob order.

* add tests
This commit is contained in:
Andrey 2017-04-07 08:39:35 +03:00 committed by Paulus Schoutsen
parent 3e66df50c8
commit f96e06a2c2
4 changed files with 24 additions and 2 deletions

View File

@ -124,7 +124,7 @@ CONFIG_SCHEMA = vol.Schema({
vol.Optional(CONF_DEVICE_CONFIG, default={}): vol.Optional(CONF_DEVICE_CONFIG, default={}):
vol.Schema({cv.entity_id: DEVICE_CONFIG_SCHEMA_ENTRY}), vol.Schema({cv.entity_id: DEVICE_CONFIG_SCHEMA_ENTRY}),
vol.Optional(CONF_DEVICE_CONFIG_GLOB, default={}): vol.Optional(CONF_DEVICE_CONFIG_GLOB, default={}):
vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}), cv.ordered_dict(DEVICE_CONFIG_SCHEMA_ENTRY, cv.string),
vol.Optional(CONF_DEVICE_CONFIG_DOMAIN, default={}): vol.Optional(CONF_DEVICE_CONFIG_DOMAIN, default={}):
vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}), vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}),
vol.Optional(CONF_DEBUG, default=DEFAULT_DEBUG): cv.boolean, vol.Optional(CONF_DEBUG, default=DEFAULT_DEBUG): cv.boolean,

View File

@ -108,7 +108,7 @@ CUSTOMIZE_CONFIG_SCHEMA = vol.Schema({
vol.Optional(CONF_CUSTOMIZE_DOMAIN, default={}): vol.Optional(CONF_CUSTOMIZE_DOMAIN, default={}):
vol.Schema({cv.string: dict}), vol.Schema({cv.string: dict}),
vol.Optional(CONF_CUSTOMIZE_GLOB, default={}): vol.Optional(CONF_CUSTOMIZE_GLOB, default={}):
vol.Schema({cv.string: dict}), cv.ordered_dict(OrderedDict, cv.string),
}) })
CORE_CONFIG_SCHEMA = CUSTOMIZE_CONFIG_SCHEMA.extend({ CORE_CONFIG_SCHEMA = CUSTOMIZE_CONFIG_SCHEMA.extend({

View File

@ -1,7 +1,11 @@
"""Tests for the Z-Wave init.""" """Tests for the Z-Wave init."""
import asyncio import asyncio
import unittest
from collections import OrderedDict
from homeassistant.bootstrap import async_setup_component from homeassistant.bootstrap import async_setup_component
from homeassistant.components.zwave import (
CONFIG_SCHEMA, CONF_DEVICE_CONFIG_GLOB)
@asyncio.coroutine @asyncio.coroutine
@ -34,3 +38,14 @@ def test_invalid_device_config(hass, mock_openzwave):
}}) }})
assert not result assert not result
class TestZwave(unittest.TestCase):
"""Test zwave init."""
def test_device_config_glob_is_ordered(self):
"""Test that device_config_glob preserves order."""
conf = CONFIG_SCHEMA(
{'zwave': {CONF_DEVICE_CONFIG_GLOB: OrderedDict()}})
self.assertIsInstance(
conf['zwave'][CONF_DEVICE_CONFIG_GLOB], OrderedDict)

View File

@ -3,6 +3,7 @@
import os import os
import unittest import unittest
import unittest.mock as mock import unittest.mock as mock
from collections import OrderedDict
import pytest import pytest
from voluptuous import MultipleInvalid from voluptuous import MultipleInvalid
@ -205,6 +206,12 @@ class TestConfig(unittest.TestCase):
}, },
}) })
def test_customize_glob_is_ordered(self):
"""Test that customize_glob preserves order."""
conf = config_util.CORE_CONFIG_SCHEMA(
{'customize_glob': OrderedDict()})
self.assertIsInstance(conf['customize_glob'], OrderedDict)
def _compute_state(self, config): def _compute_state(self, config):
run_coroutine_threadsafe( run_coroutine_threadsafe(
config_util.async_process_ha_core_config(self.hass, config), config_util.async_process_ha_core_config(self.hass, config),