diff --git a/airmozilla/manage/forms.py b/airmozilla/manage/forms.py index 2cfcf6bd..95a5ef68 100644 --- a/airmozilla/manage/forms.py +++ b/airmozilla/manage/forms.py @@ -439,16 +439,23 @@ class Meta: def __init__(self, *args, **kwargs): super(SurveyEditForm, self).__init__(*args, **kwargs) + self.fields['active'].validators.append(self.validate_active) self.fields['events'].required = False self.fields['events'].queryset = ( self.fields['events'].queryset.order_by('title') ) + def validate_active(self, value): + if value and not self.instance.question_set.count(): + raise forms.ValidationError( + "Survey must have at least one question in order to be active" + ) + class SurveyNewForm(BaseModelForm): class Meta: model = Survey - fields = ('name', 'active') + fields = ('name', ) class LocationEditForm(BaseModelForm): diff --git a/airmozilla/manage/tests/views/test_surveys.py b/airmozilla/manage/tests/views/test_surveys.py index 44df7260..ed205359 100644 --- a/airmozilla/manage/tests/views/test_surveys.py +++ b/airmozilla/manage/tests/views/test_surveys.py @@ -120,6 +120,19 @@ def test_edit_survey(self): response = self.client.get(url) eq_(response.status_code, 200) ok_('value="Name"' in response.content) + # check for error trying to activate with no questions + response = self.client.post(url, { + 'active': True + }) + eq_(response.status_code, 200) + ok_("Survey must have at least one question in order to be active" + in response.content + ) + # add a question and check for successful activation + Question.objects.create( + survey=survey, + question={}, + ) response = self.client.post(url, { 'name': 'New Name', 'active': True