"""Ist-Gramm und Spulenanteile ohne Datenbank.""" import unittest from pathlib import Path import sys ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT)) from grotti import usage class ResolveUsedTests(unittest.TestCase): def test_measured_from_mm(self): grams, source = usage.resolve_used_grams(100, 500, 1000, 0, "cancelled", 60) self.assertAlmostEqual(grams, 50) self.assertEqual(source, "measured") def test_abort_before_extrude(self): grams, source = usage.resolve_used_grams(100, 0, 1000, 0, "cancelled", 5) self.assertEqual(grams, 0) self.assertEqual(source, "none") def test_abort_progress_estimate(self): grams, source = usage.resolve_used_grams(100, 0, 0, 0.25, "cancelled", 120) self.assertAlmostEqual(grams, 25) self.assertEqual(source, "estimate") def test_completed_keeps_planned_without_mm(self): grams, source = usage.resolve_used_grams(80, 0, 0, 1, "completed", 3600) self.assertAlmostEqual(grams, 80) self.assertEqual(source, "estimate") def test_overshoot_no_cap(self): grams, source = usage.resolve_used_grams(100, 1200, 1000, 1, "completed", 3600) self.assertAlmostEqual(grams, 120) self.assertEqual(source, "measured") class SplitTests(unittest.TestCase): def test_single_is_measured(self): parts, estimate = usage.split_used(50, [100], multi=False) self.assertEqual(parts, [50]) self.assertFalse(estimate) def test_multi_is_estimate(self): parts, estimate = usage.split_used(90, [30, 60], multi=True) self.assertAlmostEqual(parts[0], 30) self.assertAlmostEqual(parts[1], 60) self.assertTrue(estimate) class SegmentTests(unittest.TestCase): def test_deltas(self): segs = [ {"spool_id": 1, "ace_slot": None, "mm_start": 0, "mm_end": 400}, {"spool_id": 2, "ace_slot": None, "mm_start": 400, "mm_end": None}, ] deltas = usage.segment_deltas(segs, 1000) self.assertEqual(deltas[0], (1, None, 400)) self.assertEqual(deltas[1], (2, None, 600)) def test_grams_from_mm(self): self.assertAlmostEqual(usage.grams_from_mm(250, 1000, 80), 20) class WeightListTests(unittest.TestCase): def test_list_and_sum(self): meta = {"filament_weight_total": [10, 20, 5]} self.assertEqual(usage.weight_list(meta), [10, 20, 5]) self.assertEqual(usage.weight_sum(meta), 35) if __name__ == "__main__": unittest.main()