Skip to content

Commit 30a94fc

Browse files
berinhardewdurbin
andauthored
Remove TODO notes in sponsors app (#1692)
* Refactor unit test by centralizing data dict in set up * Only proceed to sponsor info form if Django can use cookies * Remove outdated template tag (used with old Sponsors models) * Update sponsors/views.py * Update sponsors/tests/test_views.py Co-authored-by: Ernest W. Durbin III <ernest@python.org>
1 parent af59bc0 commit 30a94fc

File tree

6 files changed

+54
-58
lines changed

6 files changed

+54
-58
lines changed

sponsors/templatetags/sponsors.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,6 @@
66
register = template.Library()
77

88

9-
@register.inclusion_tag("sponsors/templatetags/featured_sponsor_rotation.html")
10-
def featured_sponsor_rotation():
11-
"""
12-
Retrieve featured Sponsors for rotation
13-
"""
14-
# TODO remove this code completely if not necessary
15-
# this templatetag logic was removed by the PR #1667
16-
# the Sponsor model got updated and its previous use was deprecated
17-
# this templated tag is used at https://www.python.org/psf-landing/ but since the prod
18-
# DB doesn't have any published sponsor, the default message is being print
19-
return {}
20-
21-
229
@register.inclusion_tag("sponsors/partials/full_sponsorship.txt")
2310
def full_sponsorship(sponsorship):
2411
return {

sponsors/tests/test_templatetags.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,7 @@
44
from companies.models import Company
55

66
from ..models import Sponsor
7-
from ..templatetags.sponsors import featured_sponsor_rotation, full_sponsorship
8-
9-
10-
class SponsorTemplatetagTests(TestCase):
11-
def test_templatetag(self):
12-
sponsors_context = featured_sponsor_rotation()
13-
self.assertEqual({}, sponsors_context)
7+
from ..templatetags.sponsors import full_sponsorship
148

159

1610
class FullSponsorshipTemplatetagTests(TestCase):

sponsors/tests/test_views.py

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
from model_bakery import baker
33
from itertools import chain
44

5+
from django.conf import settings
56
from django.contrib import messages
67
from django.contrib.auth.models import Group
7-
from django.conf import settings
8+
from django.contrib.messages import get_messages
9+
from django.contrib.sessions.backends.base import SessionBase
810
from django.core import mail
9-
from django.urls import reverse, reverse_lazy
1011
from django.test import TestCase
11-
from django.contrib.messages import get_messages
12+
from django.urls import reverse, reverse_lazy
1213

1314
from .utils import get_static_image_file_as_upload
1415
from ..models import (
@@ -42,11 +43,24 @@ def setUp(self):
4243
self.program_2_benefits = baker.make(
4344
SponsorshipBenefit, program=self.wk, _quantity=5
4445
)
46+
self.package = baker.make("sponsors.SponsorshipPackage")
47+
for benefit in self.program_1_benefits:
48+
benefit.packages.add(self.package)
4549
self.user = baker.make(settings.AUTH_USER_MODEL, is_staff=True, is_active=True)
4650
self.client.force_login(self.user)
4751

4852
self.group = Group(name="Sponsorship Preview")
4953
self.group.save()
54+
self.data = {
55+
"benefits_psf": [b.id for b in self.program_1_benefits],
56+
"benefits_working_group": [b.id for b in self.program_2_benefits],
57+
"package": self.package.id,
58+
}
59+
60+
def populate_test_cookie(self):
61+
session = self.client.session
62+
session[SessionBase.TEST_COOKIE_NAME] = SessionBase.TEST_COOKIE_VALUE
63+
session.save()
5064

5165
def test_display_template_with_form_and_context(self):
5266
psf_package = baker.make("sponsors.SponsorshipPackage")
@@ -59,45 +73,36 @@ def test_display_template_with_form_and_context(self):
5973
self.assertTemplateUsed(r, "sponsors/sponsorship_benefits_form.html")
6074
self.assertIsInstance(r.context["form"], SponsorshiptBenefitsForm)
6175
self.assertEqual(r.context["benefit_model"], SponsorshipBenefit)
62-
self.assertEqual(2, packages.count())
76+
self.assertEqual(3, packages.count())
6377
self.assertIn(psf_package, packages)
6478
self.assertIn(extra_package, packages)
79+
self.assertEqual(
80+
r.client.session[SessionBase.TEST_COOKIE_NAME],
81+
SessionBase.TEST_COOKIE_VALUE,
82+
)
6583

6684
def test_display_form_with_errors_if_invalid_post(self):
85+
self.populate_test_cookie()
6786
r = self.client.post(self.url, {})
6887
form = r.context["form"]
6988

7089
self.assertIsInstance(form, SponsorshiptBenefitsForm)
7190
self.assertTrue(form.errors)
7291

7392
def test_valid_post_redirect_user_to_next_form_step_and_save_info_in_cookies(self):
74-
package = baker.make("sponsors.SponsorshipPackage")
75-
for benefit in self.program_1_benefits:
76-
benefit.packages.add(package)
77-
78-
data = {
79-
"benefits_psf": [b.id for b in self.program_1_benefits],
80-
"benefits_working_group": [b.id for b in self.program_2_benefits],
81-
"package": package.id,
82-
}
83-
response = self.client.post(self.url, data=data)
93+
self.populate_test_cookie()
94+
response = self.client.post(self.url, data=self.data)
8495

8596
self.assertRedirects(response, reverse("new_sponsorship_application"))
8697
cookie_value = json.loads(
8798
response.client.cookies["sponsorship_selected_benefits"].value
8899
)
89-
self.assertEqual(data, cookie_value)
100+
self.assertEqual(self.data, cookie_value)
90101

91102
def test_populate_form_initial_with_values_from_cookie(self):
92-
initial = {
93-
"benefits_psf": [b.id for b in self.program_1_benefits],
94-
"benefits_working_group": [b.id for b in self.program_2_benefits],
95-
"package": "",
96-
}
97-
self.client.cookies["sponsorship_selected_benefits"] = json.dumps(initial)
103+
self.client.cookies["sponsorship_selected_benefits"] = json.dumps(self.data)
98104
r = self.client.get(self.url)
99-
100-
self.assertEqual(initial, r.context["form"].initial)
105+
self.assertEqual(self.data, r.context["form"].initial)
101106

102107
def test_capacity_flag(self):
103108
psf_package = baker.make("sponsors.SponsorshipPackage")
@@ -117,20 +122,22 @@ def test_redirect_to_login(self):
117122
redirect_url = (
118123
f"{settings.LOGIN_URL}?next={reverse('new_sponsorship_application')}"
119124
)
120-
package = baker.make("sponsors.SponsorshipPackage")
121-
for benefit in self.program_1_benefits:
122-
benefit.packages.add(package)
123125

124-
data = {
125-
"benefits_psf": [b.id for b in self.program_1_benefits],
126-
"benefits_working_group": [b.id for b in self.program_2_benefits],
127-
"package": package.id,
128-
}
129126
self.client.logout()
130-
response = self.client.post(self.url, data=data)
127+
self.populate_test_cookie()
128+
response = self.client.post(self.url, data=self.data)
131129

132130
self.assertRedirects(response, redirect_url, fetch_redirect_response=False)
133131

132+
def test_invalidate_post_even_if_valid_data_but_user_does_not_allow_cookies(self):
133+
# do not set Django's test cookie
134+
r = self.client.post(self.url, data=self.data)
135+
form = r.context["form"]
136+
137+
self.assertIsInstance(form, SponsorshiptBenefitsForm)
138+
msg = "You must allow cookies from python.org to proceed."
139+
self.assertEqual(form.non_field_errors(), [msg])
140+
134141

135142
class NewSponsorshipApplicationViewTests(TestCase):
136143
url = reverse_lazy("new_sponsorship_application")

sponsors/views.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.contrib.auth.decorators import login_required
66
from django.contrib.auth.mixins import LoginRequiredMixin
77
from django.db import transaction
8+
from django.forms.utils import ErrorList
89
from django.utils.decorators import method_decorator
910
from django.http import JsonResponse
1011
from django.views.generic import ListView, FormView
@@ -57,12 +58,21 @@ def get_initial(self):
5758
return cookies.get_sponsorship_selected_benefits(self.request)
5859

5960
def form_valid(self, form):
61+
if not self.request.session.test_cookie_worked():
62+
error = ErrorList()
63+
error.append("You must allow cookies from python.org to proceed.")
64+
form._errors.setdefault("__all__", error)
65+
return self.form_invalid(form)
66+
6067
response = super().form_valid(form)
6168
self._set_form_data_cookie(form, response)
6269
return response
6370

71+
def get(self, request, *args, **kwargs):
72+
request.session.set_test_cookie()
73+
return super().get(request, *args, **kwargs)
74+
6475
def _set_form_data_cookie(self, form, response):
65-
# TODO: make sure user accepts cookies with set_test_cookie
6676
data = {
6777
"package": "" if not form.get_package() else form.get_package().id,
6878
}

templates/psf/index.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@
5454

5555
<div class="small-widget psf-widget4 last">
5656
<h2 class="widget-title">Sponsors</h2>
57-
{% featured_sponsor_rotation %}
57+
<div id="sponsor-rotation" class="flex-slideshow">
58+
<p>Without our sponsors we wouldn't be able to help the Python community grow and prosper.</p>
59+
</div>
5860
<p><a class="button" href="/psf/sponsorship/">Sponsorship Possibilities</a></p>
5961
</div>
6062

templates/sponsors/templatetags/featured_sponsor_rotation.html

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)