"""Unit tests for price parsing utilities.""" from __future__ import annotations import pytest from market.scrape.product.helpers.price import parse_price, parse_case_size class TestParsePrice: def test_gbp(self): val, cur, raw = parse_price("£30.50") assert val == 30.5 assert cur == "GBP" def test_eur(self): val, cur, raw = parse_price("€1,234.00") assert val == 1234.0 assert cur == "EUR" def test_usd(self): val, cur, raw = parse_price("$9.99") assert val == 9.99 assert cur == "USD" def test_no_symbol(self): val, cur, raw = parse_price("42.50") assert val == 42.5 assert cur is None def test_no_match(self): val, cur, raw = parse_price("no price here") assert val is None assert cur is None def test_empty_string(self): val, cur, raw = parse_price("") assert val is None assert raw == "" def test_none_input(self): val, cur, raw = parse_price(None) assert val is None assert raw == "" def test_thousands_comma_stripped(self): val, cur, raw = parse_price("£1,000.50") assert val == 1000.5 def test_whitespace_around_symbol(self): val, cur, raw = parse_price("£ 5.00") assert val == 5.0 assert cur == "GBP" def test_raw_preserved(self): _, _, raw = parse_price(" £10.00 ") assert raw == "£10.00" class TestParseCaseSize: def test_standard(self): count, qty, unit, _ = parse_case_size("6 x 500g") assert count == 6 assert qty == 500.0 assert unit == "g" def test_no_space(self): count, qty, unit, _ = parse_case_size("12x1L") assert count == 12 assert qty == 1.0 assert unit == "L" def test_multiplication_sign(self): count, qty, unit, _ = parse_case_size("24 × 330 ml") assert count == 24 assert qty == 330.0 assert unit == "ml" def test_uppercase_x(self): count, qty, unit, _ = parse_case_size("6X500g") assert count == 6 def test_no_match(self): count, qty, unit, raw = parse_case_size("just text") assert count is None assert qty is None assert unit is None def test_empty(self): count, qty, unit, raw = parse_case_size("") assert count is None assert raw == "" def test_none_input(self): count, _, _, raw = parse_case_size(None) assert count is None assert raw == ""