您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

test_sendgrid_client.py 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from unittest.mock import MagicMock, patch
  2. import pytest
  3. from python_http_client.exceptions import UnauthorizedError
  4. from libs.sendgrid import SendGridClient
  5. def _mail(to: str = "user@example.com") -> dict:
  6. return {"to": to, "subject": "Hi", "html": "<b>Hi</b>"}
  7. @patch("libs.sendgrid.sendgrid.SendGridAPIClient")
  8. def test_sendgrid_success(mock_client_cls: MagicMock):
  9. mock_client = MagicMock()
  10. mock_client_cls.return_value = mock_client
  11. # nested attribute access: client.mail.send.post
  12. mock_client.client.mail.send.post.return_value = MagicMock(status_code=202, body=b"", headers={})
  13. sg = SendGridClient(sendgrid_api_key="key", _from="noreply@example.com")
  14. sg.send(_mail())
  15. mock_client_cls.assert_called_once()
  16. mock_client.client.mail.send.post.assert_called_once()
  17. @patch("libs.sendgrid.sendgrid.SendGridAPIClient")
  18. def test_sendgrid_missing_to_raises(mock_client_cls: MagicMock):
  19. sg = SendGridClient(sendgrid_api_key="key", _from="noreply@example.com")
  20. with pytest.raises(ValueError):
  21. sg.send(_mail(to=""))
  22. @patch("libs.sendgrid.sendgrid.SendGridAPIClient")
  23. def test_sendgrid_auth_errors_reraise(mock_client_cls: MagicMock):
  24. mock_client = MagicMock()
  25. mock_client_cls.return_value = mock_client
  26. mock_client.client.mail.send.post.side_effect = UnauthorizedError(401, "Unauthorized", b"{}", {})
  27. sg = SendGridClient(sendgrid_api_key="key", _from="noreply@example.com")
  28. with pytest.raises(UnauthorizedError):
  29. sg.send(_mail())
  30. @patch("libs.sendgrid.sendgrid.SendGridAPIClient")
  31. def test_sendgrid_timeout_reraise(mock_client_cls: MagicMock):
  32. mock_client = MagicMock()
  33. mock_client_cls.return_value = mock_client
  34. mock_client.client.mail.send.post.side_effect = TimeoutError("timeout")
  35. sg = SendGridClient(sendgrid_api_key="key", _from="noreply@example.com")
  36. with pytest.raises(TimeoutError):
  37. sg.send(_mail())