import unittest from unittest.mock import patch import geo_fingerprint class DetectGeoFingerprintTests(unittest.TestCase): def test_detect_geo_fingerprint_parses_ipinfo_payload(self): payload = { "ip": "54.199.55.129", "city": "Tokyo", "country": "JP", "timezone": "Asia/Tokyo", } with patch("geo_fingerprint._query_geo_payload", return_value=payload): fp = geo_fingerprint.detect_geo_fingerprint( "http://127.0.0.1:7890", log=lambda *_: None, probe_url="https://ipinfo.io/json", ) self.assertEqual(fp.country_code, "JP") self.assertEqual(fp.locale, "ja-JP") self.assertEqual(fp.timezone_id, "Asia/Tokyo") self.assertEqual(fp.accept_language, "ja-JP,ja;q=0.9,en;q=0.5") self.assertEqual(fp.ip, "54.199.55.129") self.assertEqual(fp.city, "Tokyo") def test_detect_geo_fingerprint_parses_country_code_payload(self): payload = { "ip": "98.96.223.129", "city": "Seattle", "country_code": "US", "timezone": "America/Los_Angeles", } with patch("geo_fingerprint._query_geo_payload", return_value=payload): fp = geo_fingerprint.detect_geo_fingerprint( "http://127.0.0.1:7890", log=lambda *_: None, probe_url="https://api.ip.sb/geoip", ) self.assertEqual(fp.country_code, "US") self.assertEqual(fp.locale, "en-US") self.assertEqual(fp.timezone_id, "America/Los_Angeles") self.assertEqual(fp.accept_language, "en-US,en;q=0.9") self.assertEqual(fp.ip, "98.96.223.129") self.assertEqual(fp.city, "Seattle") if __name__ == "__main__": unittest.main()