Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b2f1a91

Browse filesBrowse files
authored
Bugfix to don't ignore add-ons (#1941)
* Enable helper get_benefits method to also list add-ons benefits * Make sure the benefits being used to create the sponsorship includes add-ons
1 parent 35e8df8 commit b2f1a91
Copy full SHA for b2f1a91

File tree

Expand file treeCollapse file tree

4 files changed

+41
-4
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+41
-4
lines changed

‎sponsors/forms.py

Copy file name to clipboardExpand all lines: sponsors/forms.py
+6-2Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,15 @@ def benefits_conflicts(self):
8989
conflicts[benefit.id] = list(benefits_conflicts)
9090
return conflicts
9191

92-
def get_benefits(self, cleaned_data=None):
92+
def get_benefits(self, cleaned_data=None, include_add_ons=False):
9393
cleaned_data = cleaned_data or self.cleaned_data
94-
return list(
94+
benefits = list(
9595
chain(*(cleaned_data.get(bp.name) for bp in self.benefits_programs))
9696
)
97+
add_ons = cleaned_data.get("add_ons_benefits")
98+
if include_add_ons and add_ons:
99+
benefits.extend([b for b in add_ons])
100+
return benefits
97101

98102
def get_package(self):
99103
return self.cleaned_data.get("package")

‎sponsors/tests/test_forms.py

Copy file name to clipboardExpand all lines: sponsors/tests/test_forms.py
+18Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,24 @@ def test_invalid_form_if_any_conflict(self):
125125
form.errors["__all__"],
126126
)
127127

128+
def test_get_benefits_from_cleaned_data(self):
129+
benefit = self.program_1_benefits[0]
130+
131+
data = {"benefits_psf": [benefit.id],
132+
"add_ons_benefits": [b.id for b in self.add_ons]}
133+
form = SponsorshiptBenefitsForm(data=data)
134+
self.assertTrue(form.is_valid())
135+
136+
benefits = form.get_benefits()
137+
self.assertEqual(1, len(benefits))
138+
self.assertIn(benefit, benefits)
139+
140+
benefits = form.get_benefits(include_add_ons=True)
141+
self.assertEqual(3, len(benefits))
142+
self.assertIn(benefit, benefits)
143+
for add_on in self.add_ons:
144+
self.assertIn(add_on, benefits)
145+
128146
def test_package_only_benefit_without_package_should_not_validate(self):
129147
SponsorshipBenefit.objects.all().update(package_only=True)
130148

‎sponsors/tests/test_views.py

Copy file name to clipboardExpand all lines: sponsors/tests/test_views.py
+16-1Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,15 @@ def setUp(self):
152152
self.package = baker.make("sponsors.SponsorshipPackage", advertise=True)
153153
for benefit in self.program_1_benefits:
154154
benefit.packages.add(self.package)
155+
156+
# packages without associated packages
157+
self.add_on = baker.make(SponsorshipBenefit)
158+
155159
self.client.cookies["sponsorship_selected_benefits"] = json.dumps(
156160
{
157161
"package": self.package.id,
158162
"benefits_psf": [b.id for b in self.program_1_benefits],
163+
"add_ons_benefits": [self.add_on.id],
159164
}
160165
)
161166
self.data = {
@@ -176,7 +181,8 @@ def setUp(self):
176181
"web_logo": get_static_image_file_as_upload("psf-logo.png", "logo.png"),
177182
}
178183

179-
def test_display_template_with_form_and_context(self):
184+
def test_display_template_with_form_and_context_without_add_ons(self):
185+
self.add_on.delete()
180186
r = self.client.get(self.url)
181187

182188
self.assertEqual(r.status_code, 200)
@@ -193,6 +199,13 @@ def test_display_template_with_form_and_context(self):
193199
for benefit in self.program_1_benefits:
194200
self.assertIn(benefit, r.context["sponsorship_benefits"])
195201

202+
def test_display_template_with_form_and_context_with_add_ons(self):
203+
r = self.client.get(self.url)
204+
205+
self.assertEqual(r.status_code, 200)
206+
self.assertIn(self.add_on, r.context["added_benefits"])
207+
self.assertIsNone(r.context["sponsorship_price"])
208+
196209
def test_return_package_as_none_if_not_previously_selected(self):
197210
self.client.cookies["sponsorship_selected_benefits"] = json.dumps(
198211
{
@@ -277,6 +290,8 @@ def test_create_new_sponsorship(self):
277290
)
278291
sponsorship = Sponsorship.objects.get(sponsor__name="CompanyX")
279292
self.assertTrue(sponsorship.benefits.exists())
293+
# 3 benefits + 1 add-on
294+
self.assertEqual(4, sponsorship.benefits.count())
280295
self.assertTrue(sponsorship.level_name)
281296
self.assertTrue(sponsorship.submited_by, self.user)
282297
self.assertEqual(

‎sponsors/views.py

Copy file name to clipboardExpand all lines: sponsors/views.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def form_valid(self, form):
154154
sponsorship = uc.execute(
155155
self.request.user,
156156
sponsor,
157-
benefits_form.get_benefits(),
157+
benefits_form.get_benefits(include_add_ons=True),
158158
benefits_form.get_package(),
159159
request=self.request,
160160
)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.