Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions packages/helpermodules/measurement_logging/write_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,18 @@ def save_log():

entries = content["entries"]
entries.append(new_entry)
content["names"] = get_names(content["entries"][-1], sh_log_data.sh_names)
content["colors"] = get_colors(content["entries"][-1])
existing_names = content.get("names")
if not isinstance(existing_names, dict):
existing_names = {}
new_names = get_names(content["entries"][-1], sh_log_data.sh_names)
existing_names.update(new_names)
content["names"] = existing_names
existing_colors = content.get("colors")
if not isinstance(existing_colors, dict):
existing_colors = {}
new_colors = get_colors(content["entries"][-1])
existing_colors.update(new_colors)
Comment on lines +171 to +177
content["colors"] = existing_colors
write_and_check(filepath, content)
return content["entries"]
except Exception:
Expand Down Expand Up @@ -384,7 +394,7 @@ def get_names(elements: Dict, sh_names: Dict, valid_names: Optional[Dict] = None
Dictionary mit allen gültigen Namen, die in der Konfiguration hinterlegt sind.
Ist None, wenn die Namen aus data ermittelt werden sollen.
"""
names = sh_names
names = dict(sh_names) if isinstance(sh_names, dict) else {}
for group in elements.items():
if group[0] not in ("bat", "consumer", "counter", "cp", "pv", "ev", "sh"):
continue
Expand Down
40 changes: 40 additions & 0 deletions packages/helpermodules/measurement_logging/write_log_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from unittest.mock import Mock
import json

from helpermodules.measurement_logging import write_log
from helpermodules.measurement_logging.write_log import get_names
Expand Down Expand Up @@ -121,3 +122,42 @@ def test_fix_values_missing_components():
'pv': {'all': {'exported': 3269}, 'pv1': {'exported': 0}},
'sh': {},
'timestamp': 1709109001}


def test_save_log_keeps_existing_names_and_colors_when_writing_new_entry(monkeypatch):
# setup
existing_content = {
"entries": [{"timestamp": 1, "cp": {"cp1": {"imported": 1, "exported": 0}}}],
"names": {"cp1": "Bestehender Ladepunkt"},
"colors": {"cp1": "#111111"},
}
mocked_file = Mock()
mocked_file.__enter__ = Mock(return_value=mocked_file)
mocked_file.__exit__ = Mock(return_value=None)
mocked_file.read = Mock(return_value=json.dumps(existing_content))
monkeypatch.setattr("builtins.open", Mock(return_value=mocked_file))
monkeypatch.setattr(write_log.timecheck, "create_timestamp_YYYYMMDD", Mock(return_value="20261002"))
monkeypatch.setattr(write_log, "get_previous_entry", Mock(return_value=existing_content["entries"][-1]))
monkeypatch.setattr(write_log, "LegacySmartHomeLogData", Mock(return_value=Mock(sh_names={}, sh_dict={})))

new_entry = {"timestamp": 2, "cp": {"cp2": {"imported": 2, "exported": 0}}}
monkeypatch.setattr(write_log, "create_entry", Mock(return_value=new_entry))
monkeypatch.setattr(write_log, "get_names", Mock(
return_value={"cp1": "Bestehender Ladepunkt", "cp2": "Neuer Ladepunkt"}))
monkeypatch.setattr(write_log, "get_colors", Mock(return_value={"cp1": "#111111", "cp2": "#222222"}))
write_and_check_mock = Mock()
monkeypatch.setattr(write_log, "write_and_check", write_and_check_mock)

# execution
write_log.save_log()

# evaluation
written_content = write_and_check_mock.call_args.args[1]
assert written_content["names"] == {
"cp1": "Bestehender Ladepunkt",
"cp2": "Neuer Ladepunkt",
}
assert written_content["colors"] == {
"cp1": "#111111",
"cp2": "#222222",
}
Loading