Skip to content

Commit

Permalink
Report error on creating release component for missing release
Browse files Browse the repository at this point in the history
The ReleaseField is refactored to be based on SlugRelatedField which
provides error handling consistent with rest of the API.

There is now a test for creating a release component on a non-existing
release.

JIRA: PDC-868
  • Loading branch information
lubomir committed Aug 11, 2015
1 parent e0795d5 commit 08dbe39
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 14 deletions.
24 changes: 10 additions & 14 deletions pdc/apps/component/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
from pdc.apps.common.serializers import DynamicFieldsSerializerMixin, LabelSerializer, StrictSerializerMixin
from pdc.apps.common.fields import ChoiceSlugField
from pdc.apps.release.models import Release
from pdc.apps.release.serializers import ReleaseSerializer
from .models import (GlobalComponent,
RoleContact,
ReleaseComponent,
Expand Down Expand Up @@ -300,20 +299,17 @@ class Meta:
fields = ('id', 'name', 'parent_component', 'subcomponents')


class ReleaseField(serializers.Field):
def to_representation(self, value):
ret = {}
serializer = ReleaseSerializer(value)
ret.setdefault('release_id', serializer.data['release_id'])
ret.setdefault('active', serializer.data['active'])
return ret
class ReleaseField(serializers.SlugRelatedField):
def __init__(self, **kwargs):
super(ReleaseField, self).__init__(slug_field='release_id',
queryset=Release.objects.all(),
**kwargs)

def to_internal_value(self, data):
try:
rel = Release.objects.get(release_id=data)
except Release.DoesNotExist:
raise Exception("Release with ID %s doesn't exist" % data)
return rel
def to_representation(self, value):
return {
'release_id': value.release_id,
'active': value.active
}


class ReleaseComponentSerializer(DynamicFieldsSerializerMixin,
Expand Down
11 changes: 11 additions & 0 deletions pdc/apps/component/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -841,6 +841,17 @@ def test_create_release_component(self):
self.assertEqual(sorted(response.data), sorted(data))
self.assertNumChanges([1])

def test_create_release_component_for_non_existing_release(self):
url = reverse('releasecomponent-list')
data = {'release': 'hello-1.0',
'global_component': 'python',
'name': 'python26',
'brew_package': 'python-pdc'}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.data, {'release': ['Object with release_id=hello-1.0 does not exist.']})
self.assertNumChanges([])

def test_create_release_component_with_type(self):
url = reverse('releasecomponent-list')
data = {'release': 'release-1.0', 'global_component': 'python', 'name': 'python26',
Expand Down

0 comments on commit 08dbe39

Please sign in to comment.