47 lines
2.1 KiB
Python
47 lines
2.1 KiB
Python
import unittest
|
|
|
|
from app.domain import (
|
|
classify_website,
|
|
deduplicate_businesses,
|
|
normalize_business,
|
|
normalize_domain,
|
|
score_business,
|
|
is_suppressed,
|
|
)
|
|
|
|
|
|
class DomainTests(unittest.TestCase):
|
|
def test_normalization_canonicalizes_contact_and_domain(self):
|
|
value = normalize_business({"name": " Acme ", "website": "HTTPS://WWW.Acme.co.za/path", "email": " SALES@ACME.CO.ZA "})
|
|
self.assertEqual(value["name"], "Acme")
|
|
self.assertEqual(value["website_domain"], "acme.co.za")
|
|
self.assertEqual(value["email"], "sales@acme.co.za")
|
|
|
|
def test_website_classification_is_conservative(self):
|
|
self.assertEqual(classify_website("https://acme.co.za"), "business_site")
|
|
self.assertEqual(classify_website("https://www.facebook.com/acme"), "social_profile")
|
|
self.assertEqual(classify_website(""), "missing")
|
|
|
|
def test_scoring_is_versioned_and_explains_factors(self):
|
|
result = score_business({"name": "Acme", "website_domain": "acme.co.za", "email": "a@acme.co.za", "phone": "123"})
|
|
self.assertEqual(result["score_version"], "mvp-1")
|
|
self.assertGreaterEqual(result["score"], 70)
|
|
self.assertIn("business_site", result["factors"])
|
|
|
|
def test_suppression_matches_email_domain_or_phone(self):
|
|
business = {"email": "person@example.com", "website_domain": "example.com", "phone": "+27123456789"}
|
|
self.assertTrue(is_suppressed(business, [{"kind": "domain", "value": "example.com"}]))
|
|
self.assertTrue(is_suppressed(business, [{"kind": "email", "value": "person@example.com"}]))
|
|
self.assertTrue(is_suppressed(business, [{"kind": "phone", "value": "+27123456789"}]))
|
|
self.assertFalse(is_suppressed(business, [{"kind": "email", "value": "other@example.com"}]))
|
|
|
|
def test_deduplication_prefers_richer_record(self):
|
|
rows = [{"name": "Acme", "website": "https://acme.com"}, {"name": " acme ", "website": "https://www.acme.com", "email": "a@acme.com"}]
|
|
result = deduplicate_businesses(rows)
|
|
self.assertEqual(len(result), 1)
|
|
self.assertEqual(result[0]["email"], "a@acme.com")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|