mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
60 lines
2.4 KiB
Python
60 lines
2.4 KiB
Python
from backend.utils.addressMatch import AddressMatch
|
|
|
|
|
|
class TestNormaliseAddress:
|
|
def test_lowercases_input(self):
|
|
assert AddressMatch.normalise_address("1 HIGH STREET") == "1 high street"
|
|
|
|
def test_expands_road_abbreviation(self):
|
|
assert AddressMatch.normalise_address("1 Moreton Rd") == "1 moreton road"
|
|
|
|
def test_expands_avenue_abbreviation(self):
|
|
assert AddressMatch.normalise_address("2 Park Ave") == "2 park avenue"
|
|
|
|
def test_removes_punctuation_keeps_slash(self):
|
|
result = AddressMatch.normalise_address("Flat 1/A, Some Road")
|
|
assert "," not in result
|
|
assert "/" in result
|
|
|
|
def test_splits_digit_letter_suffix(self):
|
|
assert "42 a" in AddressMatch.normalise_address("42a Some Road")
|
|
|
|
def test_empty_string_returns_empty(self):
|
|
assert AddressMatch.normalise_address("") == ""
|
|
|
|
def test_removes_no_prefix(self):
|
|
result = AddressMatch.normalise_address("No 5 High Street")
|
|
assert "no" not in result.split()
|
|
assert "5" in result
|
|
|
|
|
|
class TestScore:
|
|
def test_identical_address_scores_one(self):
|
|
assert AddressMatch.score("1 High Street", "1 High Street") == 1.0
|
|
|
|
def test_case_insensitive(self):
|
|
assert AddressMatch.score("1 HIGH STREET", "1 high street") == 1.0
|
|
|
|
def test_street_type_synonym_scores_one(self):
|
|
# "Rd" expands to "road" during normalisation — should be identical
|
|
assert AddressMatch.score("1 High Rd", "1 High Road") == 1.0
|
|
|
|
def test_different_building_numbers_score_zero(self):
|
|
assert AddressMatch.score("1 High Street", "2 High Street") == 0.0
|
|
|
|
def test_disjoint_number_sets_score_zero(self):
|
|
assert AddressMatch.score("1 High Street", "99 Nowhere Lane") == 0.0
|
|
|
|
def test_user_address_has_number_but_epc_does_not_scores_zero(self):
|
|
assert AddressMatch.score("1 High Street", "High Street") == 0.0
|
|
|
|
def test_partial_address_scores_above_threshold(self):
|
|
# Extra token in user address ("London") — same building number, high overlap
|
|
score = AddressMatch.score("1 High Street London", "1 High Street")
|
|
assert 0.6 <= score < 1.0
|
|
|
|
def test_flat_number_mismatch_scores_zero(self):
|
|
# User has two numbers but no "flat" token; EPC has different flat number
|
|
# Triggers the order-sensitive flat guard
|
|
score = AddressMatch.score("3 42 High Street", "Flat 7 42 High Street")
|
|
assert score == 0.0
|