from app.off import parse_gebinde, parse_quantity def test_grams(): assert parse_quantity("500 g") == ("gram", 500) assert parse_quantity("500g") == ("gram", 500) def test_kilograms_to_grams(): assert parse_quantity("1 kg") == ("gram", 1000) assert parse_quantity("1,5 kg") == ("gram", 1500) def test_liters_to_milliliters(): assert parse_quantity("1 l") == ("milliliter", 1000) assert parse_quantity("0,5 l") == ("milliliter", 500) assert parse_quantity("33 cl") == ("milliliter", 330) assert parse_quantity("330 ml") == ("milliliter", 330) def test_unparsable_is_piece(): assert parse_quantity(None) == ("piece", None) assert parse_quantity("6 Stück") == ("piece", None) assert parse_quantity("") == ("piece", None) def test_multiplikator_wird_erkannt(): """„3 x 80 g" ist nicht dasselbe wie „240 g": drei zaehlbare Teile.""" assert parse_gebinde("3 x 80 g") == ("gram", 240.0, 3.0, 80.0) def test_multiplikator_liter(): assert parse_gebinde("6 × 1,5 l") == ("milliliter", 9000.0, 6.0, 1500.0) def test_multiplikator_mit_a_akzent(): assert parse_gebinde("4 Stück à 125 g") == ("gram", 500.0, 4.0, 125.0) def test_ohne_multiplikator_unveraendert(): assert parse_gebinde("500 g") == ("gram", 500.0, None, None) assert parse_quantity("500 g") == ("gram", 500) def test_zaehlwort_ohne_muster_bleibt_grenze(): """Bekannte Grenze: „12 Eier à 53 g" faellt auf die Einzelmenge zurueck. Das Muster kennt nur eine kurze Liste von Zaehlwoertern. Ein generisches Wort wuerde es zu weit oeffnen – lieber eine nicht erkannte Stueckzahl als eine falsch geratene. """ assert parse_gebinde("12 Eier à 53 g").stueck is None