test_emails.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from __future__ import absolute_import
  2. import os.path
  3. from six.moves.urllib.parse import urlencode
  4. from os.path import join, dirname
  5. from sentry.testutils import AcceptanceTestCase
  6. EMAILS = (
  7. ('/debug/mail/assigned/', 'assigned'),
  8. ('/debug/mail/assigned/self/', 'assigned self'),
  9. ('/debug/mail/note/', 'note'),
  10. ('/debug/mail/regression/', 'regression'),
  11. ('/debug/mail/regression/release/', 'regression with version'),
  12. ('/debug/mail/new-release/', 'release'),
  13. ('/debug/mail/resolved/', 'resolved'),
  14. ('/debug/mail/resolved-in-release/', 'resolved in release'),
  15. ('/debug/mail/resolved-in-release/upcoming/', 'resolved in release upcoming'),
  16. ('/debug/mail/unassigned/', 'unassigned'),
  17. ('/debug/mail/unable-to-fetch-commits/', 'unable to fetch commits'),
  18. ('/debug/mail/unable-to-delete-repo/', 'unable to delete repo'),
  19. ('/debug/mail/alert/', 'alert'),
  20. ('/debug/mail/digest/', 'digest'),
  21. ('/debug/mail/invalid-identity/', 'invalid identity'),
  22. ('/debug/mail/invitation/', 'invitation'),
  23. ('/debug/mail/report/', 'report'),
  24. ('/debug/mail/mfa-added/', 'mfa added'),
  25. ('/debug/mail/mfa-removed/', 'mfa removed'),
  26. ('/debug/mail/recovery-codes-regenerated/', 'recovery codes regenerated'),
  27. ('/debug/mail/password-changed/', 'password changed'),
  28. ('/debug/mail/sso-linked', 'sso linked'),
  29. ('/debug/mail/sso-unlinked', 'sso unlinked'),
  30. ('/debug/mail/sso-unlinked/no-password', 'sso unlinked without password'),
  31. )
  32. def read_txt_email_fixture(name):
  33. # "sso unlinked without password"
  34. # => "sso_unlinked_without_password.txt"
  35. filename = name.replace(' ', '_') + '.txt'
  36. path = join(dirname(__file__), os.pardir, 'fixtures', 'emails', filename)
  37. fixture = None
  38. with open(path, 'r') as f:
  39. fixture = f.read()
  40. return fixture
  41. class EmailTestCase(AcceptanceTestCase):
  42. def setUp(self):
  43. super(EmailTestCase, self).setUp()
  44. self.user = self.create_user('foo@example.com')
  45. self.login_as(self.user)
  46. def build_url(self, path, format='html'):
  47. return u'{}?{}'.format(
  48. path,
  49. urlencode({
  50. 'format': format,
  51. 'seed': '123',
  52. }),
  53. )
  54. def test_emails(self):
  55. for url, name in EMAILS:
  56. # HTML output is captured as a snapshot
  57. self.browser.get(self.build_url(url, 'html'))
  58. self.browser.wait_until('#preview')
  59. self.browser.snapshot(u'{} email html'.format(name))
  60. # Text output is asserted against static fixture files
  61. self.browser.get(self.build_url(url, 'txt'))
  62. self.browser.wait_until('#preview')
  63. elem = self.browser.find_element_by_css_selector('#preview pre')
  64. text_src = elem.get_attribute('innerHTML')
  65. fixture_src = read_txt_email_fixture(name)
  66. assert fixture_src == text_src