SPB Git forge

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

232commits 1branches 0releases
172.9 MBsize
maindefault branch
2 days agolast push
HTML 98.9% Python 0.6%
3.0 KB · 88 lines python
Raw Blame History
1# -----------------------------------------------------------------------------2# Lou-Ka — Agrégateur de logements à louer (province de Québec)3# Auteur : Simon-Pierre Boucher — contact@spboucher.ai4# test_search.py : /api/search — la recherche unifiée liste + carte.5#   Règle d'or : total == len(points), quelles que soient les contraintes.6# -----------------------------------------------------------------------------7import pytest8from fastapi.testclient import TestClient91011@pytest.fixture(scope="module")12def client():13    from louka import web14    return TestClient(web.app)151617def _get(client, **params):18    r = client.get("/api/search", params=params)19    assert r.status_code == 200, r.text20    return r.json()212223def test_regle_dor_total_egale_points(client):24    d = _get(client, page_size=5)25    assert d["total"] == len(d["points"])26    assert len(d["listings"]) <= 527    # points triés comme la liste : le 1er point est la 1re annonce28    if d["listings"]:29        assert d["points"][0][0] == d["listings"][0]["uid"]303132def test_bbox_restreint_et_conserve_egalite(client):33    tout = _get(client, page_size=1)34    zone = _get(client, bbox="-71.45,46.70,-71.10,46.92", page_size=1)35    assert zone["total"] <= tout["total"]36    assert zone["total"] == len(zone["points"])37    for _uid, lng, lat, _p, _v in zone["points"]:38        assert -71.45 <= lng <= -71.10 and 46.70 <= lat <= 46.92394041def test_polygone_sous_ensemble_de_son_emprise(client):42    poly = "-71.24,46.80;-71.20,46.82;-71.24,46.83"43    dedans = _get(client, poly=poly, page_size=1)44    emprise = _get(client, bbox="-71.24,46.80,-71.20,46.83", page_size=1)45    assert dedans["total"] == len(dedans["points"])46    assert dedans["total"] <= emprise["total"]474849def test_polygone_invalide(client):50    r = client.get("/api/search", params={"poly": "abc"})51    assert r.status_code == 40052    r = client.get("/api/search", params={"poly": "-71,46;-71.2,46.2"})53    assert r.status_code == 400  # 2 sommets545556def test_tris(client):57    asc = _get(client, sort="prix", page_size=10,58               bbox="-71.45,46.70,-71.10,46.92")59    prix = [p[3] for p in asc["points"] if p[3] is not None]60    assert prix == sorted(prix)61    desc = _get(client, sort="prix_desc", page_size=10,62                bbox="-71.45,46.70,-71.10,46.92")63    prix_d = [p[3] for p in desc["points"] if p[3] is not None]64    assert prix_d == sorted(prix_d, reverse=True)656667def test_tri_inconnu(client):68    r = client.get("/api/search", params={"sort": "alea"})69    assert r.status_code == 400707172def test_page_ramenee_dans_les_bornes(client):73    d = _get(client, page=99999, page_size=50,74             bbox="-71.45,46.70,-71.10,46.92")75    assert d["page"] == max(1, -(-d["total"] // 50))767778def test_include_liste_sans_points(client):79    d = _get(client, include="liste", page_size=5)80    assert d["points"] is None81    assert d["total"] > 0 or d["listings"] == []828384def test_filtre_deal_et_verdicts(client):85    d = _get(client, deal="sous", page_size=5)86    assert d["total"] == len(d["points"])87    assert all(p[4] == "s" for p in d["points"])88