From d42a03db13e15e5bebfc5d2d2f4926e07f484c68 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste <bleme@pm.me>
Date: Tue, 17 Sep 2019 16:09:57 +0200
Subject: [PATCH] update: fix @id on custom container views

---
 djangoldp/serializers.py         | 3 ++-
 djangoldp/tests/tests_sources.py | 6 ++++++
 djangoldp/tests/tests_temp.py    | 4 ++++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index 1d7a2720..8fbd6f2d 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -241,7 +241,6 @@ class JsonLdIdentityField(JsonLdField):
             return super().get_attribute(instance)
 
 
-
 class LDPSerializer(HyperlinkedModelSerializer):
     url_field_name = "@id"
     serializer_related_field = JsonLdRelatedField
@@ -461,6 +460,8 @@ class LDPSerializer(HyperlinkedModelSerializer):
         serializer = ContainerSerializer(*args, **kwargs)
         if 'context' in kwargs and getattr(kwargs['context']['view'], 'nested_field', None) is not None:
             serializer.id = '{}{}/'.format(serializer.id, kwargs['context']['view'].nested_field)
+        elif 'context' in kwargs:
+            serializer.id = '{}{}'.format(settings.BASE_URL, kwargs['context']['view'].request.path)
         return serializer
 
     def to_internal_value(self, data):
diff --git a/djangoldp/tests/tests_sources.py b/djangoldp/tests/tests_sources.py
index e43f3e94..94b58df8 100644
--- a/djangoldp/tests/tests_sources.py
+++ b/djangoldp/tests/tests_sources.py
@@ -16,3 +16,9 @@ class TestSource(APITestCase):
         source = LDPSource.objects.create(federation="source_name", urlid="http://bar.foo/")
         response = self.client.get('/sources/{}/'.format(source.federation), content_type='application/ld+json')
         self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.data['@id'], 'http://happy-dev.fr/sources/source_name/')
+
+    def test_get_empty_resource(self):
+        response = self.client.get('/sources/{}/'.format('unknown'), content_type='application/ld+json')
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(response.data['@id'], 'http://happy-dev.fr/sources/unknown/')
diff --git a/djangoldp/tests/tests_temp.py b/djangoldp/tests/tests_temp.py
index ef7792a2..db29aaf1 100644
--- a/djangoldp/tests/tests_temp.py
+++ b/djangoldp/tests/tests_temp.py
@@ -2,6 +2,9 @@ from django.contrib.auth.models import User
 from django.test import TestCase
 from rest_framework.test import APIRequestFactory, APIClient
 
+from djangoldp.models import LDPSource
+
+
 class TestTemp(TestCase):
 
     def setUp(self):
@@ -12,3 +15,4 @@ class TestTemp(TestCase):
 
     def tearDown(self):
         pass
+
-- 
GitLab