diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py index eb6170b6cbc1f2f2514b9ef45e2dd2188895f742..a9eee01c855a0c33e51c3af9db30d3f72537a9b4 100644 --- a/djangoldp/serializers.py +++ b/djangoldp/serializers.py @@ -226,6 +226,12 @@ class JsonLdField(HyperlinkedRelatedField): super().__init__(view_name, **kwargs) self.get_lookup_args() + def get_url(self, obj, view_name, request, format): + '''Overridden from DRF to shortcut on urlid-holding objects''' + if hasattr(obj, 'urlid') and obj.urlid not in (None, ''): + return obj.urlid + return super().get_url(obj, view_name, request, format) + def get_lookup_args(self): try: lookup_field = get_resolver().reverse_dict[self.view_name][0][0][1][0] diff --git a/djangoldp/tests/tests_get.py b/djangoldp/tests/tests_get.py index 5e93f212ee7411bb9e1262674a1a4c9b240f8828..96baf36e5e287d835eba632d20eea34f95f19cd9 100644 --- a/djangoldp/tests/tests_get.py +++ b/djangoldp/tests/tests_get.py @@ -1,9 +1,9 @@ from djangoldp.serializers import LDListMixin, LDPSerializer -from rest_framework.test import APIRequestFactory, APIClient, APITestCase +from django.contrib.auth import get_user_model from datetime import datetime from rest_framework.test import APIRequestFactory, APIClient, APITestCase -from djangoldp.tests.models import Post, Invoice, JobOffer, Skill, Batch, DateModel +from djangoldp.tests.models import Post, Invoice, JobOffer, Skill, Batch, DateModel, UserProfile class TestGET(APITestCase): @@ -24,6 +24,17 @@ class TestGET(APITestCase): self.assertEquals(response.data['content'], "content") self.assertIn('author', response.data) + # TODO: https://git.startinblox.com/djangoldp-packages/djangoldp/issues/293 + '''def test_get_resource_urlid(self): + user = get_user_model().objects.create_user(username='john', email='jlennon@beatles.com', + password='glass onion') + UserProfile.objects.create(user=user) + post = Post.objects.create(content="content", author=user.userprofile) + response = self.client.get('/posts/{}/'.format(post.pk), content_type='application/ld+json') + self.assertEqual(response.status_code, 200) + self.assertEquals(response.data['content'], "content") + self.assertEqual(response.data['author'], user.userprofile.urlid)''' + def test_get_container(self): Post.objects.create(content="content") # federated object - should not be returned in the container view @@ -81,7 +92,7 @@ class TestGET(APITestCase): response = self.client.get('/job-offers/{}/'.format(job.slug), content_type='application/ld+json') self.assertEqual(response.status_code, 200) self.assertIn('some_skill', response.data) - self.assertEqual(response.data['some_skill']['@id'], "http://testserver/skills/1/") + self.assertEqual(response.data['some_skill']['@id'], skill.urlid) def test_get_nested(self): invoice = Invoice.objects.create(title="invoice") diff --git a/djangoldp/tests/tests_save.py b/djangoldp/tests/tests_save.py index 7a7dbeb3b9059be91bde8ae3127c5a48a6dfa63c..92255e46536e3b3147266aa179b9a32a9153757a 100644 --- a/djangoldp/tests/tests_save.py +++ b/djangoldp/tests/tests_save.py @@ -282,8 +282,7 @@ class Save(TestCase): data=json.dumps(body), content_type='application/ld+json') self.assertEqual(response.status_code, 201) - self.assertEqual(response.data['resources']['ldp:contains'][0]['@id'], - "http://testserver/resources/{}/".format(resource.pk)) + self.assertEqual(response.data['resources']['ldp:contains'][0]['@id'], resource.urlid) self.assertEqual(response.data['title'], "new job") @@ -317,8 +316,9 @@ class Save(TestCase): data=json.dumps(body), content_type='application/ld+json') self.assertEqual(response.status_code, 201) - self.assertEqual(response.data['circle']['@id'], - "http://testserver/circles/{}/".format(circle.pk)) + self.assertEqual(response.data['circle']['@id'], "http://testserver/circles/{}/".format(circle.pk)) + # TODO: https://git.startinblox.com/djangoldp-packages/djangoldp/issues/293 + # self.assertEqual(response.data['circle']['@id'], circle.urlid) def test_nested_container_federated(self): resource = Resource.objects.create() @@ -330,8 +330,7 @@ class Save(TestCase): data=json.dumps(body), content_type='application/ld+json') self.assertEqual(response.status_code, 201) - self.assertEqual(response.data['resources']['ldp:contains'][0]['@id'], - "http://testserver/resources/{}/".format(resource.pk)) + self.assertEqual(response.data['resources']['ldp:contains'][0]['@id'], resource.urlid) self.assertEqual(response.data['@id'], "http://external.job/job/1") def test_embedded_context_2(self): @@ -388,6 +387,5 @@ class Save(TestCase): data=json.dumps(body), content_type='application/ld+json') self.assertEqual(response.status_code, 201) - self.assertEqual(response.data['projects']['ldp:contains'][0]['@id'], - "http://testserver/projects/{}/".format(project.pk)) + self.assertEqual(response.data['projects']['ldp:contains'][0]['@id'], project.urlid) self.assertEqual(response.data['@id'], "http://external.user/user/1/")