import pytest from store_assistant.store import normalize, open_store from .conftest import CATALOG @pytest.mark.parametrize( ("raw", "expected"), [ ("Béjaïa", "bejaia"), (" ORAN ", "oran"), ("wilaya de Sétif", "setif"), ("ولاية وهران", "وهران"), ("الْجَزَائِر", "الجزاير"), ("الجزاير", "الجزاير"), ("إلى", "الي"), ], ) def test_normalize(raw: str, expected: str) -> None: assert normalize(raw) == expected @pytest.mark.parametrize("query", ["Oran", "oran", "وهران", "Wahran", "31", "wilaya d'Oran", "Wilaya de Oran"]) def test_delivery_fee_by_any_name(store, query: str) -> None: fee = store.delivery_fee(query) assert fee is not None assert fee["wilaya"] == "Oran" assert fee["home_delivery_dzd"] == 650 assert fee["stop_desk_dzd"] == 400 def test_delivery_fee_unknown_wilaya(store) -> None: assert store.delivery_fee("Tamanrasset") is None assert store.delivery_fee("99") is None def test_order_requires_matching_phone_digits(store) -> None: assert store.order_status("NS-10241", "4821")["status"] == "shipped" assert store.order_status("ns-10241", "0555 12 48 21")["status"] == "shipped" assert store.order_status("NS-10241", "0000") is None assert store.order_status("NS-10241", "") is None def test_order_rejects_malformed_ids(store) -> None: assert store.order_status("NS-1", "4821") is None assert store.order_status("' OR 1=1 --", "4821") is None def test_order_includes_product_names(store) -> None: order = store.order_status("NS-10242", "1937") assert [item["name"] for item in order["items"]] == ["Fleece hoodie", "Cotton cap"] assert order["total_dzd"] == 6800 def test_search_products_with_size(store) -> None: results = store.search_products("sneakers", size="42") by_sku = {p["sku"]: p for p in results} assert set(by_sku) == {"SN-401", "SN-402"} assert by_sku["SN-401"]["requested_size_available"] is False assert by_sku["SN-402"]["requested_size_available"] is True assert "42" in by_sku["SN-401"]["sizes_out_of_stock"] def test_search_products_ranks_best_match_first(store) -> None: results = store.search_products("black hoodie") assert results[0]["sku"] == "HD-201" def test_search_products_no_match(store) -> None: assert store.search_products("laptop") == [] def test_create_ticket_returns_increasing_ids(store) -> None: first = store.create_ticket(1, "amina", "wants to change size") second = store.create_ticket(2, None, "complaint") assert second == first + 1 def test_open_store_seeds_once(tmp_path) -> None: db = tmp_path / "sub" / "store.db" s = open_store(db, CATALOG) s.create_ticket(1, None, "x") s.close() s = open_store(db, CATALOG) assert len(s.covered_wilayas()) == 20 s.close()