PageRenderTime 28ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/server/test/unit/server/webservices/views/test_users.py

https://github.com/alexxa/pulp
Python | 173 lines | 118 code | 19 blank | 36 comment | 6 complexity | e3019e5ac47d7e36783f5885de388890 MD5 | raw file
Possible License(s): GPL-2.0
  1. """
  2. This module contains tests for the pulp.server.webservices.views.users module.
  3. """
  4. import json
  5. import unittest
  6. import mock
  7. from base import (assert_auth_CREATE, assert_auth_DELETE, assert_auth_READ, assert_auth_UPDATE)
  8. from pulp.server.exceptions import InvalidValue, MissingValue
  9. from pulp.server.db import model
  10. from pulp.server.webservices.views import serializers, util
  11. from pulp.server.webservices.views.users import (UserResourceView, UserSearchView, UsersView)
  12. class TestUserSearchView(unittest.TestCase):
  13. """
  14. Assert correct configuration of the UserSearchView class.
  15. """
  16. def test_class_attributes(self):
  17. """
  18. Assert that the class attributes are set correctly.
  19. """
  20. self.assertEqual(UserSearchView.response_builder,
  21. util.generate_json_response_with_pulp_encoder)
  22. self.assertEqual(UserSearchView.model, model.User)
  23. self.assertEqual(UserSearchView.model.SERIALIZER, serializers.User)
  24. class TestUsersView(unittest.TestCase):
  25. """
  26. Test userss view.
  27. """
  28. @mock.patch('pulp.server.webservices.views.decorators._verify_auth',
  29. new=assert_auth_READ())
  30. @mock.patch('pulp.server.webservices.views.users.generate_json_response_with_pulp_encoder')
  31. @mock.patch('pulp.server.webservices.views.users.model.User')
  32. def test_get_users(self, mock_model, mock_resp):
  33. """
  34. Test users retrieval.
  35. """
  36. request = mock.MagicMock()
  37. view = UsersView()
  38. response = view.get(request)
  39. mock_model.SERIALIZER.assert_called_once_with(mock_model.objects.return_value,
  40. multiple=True)
  41. mock_resp.assert_called_once_with(mock_model.SERIALIZER.return_value.data)
  42. self.assertTrue(response is mock_resp.return_value)
  43. @mock.patch('pulp.server.webservices.views.decorators._verify_auth',
  44. new=assert_auth_CREATE())
  45. def test_create_missing_login(self):
  46. """
  47. Test user creation with missing login.
  48. """
  49. request = mock.MagicMock()
  50. request.body = json.dumps({'name': 'test-user'})
  51. user = UsersView()
  52. try:
  53. response = user.post(request)
  54. except MissingValue, response:
  55. pass
  56. else:
  57. raise AssertionError("MissingValue should be raised with missing options")
  58. self.assertEqual(response.http_status_code, 400)
  59. self.assertEqual(response.error_data['property_names'], ['login'])
  60. @mock.patch('pulp.server.webservices.views.decorators._verify_auth',
  61. new=assert_auth_CREATE())
  62. def test_create_invalid_param(self):
  63. """
  64. Test user creation with invalid param.
  65. """
  66. request = mock.MagicMock()
  67. request.body = json.dumps({'login': 'test-user', 'password': '11111',
  68. 'invalid_param': 'invalid'})
  69. user = UsersView()
  70. try:
  71. response = user.post(request)
  72. except InvalidValue, response:
  73. pass
  74. else:
  75. raise AssertionError("InvalidValue should be raised with invalid options")
  76. self.assertEqual(response.http_status_code, 400)
  77. self.assertEqual(response.error_data['property_names'], ['invalid_param'])
  78. @mock.patch('pulp.server.webservices.views.decorators._verify_auth',
  79. new=assert_auth_CREATE())
  80. @mock.patch('pulp.server.webservices.views.users.generate_redirect_response')
  81. @mock.patch('pulp.server.webservices.views.users.generate_json_response_with_pulp_encoder')
  82. @mock.patch('pulp.server.webservices.views.users.factory')
  83. @mock.patch('pulp.server.webservices.views.users.model.User')
  84. @mock.patch('pulp.server.webservices.views.users.user_controller')
  85. def test_create_user(self, mock_ctrl, mock_model, mock_factory, mock_resp, mock_redirect):
  86. """
  87. Test user creation.
  88. """
  89. request = mock.MagicMock()
  90. request.body = json.dumps({'login': 'test-user', 'name': 'test-user', 'password': '111'})
  91. mock_model.SERIALIZER.return_value.data = {'_id': 'copy to id', '_href': 'mock/path'}
  92. user = UsersView()
  93. response = user.post(request)
  94. mock_ctrl.create_user.assert_called_once_with('test-user', password='111', name='test-user')
  95. mock_model.SERIALIZER.assert_called_once_with(mock_ctrl.create_user.return_value)
  96. mock_auto_perm = mock_factory.permission_manager().grant_automatic_permissions_for_resource
  97. mock_auto_perm.assert_called_once_with('mock/path')
  98. mock_resp.assert_called_once_with({'id': 'copy to id', '_href': 'mock/path',
  99. '_id': 'copy to id'})
  100. mock_redirect.assert_called_once_with(mock_resp.return_value, 'mock/path')
  101. self.assertTrue(response is mock_redirect.return_value)
  102. class TestUserResourceView(unittest.TestCase):
  103. """
  104. Test user resource view.
  105. """
  106. @mock.patch('pulp.server.webservices.views.decorators._verify_auth',
  107. new=assert_auth_READ())
  108. @mock.patch('pulp.server.webservices.views.users.generate_json_response_with_pulp_encoder')
  109. @mock.patch('pulp.server.webservices.views.users.model.User')
  110. def test_get_single_user(self, mock_model, mock_resp):
  111. """
  112. Test single user retrieval.
  113. """
  114. request = mock.MagicMock()
  115. user = UserResourceView()
  116. response = user.get(request, 'test-user')
  117. mock_model.objects.get_or_404.assert_called_once_with(login='test-user')
  118. mock_resp.assert_called_once_with(mock_model.SERIALIZER.return_value.data)
  119. self.assertTrue(response is mock_resp.return_value)
  120. @mock.patch('pulp.server.webservices.views.decorators._verify_auth',
  121. new=assert_auth_DELETE())
  122. @mock.patch('pulp.server.webservices.views.users.reverse')
  123. @mock.patch('pulp.server.webservices.views.users.Permission.get_collection')
  124. @mock.patch('pulp.server.webservices.views.users.generate_json_response')
  125. @mock.patch('pulp.server.webservices.views.users.user_controller')
  126. def test_delete_single_user(self, mock_ctrl, mock_resp, mock_perm, mock_rev):
  127. """
  128. Test user deletion.
  129. """
  130. mock_perm().find_one.return_value = 'some'
  131. request = mock.MagicMock()
  132. user = UserResourceView()
  133. response = user.delete(request, 'test-user')
  134. mock_ctrl.delete_user.assert_called_once_with('test-user')
  135. mock_resp.assert_called_once_with()
  136. mock_perm().remove.assert_called_once_with({'resource': mock_rev.return_value})
  137. self.assertTrue(response is mock_resp.return_value)
  138. @mock.patch('pulp.server.webservices.views.decorators._verify_auth',
  139. new=assert_auth_UPDATE())
  140. @mock.patch('pulp.server.webservices.views.users.generate_json_response_with_pulp_encoder')
  141. @mock.patch('pulp.server.webservices.views.users.model.User')
  142. @mock.patch('pulp.server.webservices.views.users.user_controller')
  143. def test_update_user(self, mock_ctrl, mock_model, mock_resp):
  144. """
  145. Test user update
  146. """
  147. request = mock.MagicMock()
  148. request.body = json.dumps({'delta': {'name': 'some-user'}})
  149. user = UserResourceView()
  150. response = user.put(request, 'test-user')
  151. mock_ctrl.update_user.assert_called_once_with('test-user', {'name': 'some-user'})
  152. mock_model.SERIALIZER.assert_called_once_with(mock_ctrl.update_user.return_value)
  153. mock_resp.assert_called_once_with(mock_model.SERIALIZER.return_value.data)
  154. self.assertTrue(response is mock_resp.return_value)