Jetzt/Topbar und Material-Routing, Pause bei Filament-Ende, Druckbericht mit Stromanteilen, Design- und Kamera-Stream-Polish; Bedarf-Alert-Spam und Platte-belegt-Bugs behoben.
49 lines
2.2 KiB
Python
49 lines
2.2 KiB
Python
"""Ops-Alerts: Dedup-Art muss zum gespeicherten Event-kind passen."""
|
|
|
|
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from grotti.daily_report import push_ops_alerts
|
|
|
|
|
|
class OpsAlertDedupeTests(unittest.TestCase):
|
|
def test_bedarf_records_matching_kind(self):
|
|
conn = MagicMock()
|
|
cfg = {"alerts": {"queue": True}}
|
|
shortfall = [{
|
|
"material_type": "PETG-CF",
|
|
"color": "#161616",
|
|
"shortfall_g": 15,
|
|
}]
|
|
with patch("grotti.daily_report.jetzt_mod.overdue_orders", return_value=[]), \
|
|
patch("grotti.daily_report.jetzt_mod.overdue_maintenance", return_value=[]), \
|
|
patch("grotti.daily_report.bedarf_mod.compute", return_value={"shortfall": shortfall}), \
|
|
patch("grotti.daily_report.store.list_printers", return_value=[]), \
|
|
patch("grotti.daily_report.store.recent_event_kind", return_value=False) as recent, \
|
|
patch("grotti.daily_report.notify.record") as record:
|
|
push_ops_alerts(conn, cfg, printers=[])
|
|
recent.assert_called_with(
|
|
conn, "bedarf:PETG-CF:#161616", "bedarf", within_s=21600,
|
|
)
|
|
record.assert_called_once()
|
|
args = record.call_args
|
|
self.assertEqual(args.args[4], "bedarf")
|
|
self.assertIn("15 g fehlen", args.args[5])
|
|
|
|
def test_bedarf_skips_when_recent(self):
|
|
conn = MagicMock()
|
|
cfg = {"alerts": {"queue": True}}
|
|
shortfall = [{"material_type": "PLA", "color": "", "shortfall_g": 10}]
|
|
with patch("grotti.daily_report.jetzt_mod.overdue_orders", return_value=[]), \
|
|
patch("grotti.daily_report.jetzt_mod.overdue_maintenance", return_value=[]), \
|
|
patch("grotti.daily_report.bedarf_mod.compute", return_value={"shortfall": shortfall}), \
|
|
patch("grotti.daily_report.store.list_printers", return_value=[]), \
|
|
patch("grotti.daily_report.store.recent_event_kind", return_value=True), \
|
|
patch("grotti.daily_report.notify.record") as record:
|
|
push_ops_alerts(conn, cfg, printers=[])
|
|
record.assert_not_called()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|