diff --git a/djangoldp/permissions.py b/djangoldp/permissions.py index e61b11ae9be744f392b80fd711bf2eb229bef333..00f75d11e97aa551367d123d963735c7cd70a310 100644 --- a/djangoldp/permissions.py +++ b/djangoldp/permissions.py @@ -81,13 +81,15 @@ class AnonymousReadOnly(WACPermissions): def has_permission(self, request, view): if view.action in ['list', 'retrieve']: return True + elif view.action == 'create' and request.user.is_authenticated(): + return True else: return super().has_permission(request, view) def has_object_permission(self, request, view, obj): if view.action == "create" and request.user.is_authenticated(): return True - elif view.action == "retrieve": + elif view.action == ["list", "retrieve"]: return True elif view.action in ['update', 'partial_update', 'destroy']: if hasattr(obj._meta, 'auto_author'): diff --git a/djangoldp/tests/tests_anonymous_permissions.py b/djangoldp/tests/tests_anonymous_permissions.py index 0e7f59c28169dae87b15420eb1ebf39ce70e9f69..79db62f3b40f18e55ac48f2d74b7ad2bfa06115d 100644 --- a/djangoldp/tests/tests_anonymous_permissions.py +++ b/djangoldp/tests/tests_anonymous_permissions.py @@ -1,5 +1,6 @@ from django.contrib.auth.models import AnonymousUser -from django.test import TestCase, RequestFactory +from django.test import TestCase +from rest_framework.test import APIRequestFactory from guardian.shortcuts import get_anonymous_user @@ -7,49 +8,45 @@ from djangoldp.permissions import AnonymousReadOnly from djangoldp.tests.models import JobOffer from djangoldp.views import LDPViewSet +import json class TestAnonymousUserPermissions(TestCase): def setUp(self): - self.factory = RequestFactory() + self.factory = APIRequestFactory() self.user = get_anonymous_user() self.job = JobOffer.objects.create(title="job") - def test_get_request_with_anonymousUser(self): + def test_get_request_for_anonymousUser(self): request = self.factory.get("/job-offers/") request.user = self.user my_view = LDPViewSet.as_view({'get': 'list'}, model=JobOffer, nested_fields=["skills"], - permission_classes=(AnonymousReadOnly,)) + permission_classes=[AnonymousReadOnly]) response = my_view(request) self.assertEqual(response.status_code, 200) - def test_post_request_with_anonymousUser(self): - request = self.factory.post("/job-offers/") - request.user = self.user - my_view = LDPViewSet.as_view({'post': 'create'}, - model=JobOffer, - nested_fields=["skills"], - permission_classes=(AnonymousReadOnly,)) - response = my_view(request) + def test_post_request_for_anonymousUser(self): + data = {'title': 'new idea'} + request = self.factory.post('/job-offers/', json.dumps(data), content_type='application/ld+json') + my_view = LDPViewSet.as_view({'post': 'create'}, model=JobOffer, nested_fields=["skills"], permission_classes=[AnonymousReadOnly]) + response = my_view(request, pk=1) self.assertEqual(response.status_code, 403) - def test_put_request_with_anonymousUser(self): + def test_put_request_for_anonymousUser(self): request = self.factory.put("/job-offers/") - request.user = self.user my_view = LDPViewSet.as_view({'put': 'update'}, model=JobOffer, nested_fields=["skills"], - permission_classes=(AnonymousReadOnly,)) + permission_classes=[AnonymousReadOnly]) response = my_view(request, pk=self.job.pk) self.assertEqual(response.status_code, 403) - def test_patch_request_with_anonymousUser(self): + def test_patch_request_for_anonymousUser(self): request = self.factory.patch("/job-offers/") - request.user = self.user my_view = LDPViewSet.as_view({'patch': 'partial_update'}, model=JobOffer, nested_fields=["skills"], - permission_classes=(AnonymousReadOnly,)) + permission_classes=[AnonymousReadOnly]) response = my_view(request, pk=self.job.pk) self.assertEqual(response.status_code, 403) \ No newline at end of file diff --git a/djangoldp/tests/tests_user_permissions.py b/djangoldp/tests/tests_user_permissions.py index cbe38c43fb65b2c97c9f6f278b241ecd13a43953..9f510926f6146eb85dc3934df149cd1308f33988 100644 --- a/djangoldp/tests/tests_user_permissions.py +++ b/djangoldp/tests/tests_user_permissions.py @@ -1,47 +1,49 @@ from django.contrib.auth.models import User -from django.test import TestCase, RequestFactory +from rest_framework.test import APIRequestFactory, APIClient, APITestCase from djangoldp.permissions import AnonymousReadOnly -from djangoldp.tests.models import JobOffer +from .models import JobOffer from djangoldp.views import LDPViewSet +import json + +class TestUserPermissions(APITestCase): -class TestUserPermissions(TestCase): def setUp(self): - self.factory = RequestFactory() + self.factory = APIRequestFactory() + self.client = APIClient() self.user = User.objects.create_user(username='john', email='jlennon@beatles.com', password='glass onion') self.job = JobOffer.objects.create(title="job") def tearDown(self): self.user.delete() - def test_get_with_user(self): + def test_get_for_authenticated_user(self): request = self.factory.get('/job-offers/') request.user = self.user - my_view = LDPViewSet.as_view({'get': 'list'}, model=JobOffer, nested_fields=["skills"], - permission_classes=[AnonymousReadOnly]) - response = my_view(request) - self.assertEqual(response.status_code, 200) - - def test_post_request_with_user(self): - request = self.factory.options('/job-offers/') - request.user = self.user - my_view = LDPViewSet.as_view({'post': 'create'}, model=JobOffer, nested_fields=["skills"], - permission_classes=[AnonymousReadOnly]) + my_view = LDPViewSet.as_view({'get': 'list'}, model=JobOffer, permission_classes=[AnonymousReadOnly]) response = my_view(request) self.assertEqual(response.status_code, 200) - def test_put_request_with_user(self): - request = self.factory.options('/job-offers/' + str(self.job.pk) + "/") - request.user = self.user - my_view = LDPViewSet.as_view({'put': 'update'}, model=JobOffer, nested_fields=["skills"], - permission_classes=[AnonymousReadOnly]) - response = my_view(request, pk=self.job.pk) - self.assertEqual(response.status_code, 200) - - def test_request_patch_with_user(self): - request = self.factory.options('/job-offers/' + str(self.job.pk) + "/") + def test_post_request_for_authenticated_user(self): + data = {'title': 'new idea'} + request = self.factory.post('/job-offers/', json.dumps(data), content_type='application/ld+json') request.user = self.user - my_view = LDPViewSet.as_view({'patch': 'partial_update'}, model=JobOffer, nested_fields=["skills"]) - response = my_view(request, pk=self.job.pk) - self.assertEqual(response.status_code, 200) \ No newline at end of file + my_view = LDPViewSet.as_view({'post': 'create'}, model=JobOffer, nested_fields=["skills"], permission_classes=[AnonymousReadOnly]) + response = my_view(request, pk=1) + self.assertEqual(response.status_code, 201) + + # def test_put_request_for_authenticated_user(self): + # data = {'title':"job_updated"} + # request = self.factory.put('/job-offers/' + str(self.job.pk) + "/", data) + # request.user = self.user + # my_view = LDPViewSet.as_view({'put': 'update'}, model=JobOffer, permission_classes=[AnonymousReadOnly]) + # response = my_view(request, pk=self.job.pk) + # self.assertEqual(response.status_code, 200) + # + # def test_request_patch_for_authenticated_user(self): + # request = self.factory.patch('/job-offers/' + str(self.job.pk) + "/") + # request.user = self.user + # my_view = LDPViewSet.as_view({'patch': 'partial_update'}, model=JobOffer, permission_classes=[AnonymousReadOnly]) + # response = my_view(request, pk=self.job.pk) + # self.assertEqual(response.status_code, 200) \ No newline at end of file