Skip to content

Commit 6a07b46

Browse files
Add SQL services test for rollback on error (home-assistant#155607)
Co-authored-by: J. Diego Rodríguez Royo <[email protected]>
1 parent d63fdf7 commit 6a07b46

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

tests/components/sql/test_services.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from homeassistant.components.recorder import Recorder
1414
from homeassistant.components.sql.const import DOMAIN
1515
from homeassistant.components.sql.services import SERVICE_QUERY
16+
from homeassistant.components.sql.util import generate_lambda_stmt
1617
from homeassistant.core import HomeAssistant
1718
from homeassistant.exceptions import ServiceValidationError
1819
from homeassistant.setup import async_setup_component
@@ -86,6 +87,35 @@ async def test_query_service_external_db(hass: HomeAssistant, tmp_path: Path) ->
8687
}
8788

8889

90+
async def test_query_service_rollback_on_error(hass: HomeAssistant) -> None:
91+
"""Test the query service."""
92+
await async_setup_component(hass, DOMAIN, {})
93+
await hass.async_block_till_done()
94+
95+
with (
96+
patch(
97+
"homeassistant.components.sql.services.generate_lambda_stmt",
98+
return_value=generate_lambda_stmt("Faulty syntax create operational issue"),
99+
),
100+
pytest.raises(
101+
ServiceValidationError, match="An error occurred when executing the query"
102+
),
103+
patch("sqlalchemy.orm.session.Session.rollback") as mock_session_rollback,
104+
):
105+
await hass.services.async_call(
106+
DOMAIN,
107+
SERVICE_QUERY,
108+
{
109+
"query": "SELECT name, age FROM users ORDER BY age",
110+
"db_url": "sqlite:///",
111+
},
112+
blocking=True,
113+
return_response=True,
114+
)
115+
116+
mock_session_rollback.assert_called_once()
117+
118+
89119
async def test_query_service_data_conversion(
90120
hass: HomeAssistant, tmp_path: Path
91121
) -> None:

0 commit comments

Comments
 (0)