"""Test to verify that Home Assistant exceptions work.""" from __future__ import annotations import pytest from homeassistant.exceptions import ( ConditionErrorContainer, ConditionErrorIndex, ConditionErrorMessage, TemplateError, ) def test_conditionerror_format() -> None: """Test ConditionError stringifiers.""" error1 = ConditionErrorMessage("test", "A test error") assert str(error1) == "In 'test' condition: A test error" error2 = ConditionErrorMessage("test", "Another error") assert str(error2) == "In 'test' condition: Another error" error_pos1 = ConditionErrorIndex("box", index=0, total=2, error=error1) assert ( str(error_pos1) == """In 'box' (item 1 of 2): In 'test' condition: A test error""" ) error_pos2 = ConditionErrorIndex("box", index=1, total=2, error=error2) assert ( str(error_pos2) == """In 'box' (item 2 of 2): In 'test' condition: Another error""" ) error_container1 = ConditionErrorContainer("box", errors=[error_pos1, error_pos2]) assert ( str(error_container1) == """In 'box' (item 1 of 2): In 'test' condition: A test error In 'box' (item 2 of 2): In 'test' condition: Another error""" ) error_pos3 = ConditionErrorIndex("box", index=0, total=1, error=error1) assert ( str(error_pos3) == """In 'box': In 'test' condition: A test error""" ) @pytest.mark.parametrize( ("arg", "expected"), [ ("message", "message"), (Exception("message"), "Exception: message"), ], ) def test_template_message(arg: str | Exception, expected: str) -> None: """Ensure we can create TemplateError.""" template_error = TemplateError(arg) assert str(template_error) == expected