The int value isn't very useful and the goal is to move this to an enum over time.
Signed-off-by: Andy Doan <[email protected]> --- patchwork/rest_serializers.py | 13 ++++++++++++- patchwork/tests/test_rest_api.py | 12 +++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/patchwork/rest_serializers.py b/patchwork/rest_serializers.py index 46667b0..801978c 100644 --- a/patchwork/rest_serializers.py +++ b/patchwork/rest_serializers.py @@ -21,7 +21,7 @@ import email.parser from django.core.urlresolvers import reverse -from patchwork.models import Check, Patch, Person, Project +from patchwork.models import Check, Patch, Person, Project, State from rest_framework.serializers import ( CurrentUserDefault, HiddenField, ListSerializer, ModelSerializer, @@ -61,10 +61,21 @@ class PatchSerializer(ModelSerializer): 'content', 'hash', 'msgid') mbox_url = SerializerMethodField() + def run_validation(self, data): + state = data.get('state') + if state: + for st in State.objects.all(): + if st.name == state: + data['state'] = st.id + break + return super(PatchSerializer, self).run_validation(data) + def to_representation(self, instance): request = self.context.get('request', None) data = super(PatchSerializer, self).to_representation(instance) + data['state'] = instance.state.name + data['mbox_url'] = request.build_absolute_uri(data['mbox_url']) data['project'] = request.build_absolute_uri( reverse('api_1.0:project-detail', args=[data['project']])) diff --git a/patchwork/tests/test_rest_api.py b/patchwork/tests/test_rest_api.py index 5fb4650..7ac9852 100644 --- a/patchwork/tests/test_rest_api.py +++ b/patchwork/tests/test_rest_api.py @@ -200,7 +200,7 @@ class TestPatchAPI(APITestCase): self.assertEqual(patches[0].diff, resp.data['diff']) self.assertIn(TestPersonAPI.api_url(patches[0].submitter.id), resp.data['submitter']) - self.assertEqual(patches[0].state.id, resp.data['state']) + self.assertEqual(patches[0].state.name, resp.data['state']) self.assertIn(patches[0].get_mbox_url(), resp.data['mbox_url']) def test_anonymous_writes(self): @@ -247,13 +247,19 @@ class TestPatchAPI(APITestCase): # A maintainer can update user = create_maintainer(defaults.project) self.client.force_authenticate(user=user) - resp = self.client.patch(self.api_url(patches[0].id), {'state': 2}) + resp = self.client.patch( + self.api_url(patches[0].id), {'state': 'Accepted'}) + self.assertEqual(status.HTTP_200_OK, resp.status_code) + + resp = self.client.patch( + self.api_url(patches[0].id), {'pull_url': 'foo'}) self.assertEqual(status.HTTP_200_OK, resp.status_code) # A normal user can't user = create_user() self.client.force_authenticate(user=user) - resp = self.client.patch(self.api_url(patches[0].id), {'state': 2}) + resp = self.client.patch( + self.api_url(patches[0].id), {'state': 'Accepted'}) self.assertEqual(status.HTTP_403_FORBIDDEN, resp.status_code) def test_delete(self): -- 2.7.4 _______________________________________________ Patchwork mailing list [email protected] https://lists.ozlabs.org/listinfo/patchwork
