test_mailgun_client.py (2556B)
1 #!/usr/bin/env python3 2 """Testes unitários — cliente Mailgun (stdlib).""" 3 4 from __future__ import annotations 5 6 import unittest 7 8 from lib.mailgun_client import ( # type: ignore 9 MailgunConfigError, 10 build_mailgun_messages_url, 11 mailgun_base_url, 12 mask_secret, 13 validate_mailgun_inputs, 14 validate_mailgun_send_fields, 15 ) 16 17 18 class TestMailgunBaseUrl(unittest.TestCase): 19 def test_us(self) -> None: 20 self.assertEqual(mailgun_base_url("us"), "https://api.mailgun.net") 21 22 def test_eu(self) -> None: 23 self.assertEqual(mailgun_base_url("eu"), "https://api.eu.mailgun.net") 24 25 def test_region_case_insensitive(self) -> None: 26 self.assertEqual(mailgun_base_url("EU"), "https://api.eu.mailgun.net") 27 28 def test_invalid_region(self) -> None: 29 with self.assertRaises(MailgunConfigError): 30 mailgun_base_url("ap") 31 32 33 class TestBuildMessagesUrl(unittest.TestCase): 34 def test_build(self) -> None: 35 u = build_mailgun_messages_url( 36 base_url="https://api.mailgun.net", 37 domain="mg.example.com", 38 ) 39 self.assertEqual(u, "https://api.mailgun.net/v3/mg.example.com/messages") 40 41 42 class TestMaskSecret(unittest.TestCase): 43 def test_none(self) -> None: 44 self.assertIn("não definido", mask_secret(None)) 45 46 def test_short(self) -> None: 47 self.assertEqual(mask_secret("ab"), "***") 48 49 def test_long(self) -> None: 50 m = mask_secret("key-abcdefghijklmnopqrstuvwxyz") 51 self.assertNotIn("abcdefghijklmnopqrstuvwxyz", m) 52 self.assertTrue(m.startswith("key")) 53 54 55 class TestValidate(unittest.TestCase): 56 def test_send_fields_ok(self) -> None: 57 r = validate_mailgun_send_fields( 58 domain="mg.example.com", 59 region="us", 60 from_addr="hi@example.com", 61 api_key="secret", 62 ) 63 self.assertEqual(r["domain"], "mg.example.com") 64 65 def test_empty_domain(self) -> None: 66 with self.assertRaises(MailgunConfigError): 67 validate_mailgun_send_fields( 68 domain="", 69 region="us", 70 from_addr="a@b.co", 71 api_key="k", 72 ) 73 74 def test_full_inputs_admin(self) -> None: 75 r = validate_mailgun_inputs( 76 domain="example.com", 77 region="eu", 78 from_addr="from@example.com", 79 admin_email="admin@example.com", 80 api_key="x", 81 ) 82 self.assertEqual(r["admin_email"], "admin@example.com") 83 84 85 if __name__ == "__main__": 86 unittest.main()