Skip to content
Snippets Groups Projects
Commit b6fade5c authored by Jean-Baptiste's avatar Jean-Baptiste
Browse files

update: No auto_author is request.user is not an User

parent 6fb90cb8
No related branches found
No related tags found
1 merge request!47Resolve "auto-author not working with anonymous users"
Pipeline #850 failed with stage
in 1 minute and 18 seconds
...@@ -68,3 +68,11 @@ class Task(models.Model): ...@@ -68,3 +68,11 @@ class Task(models.Model):
class Meta: class Meta:
serializer_fields = ['@id', 'title', 'batch'] serializer_fields = ['@id', 'title', 'batch']
class Post(Model):
content = models.CharField(max_length=255)
author = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True)
class Meta:
auto_author = 'author'
...@@ -8,6 +8,7 @@ settings.configure(DEBUG=True, ...@@ -8,6 +8,7 @@ settings.configure(DEBUG=True,
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.sqlite3',
} }
}, },
LDP_RDF_CONTEXT = 'https://cdn.happy-dev.fr/owl/hdcontext.jsonld',
ROOT_URLCONF='djangoldp.tests.urls', ROOT_URLCONF='djangoldp.tests.urls',
DJANGOLDP_PACKAGES=['djangoldp.tests'], DJANGOLDP_PACKAGES=['djangoldp.tests'],
INSTALLED_APPS=('django.contrib.auth', INSTALLED_APPS=('django.contrib.auth',
...@@ -31,6 +32,7 @@ failures = test_runner.run_tests([ ...@@ -31,6 +32,7 @@ failures = test_runner.run_tests([
'djangoldp.tests.tests_user_permissions', 'djangoldp.tests.tests_user_permissions',
'djangoldp.tests.tests_anonymous_permissions', 'djangoldp.tests.tests_anonymous_permissions',
'djangoldp.tests.tests_update', 'djangoldp.tests.tests_update',
'djangoldp.tests.tests_auto_author',
]) ])
if failures: if failures:
sys.exit(failures) sys.exit(failures)
......
...@@ -10,6 +10,7 @@ from djangoldp.views import LDPViewSet ...@@ -10,6 +10,7 @@ from djangoldp.views import LDPViewSet
import json import json
class TestAnonymousUserPermissions(TestCase): class TestAnonymousUserPermissions(TestCase):
def setUp(self): def setUp(self):
self.factory = APIRequestFactory() self.factory = APIRequestFactory()
...@@ -49,4 +50,4 @@ class TestAnonymousUserPermissions(TestCase): ...@@ -49,4 +50,4 @@ class TestAnonymousUserPermissions(TestCase):
nested_fields=["skills"], nested_fields=["skills"],
permission_classes=[AnonymousReadOnly]) permission_classes=[AnonymousReadOnly])
response = my_view(request, pk=self.job.pk) response = my_view(request, pk=self.job.pk)
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
\ No newline at end of file
import json
from django.contrib.auth.models import User
from rest_framework.test import APIRequestFactory, APIClient, APITestCase
class TestAutoAuthor(APITestCase):
def setUp(self):
self.factory = APIRequestFactory()
self.client = APIClient()
self.user = User.objects.create_user(username='john', email='jlennon@beatles.com', password='glass onion')
def tearDown(self):
self.user.delete()
def test_save_with_anonymous_user(self):
post = {
'@context': "http://owl.openinitiative.com/oicontext.jsonld",
'@graph': [{'http://happy-dev.fr/owl/#content': "post content"}]}
response = self.client.post('/posts/', data=json.dumps(post), content_type='application/ld+json')
self.assertEqual(response.status_code, 201)
self.assertNotIn('author', response.data)
self.assertEquals(response.data['content'], "post content")
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
from django.conf.urls import url, include from django.conf.urls import url, include
from django.contrib.auth.models import User
from django.core.exceptions import FieldDoesNotExist from django.core.exceptions import FieldDoesNotExist
from django.core.urlresolvers import get_resolver from django.core.urlresolvers import get_resolver
from django.db.utils import OperationalError from django.db.utils import OperationalError
...@@ -119,7 +120,7 @@ class LDPViewSet(LDPViewSetGenerator): ...@@ -119,7 +120,7 @@ class LDPViewSet(LDPViewSetGenerator):
return type(LDPSerializer)(model_name + 'Serializer', (LDPSerializer,), {'Meta': meta_class}) return type(LDPSerializer)(model_name + 'Serializer', (LDPSerializer,), {'Meta': meta_class})
def perform_create(self, serializer, **kwargs): def perform_create(self, serializer, **kwargs):
if hasattr(self.model._meta, 'auto_author'): if hasattr(self.model._meta, 'auto_author') and isinstance(self.request.user, User):
kwargs[self.model._meta.auto_author] = self.request.user kwargs[self.model._meta.auto_author] = self.request.user
serializer.save(**kwargs) serializer.save(**kwargs)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment