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 257c96d

Browse filesBrowse 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 <ewdurbin@gmail.com>
1 parent b2f1a91 commit 257c96d
Copy full SHA for 257c96d

File tree

Expand file treeCollapse file tree

3 files changed

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

3 files changed

+34
-4
lines changed

‎sponsors/admin.py

Copy file name to clipboardExpand all lines: sponsors/admin.py
-1Lines 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

Copy file name to clipboardExpand all lines: sponsors/forms.py
+10-1Lines 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

Copy file name to clipboardExpand all lines: sponsors/tests/test_forms.py
+24-2Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.