diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 12d1d364567..75eef5a599f 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -5,7 +5,10 @@ from builtins import object from django import forms +from django.utils.translation import ugettext_lazy as _ + from readthedocs.payments.forms import StripeModelForm, StripeResourceMixin +from readthedocs.projects.models import Project from .models import LEVEL_CHOICES, GoldUser @@ -88,6 +91,14 @@ def __init__(self, *args, **kwargs): self.projects = kwargs.pop('projects', None) super(GoldProjectForm, self).__init__(*args, **kwargs) + def clean_project(self): + project_slug = self.cleaned_data.get('project', '') + project_instance = Project.objects.filter(slug=project_slug) + if not project_instance.exists(): + raise forms.ValidationError(_('No project found.')) + else: + return project_slug + def clean(self): cleaned_data = super(GoldProjectForm, self).clean() if self.projects.count() < self.user.num_supported_projects: diff --git a/readthedocs/rtd_tests/tests/test_gold.py b/readthedocs/rtd_tests/tests/test_gold.py index 41703f0c182..e0f5c1581aa 100644 --- a/readthedocs/rtd_tests/tests/test_gold.py +++ b/readthedocs/rtd_tests/tests/test_gold.py @@ -26,6 +26,13 @@ def test_adding_projects(self): self.assertEqual(self.golduser.projects.count(), 1) self.assertEqual(resp.status_code, 302) + def test_incorrect_input_when_adding_projects(self): + self.assertEqual(self.golduser.projects.count(), 0) + incorrect_slug = 'xyz-random-incorrect-slug-xyz' + self.assertEqual(Project.objects.filter(slug=incorrect_slug).count(), 0) + resp = self.client.post(reverse('gold_projects'), data={'project': incorrect_slug}) + self.assertFormError(resp, form='form', field='project', errors='No project found.') + def test_too_many_projects(self): self.project2 = get(Project, slug='test2')