diff --git a/tests/fixtures/core/config/component_validation/basic/configuration.yaml b/tests/fixtures/core/config/component_validation/basic/configuration.yaml index 5b3aacd9523..f6ec9e65388 100644 --- a/tests/fixtures/core/config/component_validation/basic/configuration.yaml +++ b/tests/fixtures/core/config/component_validation/basic/configuration.yaml @@ -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: @@ -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 diff --git a/tests/fixtures/core/config/component_validation/basic_include/integrations/adr_0007_4.yaml b/tests/fixtures/core/config/component_validation/basic_include/integrations/adr_0007_4.yaml new file mode 100644 index 00000000000..e8dcd8f4017 --- /dev/null +++ b/tests/fixtures/core/config/component_validation/basic_include/integrations/adr_0007_4.yaml @@ -0,0 +1,3 @@ +# no_such_option does not exist +host: blah.com +no_such_option: foo diff --git a/tests/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml b/tests/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml index 405fc3aab91..4ce54be7541 100644 --- a/tests/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml +++ b/tests/fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml @@ -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 diff --git a/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_2.yaml b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_2.yaml index f4d009c8cfa..f6c3219741e 100644 --- a/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_2.yaml +++ b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_2.yaml @@ -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 diff --git a/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_3.yaml b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_3.yaml index 94c18721061..2265e8c2f07 100644 --- a/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_3.yaml +++ b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_3.yaml @@ -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 diff --git a/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_4.yaml b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_4.yaml new file mode 100644 index 00000000000..90be03bd5f9 --- /dev/null +++ b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_4.yaml @@ -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 diff --git a/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_1.yaml b/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_1.yaml index a0636cdecf4..172f96e2da2 100644 --- a/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_1.yaml +++ b/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_1.yaml @@ -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 diff --git a/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_2.yaml b/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_2.yaml index 16df25adcd7..d379c968b16 100644 --- a/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_2.yaml +++ b/tests/fixtures/core/config/component_validation/include_dir_merge_list/iot_domain/iot_domain_2.yaml @@ -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 diff --git a/tests/fixtures/core/config/component_validation/packages/configuration.yaml b/tests/fixtures/core/config/component_validation/packages/configuration.yaml index 5b3cf74615a..cd1aa71ef3f 100644 --- a/tests/fixtures/core/config/component_validation/packages/configuration.yaml +++ b/tests/fixtures/core/config/component_validation/packages/configuration.yaml @@ -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 diff --git a/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_4.yaml b/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_4.yaml new file mode 100644 index 00000000000..b5d4602c683 --- /dev/null +++ b/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_4.yaml @@ -0,0 +1,4 @@ +# no_such_option does not exist +adr_0007_4: + host: blah.com + no_such_option: foo diff --git a/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml b/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml index 8c366297165..bf18c0f74cf 100644 --- a/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml +++ b/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml @@ -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 diff --git a/tests/snapshots/test_config.ambr b/tests/snapshots/test_config.ambr index fd5e084d8ce..9d72d931fa2 100644 --- a/tests/snapshots/test_config.ambr +++ b/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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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 /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] diff --git a/tests/test_config.py b/tests/test_config.py index d97d4f7a2c8..56861057526 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -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( @@ -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,