diff --git a/tests/fixtures/core/config/component_validation/basic/configuration.yaml b/tests/fixtures/core/config/component_validation/basic/configuration.yaml index f6ec9e65388..158a32a7d69 100644 --- a/tests/fixtures/core/config/component_validation/basic/configuration.yaml +++ b/tests/fixtures/core/config/component_validation/basic/configuration.yaml @@ -10,6 +10,14 @@ iot_domain: # This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist) - platform: non_adr_0007 no_such_option: abc + option1: abc + # This violates the non_adr_0007.iot_domain platform schema: + # - no_such_option does not exist + # - option1 is missing + # - option2 is wrong type + - platform: non_adr_0007 + no_such_option: abc + option2: 123 # This is correct and should not generate errors adr_0007_1: @@ -27,3 +35,11 @@ adr_0007_3: adr_0007_4: host: blah.com no_such_option: foo + +# Multiple errors: +# - host is missing +# - no_such_option does not exist +# - port is wrong type +adr_0007_5: + no_such_option: foo + port: foo diff --git a/tests/fixtures/core/config/component_validation/basic_include/configuration.yaml b/tests/fixtures/core/config/component_validation/basic_include/configuration.yaml index ab86a6b34da..d67ae673901 100644 --- a/tests/fixtures/core/config/component_validation/basic_include/configuration.yaml +++ b/tests/fixtures/core/config/component_validation/basic_include/configuration.yaml @@ -2,3 +2,5 @@ iot_domain: !include integrations/iot_domain.yaml adr_0007_1: !include integrations/adr_0007_1.yaml adr_0007_2: !include integrations/adr_0007_2.yaml adr_0007_3: !include integrations/adr_0007_3.yaml +adr_0007_4: !include integrations/adr_0007_4.yaml +adr_0007_5: !include integrations/adr_0007_5.yaml diff --git a/tests/fixtures/core/config/component_validation/basic_include/integrations/adr_0007_5.yaml b/tests/fixtures/core/config/component_validation/basic_include/integrations/adr_0007_5.yaml new file mode 100644 index 00000000000..0cda3d04a55 --- /dev/null +++ b/tests/fixtures/core/config/component_validation/basic_include/integrations/adr_0007_5.yaml @@ -0,0 +1,6 @@ +# Multiple errors: +# - host is missing +# - no_such_option does not exist +# - port is wrong type +no_such_option: foo +port: 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 4ce54be7541..dd592194f1a 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 @@ -9,3 +9,11 @@ # This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist) - platform: non_adr_0007 no_such_option: abc + option1: abc +# This violates the non_adr_0007.iot_domain platform schema: +# - no_such_option does not exist +# - option1 is missing +# - option2 is wrong type +- platform: non_adr_0007 + no_such_option: abc + option2: 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 index 90be03bd5f9..53f220472e2 100644 --- 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 @@ -1,3 +1,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 +option1: abc diff --git a/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_5.yaml b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_5.yaml new file mode 100644 index 00000000000..b0fec6d5046 --- /dev/null +++ b/tests/fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_5.yaml @@ -0,0 +1,7 @@ +# This violates the non_adr_0007.iot_domain platform schema: +# - no_such_option does not exist +# - option1 is missing +# - option2 is wrong type +platform: non_adr_0007 +no_such_option: abc +option2: 123 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 d379c968b16..f8ef2b5643b 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 @@ -4,3 +4,11 @@ # This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist) - platform: non_adr_0007 no_such_option: abc + option1: abc +# This violates the non_adr_0007.iot_domain platform schema: +# - no_such_option does not exist +# - option1 is missing +# - option2 is wrong type +- platform: non_adr_0007 + no_such_option: abc + option2: 123 diff --git a/tests/fixtures/core/config/component_validation/packages/configuration.yaml b/tests/fixtures/core/config/component_validation/packages/configuration.yaml index cd1aa71ef3f..dff25efd749 100644 --- a/tests/fixtures/core/config/component_validation/packages/configuration.yaml +++ b/tests/fixtures/core/config/component_validation/packages/configuration.yaml @@ -19,6 +19,16 @@ homeassistant: # This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist) - platform: non_adr_0007 no_such_option: abc + option1: abc + pack_iot_domain_5: + iot_domain: + # This violates the non_adr_0007.iot_domain platform schema: + # - no_such_option does not exist + # - option1 is missing + # - option2 is wrong type + - platform: non_adr_0007 + no_such_option: abc + option2: 123 pack_adr_0007_1: # This is correct and should not generate errors adr_0007_1: @@ -36,3 +46,11 @@ homeassistant: adr_0007_4: host: blah.com no_such_option: foo + pack_adr_0007_5: + # Multiple errors: + # - host is missing + # - no_such_option does not exist + # - port is wrong type + adr_0007_5: + no_such_option: foo + port: foo diff --git a/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_5.yaml b/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_5.yaml new file mode 100644 index 00000000000..fad2c53d527 --- /dev/null +++ b/tests/fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_5.yaml @@ -0,0 +1,7 @@ +# Multiple errors: +# - host is missing +# - no_such_option does not exist +# - port is wrong type +adr_0007_5: + no_such_option: foo + port: 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 bf18c0f74cf..e137411b0fc 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 @@ -9,4 +9,12 @@ iot_domain: option1: 123 # This violates the non_adr_0007.iot_domain platform schema (no_such_option does not exist) - platform: non_adr_0007 - - no_such_option: abc + no_such_option: abc + option1: abc + # This violates the non_adr_0007.iot_domain platform schema: + # - no_such_option does not exist + # - option1 is missing + # - option2 is wrong type + - platform: non_adr_0007 + no_such_option: abc + option2: 123 diff --git a/tests/snapshots/test_config.ambr b/tests/snapshots/test_config.ambr index 33b5e193d87..af4374e25f9 100644 --- a/tests/snapshots/test_config.ambr +++ b/tests/snapshots/test_config.ambr @@ -4,9 +4,11 @@ "Invalid config for [iot_domain] at /fixtures/core/config/component_validation/basic/configuration.yaml, line 6: required key not provided '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 '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 '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 '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", + "Invalid config for [iot_domain.non_adr_0007] at /fixtures/core/config/component_validation/basic/configuration.yaml, line 19: '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 27: required key not provided 'adr_0007_2->host', got None.", + "Invalid config for [adr_0007_3] at /fixtures/core/config/component_validation/basic/configuration.yaml, line 32: expected int for dictionary value 'adr_0007_3->port', got 'foo'.", + "Invalid config for [adr_0007_4] at /fixtures/core/config/component_validation/basic/configuration.yaml, line 37: 'no_such_option' is an invalid option for [adr_0007_4], check: adr_0007_4->no_such_option", + "Invalid config for [adr_0007_5] at /fixtures/core/config/component_validation/basic/configuration.yaml, line 44: 'no_such_option' is an invalid option for [adr_0007_5], check: adr_0007_5->no_such_option", ]) # --- # name: test_component_config_validation_error[basic_include] @@ -14,8 +16,11 @@ "Invalid config for [iot_domain] at /fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml, line 5: required key not provided '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 '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 [iot_domain.non_adr_0007] at /fixtures/core/config/component_validation/basic_include/integrations/iot_domain.yaml, line 18: '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 '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 'adr_0007_3->port', got 'foo'.", + "Invalid config for [adr_0007_4] at /fixtures/core/config/component_validation/basic_include/integrations/adr_0007_4.yaml, line 3: 'no_such_option' is an invalid option for [adr_0007_4], check: adr_0007_4->no_such_option", + "Invalid config for [adr_0007_5] at /fixtures/core/config/component_validation/basic_include/integrations/adr_0007_5.yaml, line 5: 'no_such_option' is an invalid option for [adr_0007_5], check: adr_0007_5->no_such_option", ]) # --- # name: test_component_config_validation_error[include_dir_list] @@ -23,6 +28,7 @@ "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 '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 '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", + "Invalid config for [iot_domain.non_adr_0007] at /fixtures/core/config/component_validation/include_dir_list/iot_domain/iot_domain_5.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[include_dir_merge_list] @@ -30,6 +36,7 @@ "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 '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 'option1', got 123.", "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", + "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 13: 'no_such_option' is an invalid option for [iot_domain.non_adr_0007], check: no_such_option", ]) # --- # name: test_component_config_validation_error[packages] @@ -37,19 +44,23 @@ "Invalid config for [iot_domain] at /fixtures/core/config/component_validation/packages/configuration.yaml, line 11: required key not provided '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 '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 '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 '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", + "Invalid config for [iot_domain.non_adr_0007] at /fixtures/core/config/component_validation/packages/configuration.yaml, line 30: '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 38: required key not provided 'adr_0007_2->host', got None.", + "Invalid config for [adr_0007_3] at /fixtures/core/config/component_validation/packages/configuration.yaml, line 43: expected int for dictionary value 'adr_0007_3->port', got 'foo'.", + "Invalid config for [adr_0007_4] at /fixtures/core/config/component_validation/packages/configuration.yaml, line 48: 'no_such_option' is an invalid option for [adr_0007_4], check: adr_0007_4->no_such_option", + "Invalid config for [adr_0007_5] at /fixtures/core/config/component_validation/packages/configuration.yaml, line 55: 'no_such_option' is an invalid option for [adr_0007_5], check: adr_0007_5->no_such_option", ]) # --- # name: test_component_config_validation_error[packages_include_dir_named] list([ "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 '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 '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 '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 12: 'no_such_option' is an invalid option for [iot_domain.non_adr_0007], check: no_such_option", + "Invalid config for [iot_domain.non_adr_0007] at /fixtures/core/config/component_validation/packages_include_dir_named/integrations/iot_domain.yaml, line 19: '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_include_dir_named/integrations/adr_0007_2.yaml, line 2: required key not provided '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 '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", + "Invalid config for [adr_0007_5] at /fixtures/core/config/component_validation/packages_include_dir_named/integrations/adr_0007_5.yaml, line 6: 'no_such_option' is an invalid option for [adr_0007_5], check: adr_0007_5->no_such_option", ]) # --- # name: test_package_merge_error[packages] diff --git a/tests/test_config.py b/tests/test_config.py index 56861057526..fb88e8ca3a2 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -121,7 +121,9 @@ async def mock_non_adr_0007_integration(hass) -> None: configuration key """ - test_platform_schema = IOT_DOMAIN_PLATFORM_SCHEMA.extend({"option1": str}) + test_platform_schema = IOT_DOMAIN_PLATFORM_SCHEMA.extend( + {vol.Required("option1"): str, vol.Optional("option2"): str} + ) mock_platform( hass, "non_adr_0007.iot_domain", @@ -133,7 +135,13 @@ 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", "adr_0007_4"]: + for domain in [ + "adr_0007_1", + "adr_0007_2", + "adr_0007_3", + "adr_0007_4", + "adr_0007_5", + ]: adr_0007_config_schema = vol.Schema( { domain: vol.Schema( @@ -1504,6 +1512,7 @@ async def test_component_config_validation_error( "adr_0007_2", "adr_0007_3", "adr_0007_4", + "adr_0007_5", ]: integration = await async_get_integration(hass, domain) await config_util.async_process_component_config(