1
0

test_models.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from redmail.models import EmailAddress, Error
  2. import pytest
  3. @pytest.mark.parametrize("addr,expected",
  4. [
  5. pytest.param('info@company.com', {'first_name': None, 'last_name': None, 'full_name': 'Info', 'organization': 'Company', 'top_level_domain': '.com'}, id="Not personal"),
  6. pytest.param('first.last@company.com', {'first_name': "First", 'last_name': "Last", 'full_name': 'First Last', 'organization': 'Company', 'top_level_domain': '.com'}, id="Personal"),
  7. pytest.param('no-reply@en.company.com', {'first_name': None, 'last_name': None, 'full_name': 'No-reply', 'organization': 'Company', 'top_level_domain': '.com'}, id="Multi-domain-part"),
  8. ]
  9. )
  10. def test_address(addr, expected):
  11. address = EmailAddress(addr)
  12. assert expected['first_name'] == address.first_name
  13. assert expected['last_name'] == address.last_name
  14. assert expected['full_name'] == address.full_name
  15. assert expected['organization'] == address.organization
  16. assert expected['top_level_domain'] == address.top_level_domain
  17. assert str(address) == addr
  18. @pytest.mark.parametrize("exc_as", ['current stack', 'passed exception'])
  19. @pytest.mark.parametrize("cont_type,starts,ends",
  20. [
  21. pytest.param(
  22. 'text',
  23. 'Traceback (most recent call last):\n File "',
  24. '\n raise RuntimeError("deliberate error")\n\nRuntimeError: deliberate error',
  25. id="text"
  26. ),
  27. pytest.param(
  28. 'html',
  29. '<div class="error">\n <h4 class="header">Traceback (most recent call last):</h4>\n <pre class="traceback"><code> File &quot;',
  30. '\n raise RuntimeError(&quot;deliberate error&quot;)</code></pre>\n <div class="exception">\n <span class="exception-type">RuntimeError</span>: <span class="exception-value">deliberate error</span>\n </div>\n </div>',
  31. id="html"
  32. ),
  33. pytest.param(
  34. 'html-inline',
  35. '\n <div>\n <h4>Traceback (most recent call last):</h4>\n <pre><code> File &quot;',
  36. '\nraise RuntimeError(&quot;deliberate error&quot;)</code></pre>\n <span style="color: red; font-weight: bold">deliberate error</span>: <span>RuntimeError</span>\n </div>',
  37. id="html-inline"
  38. ),
  39. ]
  40. )
  41. def test_error(cont_type, starts, ends, exc_as):
  42. try:
  43. raise RuntimeError("deliberate error")
  44. except RuntimeError as exc:
  45. if exc_as == 'current stack':
  46. err = Error(content_type=cont_type)
  47. exc_type = err.exception_type
  48. exc_value = err.exception_value
  49. tb = err.traceback
  50. string = str(err)
  51. assert bool(err)
  52. e = exc
  53. if exc_as == 'passed exception':
  54. err = Error(content_type=cont_type, exception=e)
  55. exc_type = err.exception_type
  56. exc_value = err.exception_value
  57. tb = err.traceback
  58. string = str(err)
  59. assert bool(err)
  60. assert exc_type == 'RuntimeError'
  61. assert exc_value == 'deliberate error'
  62. assert len(tb) == 1
  63. assert tb[0].startswith(' File "')
  64. assert tb[0].endswith(', in test_error\n raise RuntimeError("deliberate error")\n')
  65. assert string.startswith(starts)
  66. assert string.endswith(ends)
  67. def test_error_no_error():
  68. err = Error()
  69. assert err.exception_type is None
  70. assert err.exception_value is None
  71. assert err.traceback is None
  72. assert not bool(err)
  73. def test_error_invalid_type():
  74. err = Error("Not existing")
  75. with pytest.raises(ValueError):
  76. str(err)