]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
REST: Add maintainers to '/projects'
authorStephen Finucane <stephen@that.guru>
Thu, 24 Nov 2016 14:45:45 +0000 (14:45 +0000)
committerStephen Finucane <stephen@that.guru>
Fri, 23 Dec 2016 23:41:34 +0000 (23:41 +0000)
This is in the UI. Expose it in the API.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Daniel Axtens <dja@axtens.net>
patchwork/api/project.py
patchwork/tests/test_rest_api.py

index deaeb09464c8fcf544dae94baa45f12db6270a4e..3cc2c32580ade0ce2fe7e524f124b36e61930ec0 100644 (file)
@@ -22,6 +22,7 @@ from rest_framework.generics import ListAPIView
 from rest_framework.generics import RetrieveUpdateAPIView
 from rest_framework.serializers import CharField
 from rest_framework.serializers import HyperlinkedModelSerializer
+from rest_framework.serializers import HyperlinkedRelatedField
 
 from patchwork.api.base import PatchworkPermission
 from patchwork.models import Project
@@ -31,12 +32,15 @@ class ProjectSerializer(HyperlinkedModelSerializer):
     link_name = CharField(max_length=255, source='linkname')
     list_id = CharField(max_length=255, source='listid')
     list_email = CharField(max_length=200, source='listemail')
+    maintainers = HyperlinkedRelatedField(
+        many=True, read_only=True, view_name='api-user-detail',
+        source='maintainer_project')
 
     class Meta:
         model = Project
         fields = ('id', 'url', 'name', 'link_name', 'list_id', 'list_email',
-                  'web_url', 'scm_url', 'webscm_url')
-        read_only_fields = ('name',)
+                  'web_url', 'scm_url', 'webscm_url', 'maintainers')
+        read_only_fields = ('name', 'maintainers')
         extra_kwargs = {
             'url': {'view_name': 'api-project-detail'},
         }
index f44a77fb0df450685e0d3b936734b095e6a38648..ddc787fa55d97b22ff994a25795122e5f0820ca5 100644 (file)
@@ -57,11 +57,22 @@ class TestProjectAPI(APITestCase):
         self.assertEqual(project_obj.name, project_json['name'])
         self.assertEqual(project_obj.linkname, project_json['link_name'])
         self.assertEqual(project_obj.listid, project_json['list_id'])
+        self.assertEqual(len(project_json['maintainers']),
+                         project_obj.maintainer_project.all().count())
 
     def test_list(self):
         """Validate we can list the default test project."""
         project = create_project()
 
+        # anonymous user
+        resp = self.client.get(self.api_url())
+        self.assertEqual(status.HTTP_200_OK, resp.status_code)
+        self.assertEqual(1, len(resp.data))
+        self.assertSerialized(project, resp.data[0])
+
+        # maintainer
+        user = create_maintainer(project)
+        self.client.force_authenticate(user=user)
         resp = self.client.get(self.api_url())
         self.assertEqual(status.HTTP_200_OK, resp.status_code)
         self.assertEqual(1, len(resp.data))