drop DRF and django-filter to make django_nepkit framework‑agnostic, simplify dependencies, and align with v0.2.2 breaking change.
93 lines
3.5 KiB
Python
93 lines
3.5 KiB
Python
from django_nepkit.utils import _find_address_components, normalize_address
|
|
|
|
|
|
def test_normalize_address_empty():
|
|
assert normalize_address("") == {
|
|
"province": None,
|
|
"district": None,
|
|
"municipality": None,
|
|
}
|
|
assert normalize_address(None) == {
|
|
"province": None,
|
|
"district": None,
|
|
"municipality": None,
|
|
}
|
|
|
|
|
|
def test_normalize_address_english_basic():
|
|
# Kathmandu is a district and a municipality
|
|
result = normalize_address("Kathmandu")
|
|
assert result["district"] == "Kathmandu"
|
|
assert result["municipality"] == "Kathmandu Metropolitan City"
|
|
assert result["province"] == "Bagmati Province"
|
|
|
|
|
|
def test_normalize_address_english_full():
|
|
result = normalize_address("Pokhara, Kaski, Gandaki")
|
|
assert result["province"] == "Gandaki Province"
|
|
assert result["district"] == "Kaski"
|
|
assert result["municipality"] == "Pokhara Metropolitan City"
|
|
|
|
|
|
def test_normalize_address_nepali_basic():
|
|
result = normalize_address("काठमाडौं")
|
|
assert result["district"] == "काठमाडौं"
|
|
assert result["municipality"] == "काठमाडौँ महानगरपालिका"
|
|
assert result["province"] == "बागमती प्रदेश"
|
|
|
|
|
|
def test_normalize_address_nepali_full():
|
|
result = normalize_address("पोखरा, कास्की, गण्डकी")
|
|
assert result["province"] == "गण्डकी प्रदेश"
|
|
assert result["district"] == "कास्की"
|
|
assert result["municipality"] == "पोखरा महानगरपालिका"
|
|
|
|
|
|
def test_normalize_address_koshi_mapping():
|
|
# Test "Koshi" mapping to "Province 1" internally and then back to "Koshi Province"
|
|
result = normalize_address("Biratnagar, Koshi")
|
|
assert result["province"] == "Koshi Province"
|
|
assert result["municipality"] == "Biratnagar Metropolitan City"
|
|
|
|
result_ne = normalize_address("विराटनगर, कोशी")
|
|
assert result_ne["province"] == "कोशी प्रदेश"
|
|
assert result_ne["municipality"] == "विराटनगर महानगरपालिका"
|
|
|
|
|
|
def test_normalize_address_with_extra_info():
|
|
result = normalize_address("House No 123, Ward 4, Bharatpur, Chitwan")
|
|
assert result["district"] == "Chitawan"
|
|
assert result["municipality"] == "Bharatpur Metropolitan City"
|
|
assert result["province"] == "Bagmati Province"
|
|
|
|
|
|
def test_normalize_address_partial_tokens():
|
|
# "Lalitpur" matches both district and municipality
|
|
result = normalize_address("Lalitpur")
|
|
assert result["district"] == "Lalitpur"
|
|
assert result["municipality"] == "Lalitpur Metropolitan City"
|
|
|
|
|
|
def test_normalize_address_is_memoised():
|
|
"""Repeated calls for the same input hit the LRU cache."""
|
|
_find_address_components.cache_clear()
|
|
a = _find_address_components("Kathmandu")
|
|
info = _find_address_components.cache_info()
|
|
assert info.hits == 0
|
|
assert info.misses == 1
|
|
b = _find_address_components("Kathmandu")
|
|
info2 = _find_address_components.cache_info()
|
|
assert info2.hits == 1
|
|
assert a is b # cached tuple is the same object
|
|
|
|
|
|
def test_normalize_address_returns_fresh_dict():
|
|
"""``normalize_address`` returns a fresh dict so callers can mutate safely."""
|
|
a = normalize_address("Kathmandu")
|
|
b = normalize_address("Kathmandu")
|
|
assert a == b
|
|
assert a is not b
|
|
a["district"] = "mutated"
|
|
# The next call must not see the mutation.
|
|
assert normalize_address("Kathmandu")["district"] == "Kathmandu"
|