test_user_api.py 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. from sqlalchemy.orm.exc import NoResultFound
  4. import transaction
  5. from tracim.exceptions import UserDoesNotExist, AuthenticationFailed
  6. from tracim.lib.core.user import UserApi
  7. from tracim.models import User
  8. from tracim.models.context_models import UserInContext
  9. from tracim.tests import DefaultTest
  10. from tracim.tests import eq_
  11. class TestUserApi(DefaultTest):
  12. def test_unit__create_minimal_user__ok__nominal_case(self):
  13. api = UserApi(
  14. current_user=None,
  15. session=self.session,
  16. config=self.config,
  17. )
  18. u = api.create_minimal_user('bob@bob')
  19. assert u.email == 'bob@bob'
  20. assert u.display_name == 'bob'
  21. def test_unit__create_minimal_user_and_update__ok__nominal_case(self):
  22. api = UserApi(
  23. current_user=None,
  24. session=self.session,
  25. config=self.config,
  26. )
  27. u = api.create_minimal_user('bob@bob')
  28. api.update(u, 'bob', 'bob@bob', 'pass', do_save=True)
  29. nu = api.get_one_by_email('bob@bob')
  30. assert nu is not None
  31. assert nu.email == 'bob@bob'
  32. assert nu.display_name == 'bob'
  33. assert nu.validate_password('pass')
  34. def test__unit__create__user__ok_nominal_case(self):
  35. api = UserApi(
  36. current_user=None,
  37. session=self.session,
  38. config=self.config,
  39. )
  40. u = api.create_user(
  41. email='bob@bob',
  42. password='pass',
  43. name='bob',
  44. timezone='+2',
  45. do_save=True,
  46. do_notify=False,
  47. )
  48. assert u is not None
  49. assert u.email == "bob@bob"
  50. assert u.validate_password('pass')
  51. assert u.display_name == 'bob'
  52. assert u.timezone == '+2'
  53. def test_unit__user_with_email_exists__ok__nominal_case(self):
  54. api = UserApi(
  55. current_user=None,
  56. session=self.session,
  57. config=self.config,
  58. )
  59. u = api.create_minimal_user('bibi@bibi')
  60. api.update(u, 'bibi', 'bibi@bibi', 'pass', do_save=True)
  61. transaction.commit()
  62. eq_(True, api.user_with_email_exists('bibi@bibi'))
  63. eq_(False, api.user_with_email_exists('unknown'))
  64. def test_get_one_by_email(self):
  65. api = UserApi(
  66. current_user=None,
  67. session=self.session,
  68. config=self.config,
  69. )
  70. u = api.create_minimal_user('bibi@bibi')
  71. self.session.flush()
  72. api.update(u, 'bibi', 'bibi@bibi', 'pass', do_save=True)
  73. uid = u.user_id
  74. transaction.commit()
  75. eq_(uid, api.get_one_by_email('bibi@bibi').user_id)
  76. def test_unit__get_one_by_email__err__user_does_not_exist(self):
  77. api = UserApi(
  78. current_user=None,
  79. session=self.session,
  80. config=self.config,
  81. )
  82. with pytest.raises(UserDoesNotExist):
  83. api.get_one_by_email('unknown')
  84. def test_unit__get_all__ok__nominal_case(self):
  85. api = UserApi(
  86. current_user=None,
  87. session=self.session,
  88. config=self.config,
  89. )
  90. u1 = api.create_minimal_user('bibi@bibi')
  91. users = api.get_all()
  92. # u1 + Admin user from BaseFixture
  93. assert 2 == len(users)
  94. def test_unit__get_one__ok__nominal_case(self):
  95. api = UserApi(
  96. current_user=None,
  97. session=self.session,
  98. config=self.config,
  99. )
  100. u = api.create_minimal_user('titi@titi')
  101. api.update(u, 'titi', 'titi@titi', 'pass', do_save=True)
  102. one = api.get_one(u.user_id)
  103. eq_(u.user_id, one.user_id)
  104. def test_unit__get_user_with_context__nominal_case(self):
  105. user = User(
  106. email='admin@tracim.tracim',
  107. display_name='Admin',
  108. is_active=True,
  109. )
  110. api = UserApi(
  111. current_user=None,
  112. session=self.session,
  113. config=self.config,
  114. )
  115. new_user = api.get_user_with_context(user)
  116. assert isinstance(new_user, UserInContext)
  117. assert new_user.user == user
  118. assert new_user.profile == 'nobody'
  119. assert new_user.user_id == user.user_id
  120. assert new_user.email == 'admin@tracim.tracim'
  121. assert new_user.display_name == 'Admin'
  122. assert new_user.is_active is True
  123. # TODO - G.M - 03-05-2018 - [avatar][calendar] Should test this
  124. # with true value when those param will be available.
  125. assert new_user.avatar_url is None
  126. assert new_user.calendar_url is None
  127. def test_unit__get_current_user_ok__nominal_case(self):
  128. user = User(email='admin@tracim.tracim')
  129. api = UserApi(
  130. current_user=user,
  131. session=self.session,
  132. config=self.config,
  133. )
  134. new_user = api.get_current_user()
  135. assert isinstance(new_user, User)
  136. assert user == new_user
  137. def test_unit__get_current_user__err__user_not_exist(self):
  138. api = UserApi(
  139. current_user=None,
  140. session=self.session,
  141. config=self.config,
  142. )
  143. with pytest.raises(UserDoesNotExist):
  144. api.get_current_user()
  145. def test_unit__authenticate_user___ok__nominal_case(self):
  146. api = UserApi(
  147. current_user=None,
  148. session=self.session,
  149. config=self.config,
  150. )
  151. user = api.authenticate_user('admin@admin.admin', 'admin@admin.admin')
  152. assert isinstance(user, User)
  153. assert user.email == 'admin@admin.admin'
  154. def test_unit__authenticate_user___err__wrong_password(self):
  155. api = UserApi(
  156. current_user=None,
  157. session=self.session,
  158. config=self.config,
  159. )
  160. with pytest.raises(AuthenticationFailed):
  161. api.authenticate_user('admin@admin.admin', 'wrong_password')
  162. def test_unit__authenticate_user___err__wrong_user(self):
  163. api = UserApi(
  164. current_user=None,
  165. session=self.session,
  166. config=self.config,
  167. )
  168. with pytest.raises(AuthenticationFailed):
  169. api.authenticate_user('admin@admin.admin', 'wrong_password')