1from src.cleaning.units import parse_size, parse_price_label, unit_price23def test_sizes():4 assert parse_size("450 g").qty == 450 and parse_size("450 g").base == "g"5 assert parse_size("2 L").qty == 2000 and parse_size("2 L").base == "ml"6 assert parse_size("12 x 355 ml").qty == 12 * 3557 assert parse_size("1,36 kg").qty == 13608 assert parse_size("6 un").base == "un" and parse_size("6 un").qty == 69 assert parse_size("Vendu individuellement").base == "un"10 s = parse_size("Une barquette contient en moyenne 1250 g"); assert s.qty == 1250 and s.approx11 s = parse_size("", "Lait 2% 2 L"); assert s.qty == 2000 and s.source == "name"12 s = parse_size("1,2 - 1,5 kg"); assert abs(s.qty - 1350) < 1e-6 and s.approx13 assert parse_size("") is None and parse_size(None, None) is None1415def test_labels_and_unit_price():16 pl = parse_price_label("6,57 $ / kg"); assert pl.per_weight_unit == "kg"17 assert unit_price(6.57, None, pl) == (0.657, "100 g")18 pl = parse_price_label("2 / 5,00 $"); assert pl.multibuy_n == 2 and pl.multibuy_total == 5.019 assert unit_price(4.99, parse_size("500 g")) == (0.998, "100 g")20 assert unit_price(3.0, parse_size("6 un")) == (0.5, "un")21 assert unit_price(None, parse_size("500 g")) is None22 assert unit_price(4.99, None) is None23