76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
"""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()
|