@@ -638,6 +638,53 @@ async def test_multiple_sensors_using_same_db(
638638 await hass .async_stop ()
639639
640640
641+ async def test_multiple_sensors_using_same_external_db (
642+ recorder_mock : Recorder , hass : HomeAssistant , tmp_path : Path
643+ ) -> None :
644+ """Test multiple sensors using the same external db."""
645+ db_path = tmp_path / "test.db"
646+
647+ # Create and populate the external database
648+ conn = sqlite3 .connect (db_path )
649+ conn .execute ("CREATE TABLE users (name TEXT, age INTEGER)" )
650+ conn .execute ("INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25)" )
651+ conn .commit ()
652+ conn .close ()
653+
654+ config = {CONF_DB_URL : f"sqlite:///{ db_path } " }
655+ config2 = {CONF_DB_URL : f"sqlite:///{ db_path } " }
656+ options = {
657+ CONF_QUERY : "SELECT name FROM users ORDER BY age LIMIT 1" ,
658+ CONF_COLUMN_NAME : "name" ,
659+ }
660+ options2 = {
661+ CONF_QUERY : "SELECT name FROM users ORDER BY age DESC LIMIT 1" ,
662+ CONF_COLUMN_NAME : "name" ,
663+ }
664+
665+ await init_integration (
666+ hass , title = "Select name SQL query" , config = config , options = options
667+ )
668+
669+ assert hass .data ["sql" ]
670+ assert len (hass .data ["sql" ].session_makers_by_db_url ) == 1
671+ assert hass .states .get ("sensor.select_name_sql_query" ).state == "Bob"
672+
673+ await init_integration (
674+ hass ,
675+ title = "Select name SQL query 2" ,
676+ config = config2 ,
677+ options = options2 ,
678+ entry_id = "2" ,
679+ )
680+
681+ assert len (hass .data ["sql" ].session_makers_by_db_url ) == 1
682+ assert hass .states .get ("sensor.select_name_sql_query_2" ).state == "Alice"
683+
684+ with patch ("sqlalchemy.engine.base.Engine.dispose" ):
685+ await hass .async_stop ()
686+
687+
641688async def test_engine_is_disposed_at_stop (
642689 recorder_mock : Recorder , hass : HomeAssistant
643690) -> None :
0 commit comments