From: Stephen Finucane Date: Thu, 24 Nov 2016 14:45:45 +0000 (+0000) Subject: REST: Add maintainers to '/projects' X-Git-Tag: v2.0.0-rc1~116 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d36190ac7013dd96b57915a11ecdeeee03bbcb5;p=thirdparty%2Fpatchwork.git REST: Add maintainers to '/projects' This is in the UI. Expose it in the API. Signed-off-by: Stephen Finucane Reviewed-by: Daniel Axtens --- diff --git a/patchwork/api/project.py b/patchwork/api/project.py index deaeb094..3cc2c325 100644 --- a/patchwork/api/project.py +++ b/patchwork/api/project.py @@ -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'}, } diff --git a/patchwork/tests/test_rest_api.py b/patchwork/tests/test_rest_api.py index f44a77fb..ddc787fa 100644 --- a/patchwork/tests/test_rest_api.py +++ b/patchwork/tests/test_rest_api.py @@ -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))