runv-server

server tooling for runv.club
Log | Files | Refs | README

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()