PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/solace/tests/core_views.py

https://bitbucket.org/plurk/solace/
Python | 126 lines | 97 code | 14 blank | 15 comment | 3 complexity | a7c8acc074b0a2249941a0eb62bf3985 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. # -*- coding: utf-8 -*-
  2. """
  3. solace.tests.core_views
  4. ~~~~~~~~~~~~~~~~~~~~~~~
  5. Test the kb views.
  6. :copyright: (c) 2009 by Plurk Inc., see AUTHORS for more details.
  7. :license: BSD, see LICENSE for more details.
  8. """
  9. import re
  10. import unittest
  11. from solace.tests import SolaceTestCase
  12. from solace import models, settings
  13. from solace.database import session
  14. _link_re = re.compile(r'http://\S+')
  15. class CoreViewsTestCase(SolaceTestCase):
  16. def test_login(self):
  17. """Logging a user in"""
  18. models.User('THE_USER', 'the.user@example.com', 'default')
  19. session.commit()
  20. response = self.client.get('/en/')
  21. self.assert_('THE_USER' not in response.data)
  22. self.login('THE_USER', 'default')
  23. response = self.client.get('/en/')
  24. self.assert_('THE_USER' in response.data)
  25. def test_logout(self):
  26. """Logging a user out"""
  27. models.User('THE_USER', 'the.user@example.com', 'default')
  28. session.commit()
  29. self.login('THE_USER', 'default')
  30. self.logout()
  31. response = self.client.get('/en/')
  32. self.assert_('THE_USER' not in response.data)
  33. def test_register_without_confirm(self):
  34. """Registering a user without mail confirmation"""
  35. settings.REGISTRATION_REQUIRES_ACTIVATION = False
  36. settings.RECAPTCHA_ENABLE = False
  37. self.submit_form('/register', {
  38. 'username': 'A_USER',
  39. 'password': 'default',
  40. 'password_repeat': 'default',
  41. 'email': 'a.user@example.com'
  42. })
  43. self.login('A_USER', 'default')
  44. response = self.client.get('/en/')
  45. self.assert_('A_USER' in response.data)
  46. user = models.User.query.filter_by(username='A_USER').first()
  47. self.assertEqual(user.email, 'a.user@example.com')
  48. self.assertEqual(user.is_active, True)
  49. def test_register_with_confirm(self):
  50. """Registering a user with mail confirmation"""
  51. settings.REGISTRATION_REQUIRES_ACTIVATION = True
  52. settings.RECAPTCHA_ENABLE = False
  53. self.submit_form('/register', {
  54. 'username': 'A_USER',
  55. 'password': 'default',
  56. 'password_repeat': 'default',
  57. 'email': 'a.user@example.com'
  58. })
  59. response = self.login('A_USER', 'default')
  60. self.assert_('not yet activated' in response.data)
  61. mails = self.get_mails()
  62. self.assert_(mails)
  63. for link in _link_re.findall(mails[0].get_payload()):
  64. if 'activate' in link:
  65. self.client.get('/' + link.split('/', 3)[-1])
  66. break
  67. else:
  68. self.assert_(False, 'Did not find activation link')
  69. self.login('A_USER', 'default')
  70. response = self.client.get('/en/')
  71. self.assert_('A_USER' in response.data)
  72. user = models.User.query.filter_by(username='A_USER').first()
  73. self.assertEqual(user.email, 'a.user@example.com')
  74. self.assertEqual(user.is_active, True)
  75. def test_reset_password(self):
  76. """Reset password."""
  77. settings.RECAPTCHA_ENABLE = False
  78. user = models.User('A_USER', 'a.user@example.com', 'default')
  79. session.commit()
  80. self.submit_form('/_reset_password', {
  81. 'username': 'A_USER',
  82. 'email': ''
  83. })
  84. mails = self.get_mails()
  85. self.assert_(mails)
  86. for link in _link_re.findall(mails[0].get_payload()):
  87. if 'reset_password' in link:
  88. response = self.client.get('/' + link.split('/', 3)[-1])
  89. break
  90. else:
  91. self.assert_(False, 'Did not find password reset link')
  92. match = re.compile(r'password was reset to <code>(.*?)</code>') \
  93. .search(response.data)
  94. self.assert_(match)
  95. self.login('A_USER', match.group(1))
  96. response = self.client.get('/en/')
  97. self.assert_('A_USER' in response.data)
  98. def suite():
  99. suite = unittest.TestSuite()
  100. suite.addTest(unittest.makeSuite(CoreViewsTestCase))
  101. return suite
  102. if __name__ == '__main__':
  103. unittest.main(defaultTest='suite')