[PATCH] REST: Filter projects by 'linkname', not 'name'
Daniel Axtens
dja at axtens.net
Mon Sep 4 01:04:12 AEST 2017
Hi Stephen,
I was just reading though this before applying it when it occurred to
me:
> except ValueError:
> - filters = {'name__iexact': ' '.join(value.split('-'))}
> + filters = {'linkname__iexact': ' '.join(value.split('-'))}
Surely a linkname shouldn't have spaces in it? It'd be of the form
foo.bar.org, right?
Happy to fix this up as:
{'linkname__iexact': value}
but thought I should probably check I haven't radically misunderstood
first!
Regards,
Daniel
>
> try:
> value = self.queryset.get(**filters)
> diff --git a/patchwork/tests/test_rest_api.py b/patchwork/tests/test_rest_api.py
> index abffd17..14e53b2 100644
> --- a/patchwork/tests/test_rest_api.py
> +++ b/patchwork/tests/test_rest_api.py
> @@ -97,7 +97,23 @@ class TestProjectAPI(APITestCase):
> self.assertEqual(status.HTTP_200_OK, resp.status_code)
> self.assertSerialized(project, resp.data)
>
> - def test_get_numeric_linkname(self):
> + def test_get_by_id(self):
> + """Validate that it's possible to filter by pk."""
> + project = create_project()
> +
> + resp = self.client.get(self.api_url(project.pk))
> + self.assertEqual(status.HTTP_200_OK, resp.status_code)
> + self.assertSerialized(project, resp.data)
> +
> + def test_get_by_linkname(self):
> + """Validate that it's possible to filter by linkname."""
> + project = create_project(linkname='project', name='Sample project')
> +
> + resp = self.client.get(self.api_url('project'))
> + self.assertEqual(status.HTTP_200_OK, resp.status_code)
> + self.assertSerialized(project, resp.data)
> +
> + def test_get_by_numeric_linkname(self):
> """Validate we try to do the right thing for numeric linkname"""
> project = create_project(linkname='12345')
>
> @@ -326,7 +342,8 @@ class TestPatchAPI(APITestCase):
> self.assertEqual(0, len(resp.data))
>
> state_obj = create_state(name='Under Review')
> - patch_obj = create_patch(state=state_obj)
> + project_obj = create_project(linkname='myproject')
> + patch_obj = create_patch(state=state_obj, project=project_obj)
>
> # anonymous user
> resp = self.client.get(self.api_url())
> @@ -338,12 +355,6 @@ class TestPatchAPI(APITestCase):
> self.assertNotIn('content', patch_rsp)
> self.assertNotIn('diff', patch_rsp)
>
> - # test filtering by state
> - resp = self.client.get(self.api_url(), {'state': 'under-review'})
> - self.assertEqual([patch_obj.id], [x['id'] for x in resp.data])
> - resp = self.client.get(self.api_url(), {'state': 'missing-state'})
> - self.assertEqual(0, len(resp.data))
> -
> # authenticated user
> user = create_user()
> self.client.force_authenticate(user=user)
> @@ -353,6 +364,18 @@ class TestPatchAPI(APITestCase):
> patch_rsp = resp.data[0]
> self.assertSerialized(patch_obj, patch_rsp)
>
> + # test filtering by state
> + resp = self.client.get(self.api_url(), {'state': 'under-review'})
> + self.assertEqual([patch_obj.id], [x['id'] for x in resp.data])
> + resp = self.client.get(self.api_url(), {'state': 'missing-state'})
> + self.assertEqual(0, len(resp.data))
> +
> + # test filtering by project
> + resp = self.client.get(self.api_url(), {'project': 'myproject'})
> + self.assertEqual([patch_obj.id], [x['id'] for x in resp.data])
> + resp = self.client.get(self.api_url(), {'project': 'invalidproject'})
> + self.assertEqual(0, len(resp.data))
> +
> def test_detail(self):
> """Validate we can get a specific patch."""
> patch = create_patch(
> --
> 2.13.5
More information about the Patchwork
mailing list