Skip to content

Commit 257c96d

Browse files
berinhardewdurbin
andauthored
Enable admin staff to add benefits to Sponsorship via admin (#1942)
* Remove restriction to prevent from adding benefits * Make sure sponsors benefit inline form also updates the related information * Force cfg to be at sponsorship level * assign benefit_internal_value from benefit if not supplied Co-authored-by: Ee Durbin <[email protected]>
1 parent b2f1a91 commit 257c96d

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

sponsors/admin.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ class SponsorBenefitInline(admin.TabularInline):
166166
form = SponsorBenefitAdminInlineForm
167167
fields = ["sponsorship_benefit", "benefit_internal_value"]
168168
extra = 0
169-
max_num = 0
170169

171170
def has_add_permission(self, request, obj=None):
172171
has_add_permission = super().has_add_permission(request, obj=obj)

sponsors/forms.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,12 @@ def save(self, commit=True):
398398
else:
399399
self.instance.refresh_from_db()
400400

401-
self.instance.benefit_internal_value = value
401+
self.instance.benefit_internal_value = benefit.internal_value
402+
if value:
403+
self.instance.benefit_internal_value = value
404+
updated_sponsorship_benefit = False
402405
if benefit.pk != self.instance.sponsorship_benefit_id:
406+
updated_sponsorship_benefit = True
403407
self.instance.sponsorship_benefit = benefit
404408
self.instance.name = benefit.name
405409
self.instance.description = benefit.description
@@ -408,6 +412,11 @@ def save(self, commit=True):
408412
if commit:
409413
self.instance.save()
410414

415+
if updated_sponsorship_benefit:
416+
self.instance.features.all().delete()
417+
for feature_config in benefit.features_config.all():
418+
feature_config.create_benefit_feature(self.instance)
419+
411420
return self.instance
412421

413422

sponsors/tests/test_forms.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
SendSponsorshipNotificationForm, SponsorRequiredAssetsForm,
1717
)
1818
from sponsors.models import SponsorshipBenefit, SponsorContact, RequiredTextAssetConfiguration, \
19-
RequiredImgAssetConfiguration, ImgAsset
19+
RequiredImgAssetConfiguration, ImgAsset, RequiredTextAsset
2020
from .utils import get_static_image_file_as_upload
2121
from ..models.enums import AssetsRelatedTo
2222

@@ -473,7 +473,6 @@ def test_do_not_update_sponsorship_if_it_doesn_change(self):
473473
sponsorship=self.sponsorship,
474474
sponsorship_benefit=self.benefit,
475475
)
476-
new_benefit = baker.make(SponsorshipBenefit)
477476

478477
form = SponsorBenefitAdminInlineForm(data=self.data, instance=sponsor_benefit)
479478
self.assertTrue(form.is_valid(), form.errors)
@@ -488,6 +487,29 @@ def test_do_not_update_sponsorship_if_it_doesn_change(self):
488487
self.assertNotEqual(sponsor_benefit.name, "new name")
489488
self.assertEqual(sponsor_benefit.benefit_internal_value, 200)
490489

490+
def test_update_existing_benefit_features(self):
491+
sponsor_benefit = baker.make(
492+
SponsorBenefit,
493+
sponsorship=self.sponsorship,
494+
sponsorship_benefit=self.benefit,
495+
)
496+
# existing benefit depends on logo
497+
baker.make_recipe('sponsors.tests.logo_at_download_feature', sponsor_benefit=sponsor_benefit)
498+
499+
# new benefit requires text instead of logo
500+
new_benefit = baker.make(SponsorshipBenefit)
501+
baker.make(RequiredTextAssetConfiguration, benefit=new_benefit, internal_name='foo',
502+
related_to=AssetsRelatedTo.SPONSORSHIP.value)
503+
self.data["sponsorship_benefit"] = new_benefit.pk
504+
505+
form = SponsorBenefitAdminInlineForm(data=self.data, instance=sponsor_benefit)
506+
self.assertTrue(form.is_valid(), form.errors)
507+
form.save()
508+
sponsor_benefit.refresh_from_db()
509+
510+
self.assertEqual(sponsor_benefit.features.count(), 1)
511+
self.assertIsInstance(sponsor_benefit.features.get(), RequiredTextAsset)
512+
491513

492514
class SponsorshipsFormTestCase(TestCase):
493515

0 commit comments

Comments
 (0)