Skip to content

Commit b2f1a91

Browse 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

File tree

4 files changed

+41
-4
lines changed

4 files changed

+41
-4
lines changed

sponsors/forms.py

Lines 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

Lines 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

Lines 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

Lines 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)