aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <stephen@that.guru>2018-04-17 09:37:44 +0100
committerStephen Finucane <stephen@that.guru>2018-04-22 20:34:06 +0100
commit0dba20950cec5ec5efdcd5e90b8437a962dbbeb8 (patch)
treee64c546c92a7ab480fa8d976fde19c68aa15ddc7
parent3586ba08ad06c7663804716ec19d8f9ab2ac8fcc (diff)
downloadpatchwork-0dba20950cec5ec5efdcd5e90b8437a962dbbeb8.tar
patchwork-0dba20950cec5ec5efdcd5e90b8437a962dbbeb8.tar.gz
tests: Replace incorrect tests
In commit 683792d1, the 'test_api.py' was split into multiple 'api/test_xyz.py' files. As part of this change, the tests for cover letter were mistakenly included in place of tests for checks. Correct this oversight. Signed-off-by: Stephen Finucane <stephen@that.guru> Reported-by: Veronika Kabatova <vkabatov@redhat.com> Acked-by: Veronika Kabatova <vkabatov@redhat.com> Fixes: 683792d1 ("tests: Split 'test_rest_api'")
-rw-r--r--patchwork/tests/api/test_check.py145
1 files changed, 84 insertions, 61 deletions
diff --git a/patchwork/tests/api/test_check.py b/patchwork/tests/api/test_check.py
index 6e3d68b..43181af 100644
--- a/patchwork/tests/api/test_check.py
+++ b/patchwork/tests/api/test_check.py
@@ -22,9 +22,10 @@ import unittest
from django.conf import settings
from patchwork.compat import reverse
-from patchwork.tests.utils import create_cover
+from patchwork.models import Check
+from patchwork.tests.utils import create_check
+from patchwork.tests.utils import create_patch
from patchwork.tests.utils import create_maintainer
-from patchwork.tests.utils import create_person
from patchwork.tests.utils import create_project
from patchwork.tests.utils import create_user
@@ -38,84 +39,106 @@ else:
@unittest.skipUnless(settings.ENABLE_REST_API, 'requires ENABLE_REST_API')
-class TestCoverLetterAPI(APITestCase):
+class TestCheckAPI(APITestCase):
fixtures = ['default_tags']
- @staticmethod
- def api_url(item=None):
+ def api_url(self, item=None):
if item is None:
- return reverse('api-cover-list')
- return reverse('api-cover-detail', args=[item])
-
- def assertSerialized(self, cover_obj, cover_json):
- self.assertEqual(cover_obj.id, cover_json['id'])
- self.assertEqual(cover_obj.name, cover_json['name'])
- self.assertIn(cover_obj.get_mbox_url(), cover_json['mbox'])
-
- # nested fields
-
- self.assertEqual(cover_obj.submitter.id,
- cover_json['submitter']['id'])
+ return reverse('api-check-list', args=[self.patch.id])
+ return reverse('api-check-detail', kwargs={
+ 'patch_id': self.patch.id, 'check_id': item.id})
+
+ def setUp(self):
+ super(TestCheckAPI, self).setUp()
+ project = create_project()
+ self.user = create_maintainer(project)
+ self.patch = create_patch(project=project)
+
+ def _create_check(self):
+ values = {
+ 'patch': self.patch,
+ 'user': self.user,
+ }
+ return create_check(**values)
+
+ def assertSerialized(self, check_obj, check_json):
+ self.assertEqual(check_obj.id, check_json['id'])
+ self.assertEqual(check_obj.get_state_display(), check_json['state'])
+ self.assertEqual(check_obj.target_url, check_json['target_url'])
+ self.assertEqual(check_obj.context, check_json['context'])
+ self.assertEqual(check_obj.description, check_json['description'])
def test_list(self):
- """Validate we can list cover letters."""
+ """Validate we can list checks on a patch."""
resp = self.client.get(self.api_url())
self.assertEqual(status.HTTP_200_OK, resp.status_code)
self.assertEqual(0, len(resp.data))
- person_obj = create_person(email='test@example.com')
- project_obj = create_project(linkname='myproject')
- cover_obj = create_cover(project=project_obj, submitter=person_obj)
+ check_obj = self._create_check()
- # 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(cover_obj, resp.data[0])
-
- # authenticated user
- user = create_user()
- 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))
- self.assertSerialized(cover_obj, resp.data[0])
-
- # test filtering by project
- resp = self.client.get(self.api_url(), {'project': 'myproject'})
- self.assertEqual([cover_obj.id], [x['id'] for x in resp.data])
- resp = self.client.get(self.api_url(), {'project': 'invalidproject'})
- self.assertEqual(0, len(resp.data))
-
- # test filtering by submitter, both ID and email
- resp = self.client.get(self.api_url(), {'submitter': person_obj.id})
- self.assertEqual([cover_obj.id], [x['id'] for x in resp.data])
- resp = self.client.get(self.api_url(), {
- 'submitter': 'test@example.com'})
- self.assertEqual([cover_obj.id], [x['id'] for x in resp.data])
- resp = self.client.get(self.api_url(), {
- 'submitter': 'test@example.org'})
+ self.assertSerialized(check_obj, resp.data[0])
+
+ # test filtering by owner, both ID and username
+ resp = self.client.get(self.api_url(), {'user': self.user.id})
+ self.assertEqual([check_obj.id], [x['id'] for x in resp.data])
+ resp = self.client.get(self.api_url(), {'user': self.user.username})
+ self.assertEqual([check_obj.id], [x['id'] for x in resp.data])
+ resp = self.client.get(self.api_url(), {'user': 'otheruser'})
self.assertEqual(0, len(resp.data))
def test_detail(self):
- """Validate we can get a specific cover letter."""
- cover_obj = create_cover()
-
- resp = self.client.get(self.api_url(cover_obj.id))
+ """Validate we can get a specific check."""
+ check = self._create_check()
+ resp = self.client.get(self.api_url(check))
self.assertEqual(status.HTTP_200_OK, resp.status_code)
- self.assertSerialized(cover_obj, resp.data)
+ self.assertSerialized(check, resp.data)
+
+ def test_create(self):
+ """Ensure creations can be performed by user of patch."""
+ check = {
+ 'state': 'success',
+ 'target_url': 'http://t.co',
+ 'description': 'description',
+ 'context': 'context',
+ }
+
+ self.client.force_authenticate(user=self.user)
+ resp = self.client.post(self.api_url(), check)
+ self.assertEqual(status.HTTP_201_CREATED, resp.status_code)
+ self.assertEqual(1, Check.objects.all().count())
+ self.assertSerialized(Check.objects.first(), resp.data)
- def test_create_update_delete(self):
- user = create_maintainer()
- user.is_superuser = True
- user.save()
+ user = create_user()
self.client.force_authenticate(user=user)
-
- resp = self.client.post(self.api_url(), {'name': 'test cover'})
- self.assertEqual(status.HTTP_405_METHOD_NOT_ALLOWED, resp.status_code)
-
- resp = self.client.patch(self.api_url(), {'name': 'test cover'})
+ resp = self.client.post(self.api_url(), check)
+ self.assertEqual(status.HTTP_403_FORBIDDEN, resp.status_code)
+
+ def test_create_invalid(self):
+ """Ensure we handle invalid check states."""
+ check = {
+ 'state': 'this-is-not-a-valid-state',
+ 'target_url': 'http://t.co',
+ 'description': 'description',
+ 'context': 'context',
+ }
+
+ self.client.force_authenticate(user=self.user)
+ resp = self.client.post(self.api_url(), check)
+ self.assertEqual(status.HTTP_400_BAD_REQUEST, resp.status_code)
+ self.assertEqual(0, Check.objects.all().count())
+
+ def test_update_delete(self):
+ """Ensure updates and deletes aren't allowed"""
+ check = self._create_check()
+ self.user.is_superuser = True
+ self.user.save()
+ self.client.force_authenticate(user=self.user)
+
+ resp = self.client.patch(self.api_url(check), {'target_url': 'fail'})
self.assertEqual(status.HTTP_405_METHOD_NOT_ALLOWED, resp.status_code)
- resp = self.client.delete(self.api_url())
+ resp = self.client.delete(self.api_url(check))
self.assertEqual(status.HTTP_405_METHOD_NOT_ALLOWED, resp.status_code)