Advertisement
Guest User

Untitled

a guest
Mar 12th, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. from django.contrib.auth.mixins import UserPassesTestMixin
  2.  
  3. class IsOwnerMixin(UserPassesTestMixin):
  4. """
  5. a custom mixin that checks to see if the user is the owner of the object
  6. """
  7.  
  8. def test_func(self):
  9.  
  10. # get the object
  11.  
  12. obj = self.get_object()
  13.  
  14. # if the obj.user == the logged in user they can see it otherwise boo!
  15.  
  16. if self.request.user == obj.owner:
  17. return True
  18. else:
  19. return False
  20.  
  21. class AwesomeDetail(LoginRequiredMixin, IsOwnerMixin, DetailView):
  22. """
  23. An awesome detail
  24. """
  25. model = models.Awesome
  26. template_name = "awesomeness/detail.html"
  27.  
  28. from django.test import TestCase, RequestFactory
  29. from django.test.client import Client
  30. from django.contrib.auth.models import AnonymousUser, User, Group
  31. from project.awesomness import views, models
  32.  
  33. class UrlsViewsTest(TestCase):
  34. def setUp(self):
  35. self.factory = RequestFactory()
  36. self.user = User.objects.create_user(id='1', username='name', email='email@email.com', password='top_secret')
  37. self.awesome = models.Awesome.objects.create(id='2', owner=self.user)
  38. self.not_owner = User.objects.create_user(id='3', username='trouble', email='otheremail@otheremail.com', password='top_secret')
  39.  
  40. def test_awesome_detail(self):
  41. """
  42. Test the awesome detail URL
  43. """
  44. request = self.factory.get('/awesome/2/')
  45. request.user = self.user
  46. response = views.AwesomeDetail.as_view()(request, pk=2)
  47. self.assertEqual(response.status_code, 200)
  48.  
  49. def test_awesome_not_owner(self):
  50. """
  51. Test the awesome detail with a user that is not the owner
  52. """
  53. request = self.factory.get('/awesome/2/')
  54. request.user = self.not_owner
  55. response = views.AwesomeDetail.as_view()(request, pk=2)
  56. self.assertEqual(response.status_code, 302)
  57.  
  58. def test_awesome_detail_anonymous_user(self):
  59. """
  60. Test the awesome detail with a user that is anonymous
  61. """
  62. request = self.factory.get('/awesome/2/')
  63. request.user = AnonymousUser()
  64. response = views.AwesomeDetail.as_view()(request, pk=2)
  65. self.assertEqual(response.status_code, 302)
  66.  
  67. Creating test database for alias 'default'...
  68. F..
  69. ======================================================================
  70. FAIL: test_awesome_detail (project.awesomeness.tests.UrlsViewsTest)
  71. ----------------------------------------------------------------------
  72. Traceback (most recent call last):
  73. File "/Users/dave/sandbox/project/project/awesomeness/tests.py", line 25, in test_awesome_detail
  74. self.assertEqual(response.status_code, 200)
  75. AssertionError: 302 != 200
  76.  
  77. ----------------------------------------------------------------------
  78. Ran 3 tests in 0.202s
  79.  
  80. FAILED (failures=1)
  81. Destroying test database for alias 'default'...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement