From 92e514256ab42848bb7dff62e5b89d9b72ba3147 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Thu, 4 Oct 2018 13:12:11 +0530 Subject: [PATCH 01/16] Fix the form for adding a project for gold members --- readthedocs/gold/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/gold/views.py b/readthedocs/gold/views.py index 29826ce7044..e25eacbcb4f 100644 --- a/readthedocs/gold/views.py +++ b/readthedocs/gold/views.py @@ -106,7 +106,7 @@ def projects(request): form = GoldProjectForm( data=request.POST, user=gold_user, projects=gold_projects) if form.is_valid(): - to_add = Project.objects.get(slug=form.cleaned_data['project']) + to_add = Project.objects.get(name=form.cleaned_data['project']) gold_user.projects.add(to_add) return HttpResponseRedirect(reverse('gold_projects')) else: From 33048cba8a07b26f8c99b3820a31a4ab695f82a6 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Thu, 4 Oct 2018 13:12:46 +0530 Subject: [PATCH 02/16] Fix the tests for Gold Members --- readthedocs/rtd_tests/tests/test_gold.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/readthedocs/rtd_tests/tests/test_gold.py b/readthedocs/rtd_tests/tests/test_gold.py index 41703f0c182..61934598f56 100644 --- a/readthedocs/rtd_tests/tests/test_gold.py +++ b/readthedocs/rtd_tests/tests/test_gold.py @@ -14,7 +14,7 @@ class GoldViewTests(TestCase): def setUp(self): self.user = create_user(username='owner', password='test') - self.project = get(Project, slug='test') + self.project = get(Project, name='test', slug="project-test-slug") self.golduser = get(GoldUser, user=self.user, level=LEVEL_CHOICES[0][0]) @@ -27,13 +27,13 @@ def test_adding_projects(self): self.assertEqual(resp.status_code, 302) def test_too_many_projects(self): - self.project2 = get(Project, slug='test2') + self.project2 = get(Project, name='test2') self.assertEqual(self.golduser.projects.count(), 0) - resp = self.client.post(reverse('gold_projects'), data={'project': self.project.slug}) + resp = self.client.post(reverse('gold_projects'), data={'project': self.project.name}) self.assertEqual(self.golduser.projects.count(), 1) self.assertEqual(resp.status_code, 302) - resp = self.client.post(reverse('gold_projects'), data={'project': self.project2.slug}) + resp = self.client.post(reverse('gold_projects'), data={'project': self.project2.name}) self.assertFormError( resp, form='form', field=None, errors='You already have the max number of supported projects.' ) @@ -42,7 +42,7 @@ def test_too_many_projects(self): def test_remove_project(self): self.assertEqual(self.golduser.projects.count(), 0) - self.client.post(reverse('gold_projects'), data={'project': self.project.slug}) + self.client.post(reverse('gold_projects'), data={'project': self.project.name}) self.assertEqual(self.golduser.projects.count(), 1) self.client.post( From 0a542dd5860724ca466cf744b1621fa87d64e81b Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Fri, 5 Oct 2018 01:30:03 +0530 Subject: [PATCH 03/16] Reverting back the views and tests. --- readthedocs/gold/views.py | 2 +- readthedocs/rtd_tests/tests/test_gold.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/readthedocs/gold/views.py b/readthedocs/gold/views.py index e25eacbcb4f..29826ce7044 100644 --- a/readthedocs/gold/views.py +++ b/readthedocs/gold/views.py @@ -106,7 +106,7 @@ def projects(request): form = GoldProjectForm( data=request.POST, user=gold_user, projects=gold_projects) if form.is_valid(): - to_add = Project.objects.get(name=form.cleaned_data['project']) + to_add = Project.objects.get(slug=form.cleaned_data['project']) gold_user.projects.add(to_add) return HttpResponseRedirect(reverse('gold_projects')) else: diff --git a/readthedocs/rtd_tests/tests/test_gold.py b/readthedocs/rtd_tests/tests/test_gold.py index 61934598f56..41703f0c182 100644 --- a/readthedocs/rtd_tests/tests/test_gold.py +++ b/readthedocs/rtd_tests/tests/test_gold.py @@ -14,7 +14,7 @@ class GoldViewTests(TestCase): def setUp(self): self.user = create_user(username='owner', password='test') - self.project = get(Project, name='test', slug="project-test-slug") + self.project = get(Project, slug='test') self.golduser = get(GoldUser, user=self.user, level=LEVEL_CHOICES[0][0]) @@ -27,13 +27,13 @@ def test_adding_projects(self): self.assertEqual(resp.status_code, 302) def test_too_many_projects(self): - self.project2 = get(Project, name='test2') + self.project2 = get(Project, slug='test2') self.assertEqual(self.golduser.projects.count(), 0) - resp = self.client.post(reverse('gold_projects'), data={'project': self.project.name}) + resp = self.client.post(reverse('gold_projects'), data={'project': self.project.slug}) self.assertEqual(self.golduser.projects.count(), 1) self.assertEqual(resp.status_code, 302) - resp = self.client.post(reverse('gold_projects'), data={'project': self.project2.name}) + resp = self.client.post(reverse('gold_projects'), data={'project': self.project2.slug}) self.assertFormError( resp, form='form', field=None, errors='You already have the max number of supported projects.' ) @@ -42,7 +42,7 @@ def test_too_many_projects(self): def test_remove_project(self): self.assertEqual(self.golduser.projects.count(), 0) - self.client.post(reverse('gold_projects'), data={'project': self.project.name}) + self.client.post(reverse('gold_projects'), data={'project': self.project.slug}) self.assertEqual(self.golduser.projects.count(), 1) self.client.post( From f6005937ad1538f29a003bdb6319056b88f940ad Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Fri, 5 Oct 2018 01:43:56 +0530 Subject: [PATCH 04/16] Fix the GoldProjectForm to accept the project's slug --- readthedocs/gold/forms.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 12d1d364567..657ee833cc1 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -6,6 +6,7 @@ from django import forms from readthedocs.payments.forms import StripeModelForm, StripeResourceMixin +from readthedocs.projects.models import Project from .models import LEVEL_CHOICES, GoldUser @@ -90,7 +91,14 @@ def __init__(self, *args, **kwargs): def clean(self): cleaned_data = super(GoldProjectForm, self).clean() + project_slug = cleaned_data.get('project', "") if self.projects.count() < self.user.num_supported_projects: - return cleaned_data + # Checking if the project with the entered slug + # is present in the database or not + if Project.objects.filter(slug=project_slug).exists(): + return cleaned_data + elif project_slug: + self.add_error(None, f'Project with the slug "{project_slug}" not found.') + else: + self.add_error(None, 'You already have the max number of supported projects.') - self.add_error(None, 'You already have the max number of supported projects.') From 662c2cae294908e4ce50a8c1b1e7f7d4bcd34778 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Fri, 5 Oct 2018 01:53:54 +0530 Subject: [PATCH 05/16] Remove the f-string to support python2.7 --- readthedocs/gold/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 657ee833cc1..764df4e6eb1 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -98,7 +98,7 @@ def clean(self): if Project.objects.filter(slug=project_slug).exists(): return cleaned_data elif project_slug: - self.add_error(None, f'Project with the slug "{project_slug}" not found.') + self.add_error(None, "No project found.") else: self.add_error(None, 'You already have the max number of supported projects.') From 1c3139518243b36a9d11106dae764406ac7ee32e Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Fri, 5 Oct 2018 19:45:17 +0530 Subject: [PATCH 06/16] Remove extra line at the end of the forms.py --- readthedocs/gold/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 764df4e6eb1..6a7715506f9 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -101,4 +101,4 @@ def clean(self): self.add_error(None, "No project found.") else: self.add_error(None, 'You already have the max number of supported projects.') - + \ No newline at end of file From 0b0e939b8237107f0cd453210c320952af1a8f4b Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Fri, 5 Oct 2018 20:58:19 +0530 Subject: [PATCH 07/16] Add test for wrong input for the form for gold members to add projects. --- readthedocs/rtd_tests/tests/test_gold.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/readthedocs/rtd_tests/tests/test_gold.py b/readthedocs/rtd_tests/tests/test_gold.py index 41703f0c182..f02a5ac3cdb 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) + resp = self.client.post(reverse('gold_projects'), data={'project': 'random-incorrect-slug'}) + self.assertFormError( + resp, form='form', field=None, errors='No project found.' + ) + def test_too_many_projects(self): self.project2 = get(Project, slug='test2') From d35cfe020e1ae0739df9cbe6392e673310ae29ac Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Fri, 5 Oct 2018 21:11:45 +0530 Subject: [PATCH 08/16] Fix the indentation problem --- readthedocs/rtd_tests/tests/test_gold.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/rtd_tests/tests/test_gold.py b/readthedocs/rtd_tests/tests/test_gold.py index f02a5ac3cdb..82122eb24b4 100644 --- a/readthedocs/rtd_tests/tests/test_gold.py +++ b/readthedocs/rtd_tests/tests/test_gold.py @@ -26,7 +26,7 @@ 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): + def test_incorrect_input_when_adding_projects(self): self.assertEqual(self.golduser.projects.count(), 0) resp = self.client.post(reverse('gold_projects'), data={'project': 'random-incorrect-slug'}) self.assertFormError( From 6653e2eac9d6c5d093fb6f20ec662cb3e6ecaa2b Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Fri, 5 Oct 2018 21:55:20 +0530 Subject: [PATCH 09/16] Remove the 'elif' to correct the linting errors. --- readthedocs/gold/forms.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 6a7715506f9..1991dff3886 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -97,8 +97,7 @@ def clean(self): # is present in the database or not if Project.objects.filter(slug=project_slug).exists(): return cleaned_data - elif project_slug: + if project_slug: self.add_error(None, "No project found.") else: self.add_error(None, 'You already have the max number of supported projects.') - \ No newline at end of file From 0294e95ba0e66af8ca96cfc9785b391aa1a32f55 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Tue, 9 Oct 2018 00:05:14 +0530 Subject: [PATCH 10/16] Change double quotes to single quotes --- readthedocs/gold/forms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 1991dff3886..a3b07e1fae0 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -91,13 +91,13 @@ def __init__(self, *args, **kwargs): def clean(self): cleaned_data = super(GoldProjectForm, self).clean() - project_slug = cleaned_data.get('project', "") + project_slug = cleaned_data.get('project', '') if self.projects.count() < self.user.num_supported_projects: # Checking if the project with the entered slug # is present in the database or not if Project.objects.filter(slug=project_slug).exists(): return cleaned_data if project_slug: - self.add_error(None, "No project found.") + self.add_error(None, 'No project found.') else: self.add_error(None, 'You already have the max number of supported projects.') From a0d8816af672614e7bdc6a495cc1251885ed3471 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Tue, 9 Oct 2018 01:44:42 +0530 Subject: [PATCH 11/16] Separate validation method for 'project' field --- readthedocs/gold/forms.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index a3b07e1fae0..88292d61c0e 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -89,15 +89,21 @@ def __init__(self, *args, **kwargs): self.projects = kwargs.pop('projects', None) super(GoldProjectForm, self).__init__(*args, **kwargs) - def clean(self): + def clean_project(self): cleaned_data = super(GoldProjectForm, self).clean() project_slug = cleaned_data.get('project', '') - if self.projects.count() < self.user.num_supported_projects: - # Checking if the project with the entered slug - # is present in the database or not - if Project.objects.filter(slug=project_slug).exists(): - return cleaned_data - if project_slug: - self.add_error(None, 'No project found.') + project_instance = Project.objects.filter(slug=project_slug) + + # Checking if the project with the entered slug + # is absent or present in the database. + if not project_instance.exists(): + raise forms.ValidationError('No project found.') else: - self.add_error(None, 'You already have the max number of supported projects.') + return project_slug + + def clean(self): + cleaned_data = super(GoldProjectForm, self).clean() + if self.projects.count() < self.user.num_supported_projects: + return cleaned_data + + self.add_error(None, 'You already have the max number of supported projects.') From 8a252b7bfd8b45f12fe51aa3d86d0b075f1485a9 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Tue, 9 Oct 2018 01:45:19 +0530 Subject: [PATCH 12/16] Fix the test for adding projects for Gold Members --- readthedocs/rtd_tests/tests/test_gold.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/readthedocs/rtd_tests/tests/test_gold.py b/readthedocs/rtd_tests/tests/test_gold.py index 82122eb24b4..da2340fdedd 100644 --- a/readthedocs/rtd_tests/tests/test_gold.py +++ b/readthedocs/rtd_tests/tests/test_gold.py @@ -29,9 +29,7 @@ def test_adding_projects(self): def test_incorrect_input_when_adding_projects(self): self.assertEqual(self.golduser.projects.count(), 0) resp = self.client.post(reverse('gold_projects'), data={'project': 'random-incorrect-slug'}) - self.assertFormError( - resp, form='form', field=None, errors='No project found.' - ) + self.assertFormError(resp, form='form', field='project', errors='No project found.') def test_too_many_projects(self): self.project2 = get(Project, slug='test2') From 567be81abcd4a533fd758cf2b19a2130e992673f Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Tue, 9 Oct 2018 02:29:44 +0530 Subject: [PATCH 13/16] Remove the redundant code. --- readthedocs/gold/forms.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 88292d61c0e..6275e2728cb 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -90,12 +90,8 @@ def __init__(self, *args, **kwargs): super(GoldProjectForm, self).__init__(*args, **kwargs) def clean_project(self): - cleaned_data = super(GoldProjectForm, self).clean() - project_slug = cleaned_data.get('project', '') + project_slug = self.cleaned_data.get('project', '') project_instance = Project.objects.filter(slug=project_slug) - - # Checking if the project with the entered slug - # is absent or present in the database. if not project_instance.exists(): raise forms.ValidationError('No project found.') else: From fc04ac07a2d3e9ef7af2459e0f0472025869e027 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Tue, 9 Oct 2018 02:33:13 +0530 Subject: [PATCH 14/16] Add support for translation for error message. --- readthedocs/gold/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index 6275e2728cb..bcdfd874ebf 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -93,7 +93,7 @@ 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.') + raise forms.ValidationError(_('No project found.')) else: return project_slug From 886a513190597091cb89306674149f8aa65982e9 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Tue, 9 Oct 2018 02:49:36 +0530 Subject: [PATCH 15/16] Add import for ugettext_lazy --- readthedocs/gold/forms.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readthedocs/gold/forms.py b/readthedocs/gold/forms.py index bcdfd874ebf..75eef5a599f 100644 --- a/readthedocs/gold/forms.py +++ b/readthedocs/gold/forms.py @@ -5,6 +5,8 @@ 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 728c9d09a362f26c08c3e181f52ae646c75ac948 Mon Sep 17 00:00:00 2001 From: dojutsu-user Date: Tue, 9 Oct 2018 12:37:40 +0530 Subject: [PATCH 16/16] Add assert to check the presence of random-incorrect-slug in the database. --- readthedocs/rtd_tests/tests/test_gold.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readthedocs/rtd_tests/tests/test_gold.py b/readthedocs/rtd_tests/tests/test_gold.py index da2340fdedd..e0f5c1581aa 100644 --- a/readthedocs/rtd_tests/tests/test_gold.py +++ b/readthedocs/rtd_tests/tests/test_gold.py @@ -28,7 +28,9 @@ def test_adding_projects(self): def test_incorrect_input_when_adding_projects(self): self.assertEqual(self.golduser.projects.count(), 0) - resp = self.client.post(reverse('gold_projects'), data={'project': 'random-incorrect-slug'}) + 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):