示例#1
0
def test_match_postcode_only():
    filter = ResultFilter()
    place_infos = {
        "names": ["Niort"],
        "postcodes": ["79000"],
        "place_type": "admin",
    }
    assert filter.check("79000", **place_infos)
    assert not filter.check("79", **place_infos)
示例#2
0
def test_match_postcode_by_prefix():
    filter = ResultFilter()
    place_infos = {
        "names": ["Niort"],
        "postcodes": ["79000"],
        "place_type": "admin",
    }
    assert filter.check("Niort 79", **place_infos)
    # At least 2 chars must match
    assert not filter.check("Niort 7", **place_infos)
示例#3
0
def test_min_matching_words():
    filter = ResultFilter(min_matching_words=3)

    place_infos = {
        "names": ["5 rue Gustave Zédé", "5, Zédéstraße"],
        "postcodes": ["79000"],
        "place_type": "house",
    }

    assert filter.check("5 rue Gustave Eiffel", **place_infos)
    assert not filter.check("5 rue Paul Dupont", **place_infos)
示例#4
0
def test_empty_names():
    filter = ResultFilter()
    place_infos = {
        "names": [".", "Niort"],
        "postcodes": ["12345"],
        "place_type": "admin",
    }
    assert filter.check("Niort", **place_infos)
示例#5
0
def test_match_word_prefix():
    filter = ResultFilter(match_word_prefix=True)

    place_infos = {
        "names": ["5 rue Gustave Zédé", "5, Zédéstraße"],
        "postcodes": ["79000"],
        "place_type": "house",
    }

    assert filter.check("5 rue Gust Zédé", **place_infos)
示例#6
0
def test_filter():
    filter = ResultFilter()

    place_infos = {
        "names": ["5 rue Gustave Zédé", "5, Zédéstraße"],
        "postcodes": ["79000"],
        "place_type": "house",
    }

    # Case is ignored
    assert filter.check("5 RuE gustave ZÉDÉ", **place_infos)

    # Extra terms are not allowed
    assert not filter.check("5 rue gustave zédé restaurant", **place_infos)

    # Numbers must match
    assert not filter.check("1 rue gustave zédé", **place_infos)
    assert not filter.check("5 rue gustave zédé 75015", **place_infos)

    # Accents can be omitted
    assert filter.check("5 rue gustave zede", **place_infos)

    # Accents in the request still matter
    assert not filter.check("5 rue güstâve zédé", **place_infos)

    # A single spelling mistake is allowed per word
    assert filter.check("5 ruee gustaev zde", **place_infos)
    assert not filter.check("5 rueee gusteav ze", **place_infos)
    assert not filter.check("5 rue gusteav zede", **place_infos)
    assert not filter.check("5 rue gusta zede", **place_infos)

    # Dashes are ignored
    assert filter.check("5 rue gustave--zede", **place_infos)

    # Bis/Ter/... are ignored in the query
    assert filter.check("5 Bis rue gustave zede", **place_infos)
    assert filter.check("5Ter rue gustave zede", **place_infos)

    # Support some abreviations
    assert filter.check("5 r gustave zédé", **place_infos)
    assert not filter.check("5 u gustave zédé", **place_infos)

    # Either names can match
    assert filter.check("5 zédéstraße", **place_infos)

    # Queries that match a small part of the request are ignored, postcode and
    # admins matter in relevant matching words.
    assert not filter.check("101 dalmatiens",
                            names=["101 rue des dalmatiens"],
                            place_type="address")

    assert filter.check(
        query="Paris 2e",
        names=["2e Arrondissement"],
        admins=["Paris"],
        postcodes=["75002"],
        place_type="admin",
    )