Require cloud on inventory source for notification

Inventory Sources must now be a cloud type in order to associate a
notification template with it.
This commit is contained in:
Matthew Jones 2016-05-10 14:48:55 -04:00
parent 358bc31450
commit d5afbc20ac
2 changed files with 29 additions and 8 deletions

View File

@ -1998,18 +1998,20 @@ class InventorySourceNotificationTemplatesAnyList(SubListCreateAttachDetachAPIVi
parent_model = InventorySource
relationship = 'notification_templates_any'
class InventorySourceNotificationTemplatesErrorList(SubListCreateAttachDetachAPIView):
def post(self, request, *args, **kwargs):
parent = self.get_parent_object()
if parent.source not in CLOUD_INVENTORY_SOURCES:
return Response(dict(msg="Notification Templates can only be assigned when source is one of {}"
.format(CLOUD_INVENTORY_SOURCES, parent.source)),
status=status.HTTP_400_BAD_REQUEST)
return super(InventorySourceNotificationTemplatesAnyList, self).post(request, *args, **kwargs)
class InventorySourceNotificationTemplatesErrorList(InventorySourceNotificationTemplatesAnyList):
model = NotificationTemplate
serializer_class = NotificationTemplateSerializer
parent_model = InventorySource
relationship = 'notification_templates_error'
class InventorySourceNotificationTemplatesSuccessList(SubListCreateAttachDetachAPIView):
class InventorySourceNotificationTemplatesSuccessList(InventorySourceNotificationTemplatesAnyList):
model = NotificationTemplate
serializer_class = NotificationTemplateSerializer
parent_model = InventorySource
relationship = 'notification_templates_success'
class InventorySourceHostsList(SubListAPIView):

View File

@ -0,0 +1,19 @@
import pytest
from django.core.urlresolvers import reverse
@pytest.mark.django_db
def test_inventory_source_notification_on_cloud_only(get, post, group, user, notification_template):
u = user('admin', True)
g_cloud = group('cloud')
g_not = group('not_cloud')
cloud_is = g_cloud.inventory_source
not_is = g_not.inventory_source
cloud_is.source = 'ec2'
cloud_is.save()
url = reverse('api:inventory_source_notification_templates_any_list', args=(cloud_is.id,))
response = post(url, dict(id=notification_template.id), u)
assert response.status_code == 204
url = reverse('api:inventory_source_notification_templates_success_list', args=(not_is.id,))
response = post(url, dict(id=notification_template.id), u)
assert response.status_code == 400