1- from unittest .mock import patch
1+ from unittest .mock import patch , MagicMock
2+ import pandas as pd
23
3- from detective .core import get_db_type , stripped_db_url
4+ from detective .core import get_db_type , stripped_db_url , HassDatabase
45
56
67def test_get_db_type ():
@@ -26,3 +27,29 @@ def test_fetch_entities(mock_db):
2627 mock_db .fetch_entities ()
2728
2829 assert mock_db .entities == ["light.kitchen" , "light.living_room" , "switch.ac" ]
30+
31+
32+ mock_data = pd .DataFrame ({
33+ "state" : ["20.2" , "50.1" ],
34+ "last_updated_ts" : ["2025-10-01 12:00:00" , "2025-10-01 12:05:00" ],
35+ "entity_id" : ["sensor.temperature" , "sensor.humidity" ],
36+ "shared_attrs" : ["{}" , "{}" ]
37+ })
38+
39+ @patch ("sqlalchemy.create_engine" )
40+ def test_fetch_all_sensor_data (mock_create_engine ):
41+ """Test that fetch_all_sensor_data returns a Pandas DataFrame."""
42+ mock_con = MagicMock ()
43+ mock_engine = MagicMock ()
44+ mock_engine .connect .return_value = mock_con
45+ mock_create_engine .return_value = mock_engine
46+
47+ # fetch_all_sensor_data uses read_sql_query under the hood
48+ with patch ("pandas.read_sql_query" ) as mock_read_sql :
49+ mock_read_sql .return_value = mock_data
50+
51+ db = HassDatabase (url = "sqlite:///tests/test.db" , fetch_entities = False )
52+ db .con = mock_con
53+
54+ result = db .fetch_all_sensor_data ()
55+ assert isinstance (result , pd .DataFrame )
0 commit comments