Skip to content

Commit 233e684

Browse files
daxtensstephenfin
authored andcommitted
REST: A check must specify a state
The Ozlabs crew noticed that a check without a state caused a KeyError in data['state']. Mark state as mandatory, check for it, and add a test. NOTE(daxtens): Swagger changes are excluded from the backport Reported-by: Russell Currey <ruscur@russell.cc> Reported-by: Jeremy Kerr <jk@ozlabs.org> Signed-off-by: Daniel Axtens <dja@axtens.net> (cherry picked from commit 7a20ccd)
1 parent d963655 commit 233e684

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

patchwork/api/check.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from rest_framework.serializers import CurrentUserDefault
2727
from rest_framework.serializers import HiddenField
2828
from rest_framework.serializers import HyperlinkedModelSerializer
29+
from rest_framework.serializers import ValidationError
2930

3031
from patchwork.api.base import CheckHyperlinkedIdentityField
3132
from patchwork.api.base import MultipleFieldLookupMixin
@@ -50,6 +51,9 @@ class CheckSerializer(HyperlinkedModelSerializer):
5051
user = UserSerializer(default=CurrentUserDefault())
5152

5253
def run_validation(self, data):
54+
if 'state' not in data or data['state'] == '':
55+
raise ValidationError({'state': ["A check must have a state."]})
56+
5357
for val, label in Check.STATE_CHOICES:
5458
if label != data['state']:
5559
continue

patchwork/tests/api/test_check.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,22 @@ def test_create_invalid_state(self):
147147
self.assertEqual(status.HTTP_400_BAD_REQUEST, resp.status_code)
148148
self.assertEqual(0, Check.objects.all().count())
149149

150+
def test_create_missing_state(self):
151+
"""Create a check using invalid values.
152+
153+
Ensure we handle the state being absent.
154+
"""
155+
check = {
156+
'target_url': 'http://t.co',
157+
'description': 'description',
158+
'context': 'context',
159+
}
160+
161+
self.client.force_authenticate(user=self.user)
162+
resp = self.client.post(self.api_url(), check)
163+
self.assertEqual(status.HTTP_400_BAD_REQUEST, resp.status_code)
164+
self.assertEqual(0, Check.objects.all().count())
165+
150166
def test_create_invalid_patch(self):
151167
"""Ensure we handle non-existent patches."""
152168
check = {

0 commit comments

Comments
 (0)