Créer un bot de support IA pour votre boutique en ligne

Bot de support en Python : code source

Fichiers : 2988,4 KiBTélécharger le ZIP

tests/test_store.py

2,8 KiBBrutTélécharger
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()