Créer un bot de support IA pour votre boutique en ligne
Bot de support en Python : code source
Python
1import pytest23from store_assistant.store import normalize, open_store45from .conftest import CATALOG678@pytest.mark.parametrize(9 ("raw", "expected"),10 [11 ("Béjaïa", "bejaia"),12 (" ORAN ", "oran"),13 ("wilaya de Sétif", "setif"),14 ("ولاية وهران", "وهران"),15 ("الْجَزَائِر", "الجزاير"),16 ("الجزاير", "الجزاير"),17 ("إلى", "الي"),18 ],19)20def test_normalize(raw: str, expected: str) -> None:21 assert normalize(raw) == expected222324@pytest.mark.parametrize("query", ["Oran", "oran", "وهران", "Wahran", "31", "wilaya d'Oran", "Wilaya de Oran"])25def test_delivery_fee_by_any_name(store, query: str) -> None:26 fee = store.delivery_fee(query)27 assert fee is not None28 assert fee["wilaya"] == "Oran"29 assert fee["home_delivery_dzd"] == 65030 assert fee["stop_desk_dzd"] == 400313233def test_delivery_fee_unknown_wilaya(store) -> None:34 assert store.delivery_fee("Tamanrasset") is None35 assert store.delivery_fee("99") is None363738def test_order_requires_matching_phone_digits(store) -> None:39 assert store.order_status("NS-10241", "4821")["status"] == "shipped"40 assert store.order_status("ns-10241", "0555 12 48 21")["status"] == "shipped"41 assert store.order_status("NS-10241", "0000") is None42 assert store.order_status("NS-10241", "") is None434445def test_order_rejects_malformed_ids(store) -> None:46 assert store.order_status("NS-1", "4821") is None47 assert store.order_status("' OR 1=1 --", "4821") is None484950def test_order_includes_product_names(store) -> None:51 order = store.order_status("NS-10242", "1937")52 assert [item["name"] for item in order["items"]] == ["Fleece hoodie", "Cotton cap"]53 assert order["total_dzd"] == 6800545556def test_search_products_with_size(store) -> None:57 results = store.search_products("sneakers", size="42")58 by_sku = {p["sku"]: p for p in results}59 assert set(by_sku) == {"SN-401", "SN-402"}60 assert by_sku["SN-401"]["requested_size_available"] is False61 assert by_sku["SN-402"]["requested_size_available"] is True62 assert "42" in by_sku["SN-401"]["sizes_out_of_stock"]636465def test_search_products_ranks_best_match_first(store) -> None:66 results = store.search_products("black hoodie")67 assert results[0]["sku"] == "HD-201"686970def test_search_products_no_match(store) -> None:71 assert store.search_products("laptop") == []727374def test_create_ticket_returns_increasing_ids(store) -> None:75 first = store.create_ticket(1, "amina", "wants to change size")76 second = store.create_ticket(2, None, "complaint")77 assert second == first + 1787980def test_open_store_seeds_once(tmp_path) -> None:81 db = tmp_path / "sub" / "store.db"82 s = open_store(db, CATALOG)83 s.create_ticket(1, None, "x")84 s.close()85 s = open_store(db, CATALOG)86 assert len(s.covered_wilayas()) == 2087 s.close()