@@ -692,6 +692,47 @@ async def test_session_rollback_on_error(
692692 assert mock_session_rollback .call_count == 1
693693
694694
695+ async def test_async_session_rollback_on_error (
696+ recorder_mock : Recorder ,
697+ hass : HomeAssistant ,
698+ freezer : FrozenDateTimeFactory ,
699+ caplog : pytest .LogCaptureFixture ,
700+ ) -> None :
701+ """Test the SQL sensor."""
702+ config = {CONF_DB_URL : "sqlite+aiosqlite:///" }
703+ options = {
704+ CONF_QUERY : "SELECT 5 as value" ,
705+ CONF_COLUMN_NAME : "value" ,
706+ CONF_UNIQUE_ID : "very_unique_id" ,
707+ }
708+ await init_integration (
709+ hass , title = "Select value SQL query" , config = config , options = options
710+ )
711+ platforms = async_get_platforms (hass , "sql" )
712+ sql_entity = platforms [0 ].entities ["sensor.select_value_sql_query" ]
713+
714+ state = hass .states .get ("sensor.select_value_sql_query" )
715+ assert state .state == "5"
716+ assert state .attributes ["value" ] == 5
717+
718+ with (
719+ patch .object (
720+ sql_entity ,
721+ "_lambda_stmt" ,
722+ generate_lambda_stmt ("Faulty syntax create operational issue" ),
723+ ),
724+ patch (
725+ "sqlalchemy.ext.asyncio.session.AsyncSession.rollback"
726+ ) as mock_async_session_rollback ,
727+ ):
728+ freezer .tick (timedelta (minutes = 1 ))
729+ async_fire_time_changed (hass )
730+ await hass .async_block_till_done (wait_background_tasks = True )
731+ assert "sqlite3.OperationalError" in caplog .text
732+
733+ assert mock_async_session_rollback .call_count == 1
734+
735+
695736async def test_query_recover_from_rollback (
696737 recorder_mock : Recorder ,
697738 hass : HomeAssistant ,
0 commit comments