Skip to content

Commit

Permalink
Add tests for component configuration with extra keys (#103959)
Browse files Browse the repository at this point in the history
  • Loading branch information
emontnemery committed Nov 14, 2023
1 parent fe15ed4 commit 44c1cef
Show file tree
Hide file tree
Showing 13 changed files with 95 additions and 43 deletions.
Expand Up @@ -2,11 +2,14 @@ iot_domain:
# This is correct and should not generate errors
- platform: non_adr_0007
option1: abc
# This violates the non_adr_0007.iot_domain platform schema
# This violates the iot_domain platform schema (platform missing)
- paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (option1 wrong type)
- platform: non_adr_0007
option1: 123
# This violates the iot_domain platform schema
- paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist)
- platform: non_adr_0007
no_such_option: abc

# This is correct and should not generate errors
adr_0007_1:
Expand All @@ -19,3 +22,8 @@ adr_0007_2:
adr_0007_3:
host: blah.com
port: foo

# no_such_option does not exist
adr_0007_4:
host: blah.com
no_such_option: foo
@@ -0,0 +1,3 @@
# no_such_option does not exist
host: blah.com
no_such_option: foo
@@ -1,8 +1,11 @@
# This is correct and should not generate errors
- platform: non_adr_0007
option1: abc
# This violates the non_adr_0007.iot_domain platform schema
# This violates the iot_domain platform schema (platform missing)
- paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (option1 wrong type)
- platform: non_adr_0007
option1: 123
# This violates the iot_domain platform schema
- paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist)
- platform: non_adr_0007
no_such_option: abc
@@ -1,3 +1,2 @@
# This violates the non_adr_0007.iot_domain platform schema
platform: non_adr_0007
option1: 123
# This violates the iot_domain platform schema (platform missing)
paltfrom: non_adr_0007
@@ -1,2 +1,3 @@
# This violates the iot_domain platform schema
paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (option1 wrong type)
platform: non_adr_0007
option1: 123
@@ -0,0 +1,3 @@
# This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist)
platform: non_adr_0007
no_such_option: abc
@@ -1,3 +1,5 @@
# This is correct and should not generate errors
- platform: non_adr_0007
option1: abc
# This violates the iot_domain platform schema (platform missing)
- paltfrom: non_adr_0007
@@ -1,5 +1,6 @@
# This violates the non_adr_0007.iot_domain platform schema
# This violates the non_adr_0007.iot_domain platform schema (option1 wrong type)
- platform: non_adr_0007
option1: 123
# This violates the iot_domain platform schema
- paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist)
- platform: non_adr_0007
no_such_option: abc
@@ -1,28 +1,38 @@
homeassistant:
packages:
pack_1:
pack_iot_domain_1:
iot_domain:
# This is correct and should not generate errors
- platform: non_adr_0007
option1: abc
pack_2:
pack_iot_domain_2:
iot_domain:
# This violates the non_adr_0007.iot_domain platform schema
# This violates the iot_domain platform schema (platform missing)
- paltfrom: non_adr_0007
pack_iot_domain_3:
iot_domain:
# This violates the non_adr_0007.iot_domain platform schema (option1 wrong type)
- platform: non_adr_0007
option1: 123
pack_3:
pack_iot_domain_4:
iot_domain:
# This violates the iot_domain platform schema
- paltfrom: non_adr_0007
pack_4:
# This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist)
- platform: non_adr_0007
no_such_option: abc
pack_adr_0007_1:
# This is correct and should not generate errors
adr_0007_1:
host: blah.com
pack_5:
pack_adr_0007_2:
# Host is missing
adr_0007_2:
pack_6:
pack_adr_0007_3:
# Port is wrong type
adr_0007_3:
host: blah.com
port: foo
pack_adr_0007_4:
# no_such_option does not exist
adr_0007_4:
host: blah.com
no_such_option: foo
@@ -0,0 +1,4 @@
# no_such_option does not exist
adr_0007_4:
host: blah.com
no_such_option: foo
Expand Up @@ -2,8 +2,11 @@ iot_domain:
# This is correct and should not generate errors
- platform: non_adr_0007
option1: abc
# This violates the non_adr_0007.iot_domain platform schema
# This violates the iot_domain platform schema (platform missing)
- paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (option1 wrong type)
- platform: non_adr_0007
option1: 123
# This violates the iot_domain platform schema
- paltfrom: non_adr_0007
# This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist)
- platform: non_adr_0007
- no_such_option: abc
39 changes: 24 additions & 15 deletions tests/snapshots/test_config.ambr
@@ -1,46 +1,55 @@
# serializer version: 1
# name: test_component_config_validation_error[basic]
list([
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 7: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 9: required key not provided @ data['platform']. Got None.",
"Invalid config for [adr_0007_2] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 16: required key not provided @ data['adr_0007_2']['host']. Got None.",
"Invalid config for [adr_0007_3] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 21: expected int for dictionary value @ data['adr_0007_3']['port']. Got 'foo'.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 6: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 9: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 12: 'no_such_option' is an invalid option for [iot_domain.non_adr_0007], check: no_such_option",
"Invalid config for [adr_0007_2] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 19: required key not provided @ data['adr_0007_2']['host']. Got None.",
"Invalid config for [adr_0007_3] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 24: expected int for dictionary value @ data['adr_0007_3']['port']. Got 'foo'.",
"Invalid config for [adr_0007_4] at <BASE_PATH>/fixtures/core/config/component_validation/basic/configuration.yaml, line 29: 'no_such_option' is an invalid option for [adr_0007_4], check: adr_0007_4->no_such_option",
])
# ---
# name: test_component_config_validation_error[basic_include]
list([
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml, line 6: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml, line 8: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml, line 5: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml, line 8: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml, line 11: 'no_such_option' is an invalid option for [iot_domain.non_adr_0007], check: no_such_option",
"Invalid config for [adr_0007_2] at <BASE_PATH>/fixtures/core/config/component_validation/basic_include/configuration.yaml, line 3: required key not provided @ data['adr_0007_2']['host']. Got None.",
"Invalid config for [adr_0007_3] at <BASE_PATH>/fixtures/core/config/component_validation/basic_include/integrations/adr_0007_3.yaml, line 3: expected int for dictionary value @ data['adr_0007_3']['port']. Got 'foo'.",
])
# ---
# name: test_component_config_validation_error[include_dir_list]
list([
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_2.yaml, line 3: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_3.yaml, line 2: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_2.yaml, line 2: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_3.yaml, line 3: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_4.yaml, line 3: 'no_such_option' is an invalid option for [iot_domain.non_adr_0007], check: no_such_option",
])
# ---
# name: test_component_config_validation_error[include_dir_merge_list]
list([
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_1.yaml, line 5: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_2.yaml, line 3: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_2.yaml, line 5: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_2.yaml, line 6: 'no_such_option' is an invalid option for [iot_domain.non_adr_0007], check: no_such_option",
])
# ---
# name: test_component_config_validation_error[packages]
list([
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 12: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 16: required key not provided @ data['platform']. Got None.",
"Invalid config for [adr_0007_2] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 23: required key not provided @ data['adr_0007_2']['host']. Got None.",
"Invalid config for [adr_0007_3] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 28: expected int for dictionary value @ data['adr_0007_3']['port']. Got 'foo'.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 11: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 16: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 21: 'no_such_option' is an invalid option for [iot_domain.non_adr_0007], check: no_such_option",
"Invalid config for [adr_0007_2] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 28: required key not provided @ data['adr_0007_2']['host']. Got None.",
"Invalid config for [adr_0007_3] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 33: expected int for dictionary value @ data['adr_0007_3']['port']. Got 'foo'.",
"Invalid config for [adr_0007_4] at <BASE_PATH>/fixtures/core/config/component_validation/packages/configuration.yaml, line 38: 'no_such_option' is an invalid option for [adr_0007_4], check: adr_0007_4->no_such_option",
])
# ---
# name: test_component_config_validation_error[packages_include_dir_named]
list([
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml, line 7: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml, line 9: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml, line 6: required key not provided @ data['platform']. Got None.",
"Invalid config for [iot_domain.non_adr_0007] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml, line 9: expected str for dictionary value @ data['option1']. Got 123.",
"Invalid config for [iot_domain] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml, line 12: required key not provided @ data['platform']. Got None.",
"Invalid config for [adr_0007_2] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_2.yaml, line 2: required key not provided @ data['adr_0007_2']['host']. Got None.",
"Invalid config for [adr_0007_3] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_3.yaml, line 4: expected int for dictionary value @ data['adr_0007_3']['port']. Got 'foo'.",
"Invalid config for [adr_0007_4] at <BASE_PATH>/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_4.yaml, line 4: 'no_such_option' is an invalid option for [adr_0007_4], check: adr_0007_4->no_such_option",
])
# ---
# name: test_package_merge_error[packages]
Expand Down
10 changes: 8 additions & 2 deletions tests/test_config.py
Expand Up @@ -133,7 +133,7 @@ async def mock_non_adr_0007_integration(hass) -> None:
async def mock_adr_0007_integrations(hass) -> list[Integration]:
"""Mock ADR-0007 compliant integrations."""
integrations = []
for domain in ["adr_0007_1", "adr_0007_2", "adr_0007_3"]:
for domain in ["adr_0007_1", "adr_0007_2", "adr_0007_3", "adr_0007_4"]:
adr_0007_config_schema = vol.Schema(
{
domain: vol.Schema(
Expand Down Expand Up @@ -1498,7 +1498,13 @@ async def test_component_config_validation_error(
)
config = await config_util.async_hass_config_yaml(hass)

for domain in ["iot_domain", "adr_0007_1", "adr_0007_2", "adr_0007_3"]:
for domain in [
"iot_domain",
"adr_0007_1",
"adr_0007_2",
"adr_0007_3",
"adr_0007_4",
]:
integration = await async_get_integration(hass, domain)
await config_util.async_process_component_config(
hass,
Expand Down

0 comments on commit 44c1cef

Please sign in to comment.