Skip to content

Commit ff7e0c8

Browse files
committed
refine code and add unit test
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 1645e68 commit ff7e0c8

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

dje/forms.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,7 @@ def __init__(self, *args, **kwargs):
116116
for name in self.protected_fields:
117117
if self.is_bound:
118118
self.fields.pop(name, None)
119-
else:
120-
field = self.fields[name]
119+
elif field := self.fields.get(name):
121120
field.disabled = True
122121
if hasattr(field, "queryset"):
123122
field.queryset = field.queryset.none()

product_portfolio/tests/test_views.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2680,6 +2680,45 @@ def test_product_portfolio_product_manage_packages_grid_view_permissions(self):
26802680
response = self.client.get(manage_url)
26812681
self.assertEqual(200, response.status_code)
26822682

2683+
def test_product_portfolio_product_manage_packages_grid_fields_permissions(self):
2684+
add_perms(self.basic_user, ["change_productpackage"])
2685+
assign_perm("view_product", self.basic_user, self.product1)
2686+
assign_perm("change_product", self.basic_user, self.product1)
2687+
self.client.login(username=self.basic_user.username, password="secret")
2688+
2689+
make_product_package(self.product1)
2690+
manage_url = self.product1.get_manage_packages_url()
2691+
response = self.client.get(manage_url)
2692+
2693+
self.assertEqual(200, response.status_code)
2694+
expected = (
2695+
'<select name="form-0-review_status" class="select form-select" disabled'
2696+
' aria-describedby="id_form-0-review_status_helptext" id="id_form-0-review_status">'
2697+
' <option value="" selected>---------</option>'
2698+
"</select>"
2699+
)
2700+
self.assertContains(response, expected, html=True)
2701+
form = response.context["formset"].forms[0]
2702+
self.assertIn("review_status", form.fields)
2703+
self.assertTrue(form.fields["review_status"].disabled)
2704+
2705+
data = {
2706+
"form-TOTAL_FORMS": 1,
2707+
"form-INITIAL_FORMS": 0,
2708+
"form-MIN_NUM_FORMS": 0,
2709+
"form-MAX_NUM_FORMS": 1000,
2710+
"form-0-product": self.product1.pk,
2711+
"form-0-package": self.package1.pk,
2712+
"form-0-object_display": str(self.package1),
2713+
"form-0-review_status": "PROTECTED FIELD",
2714+
"form-0-notes": "Some notes",
2715+
}
2716+
response = self.client.post(manage_url, data, follow=True)
2717+
self.assertContains(response, "Product changes saved.")
2718+
self.assertRedirects(response, manage_url)
2719+
pp2 = ProductPackage.objects.get(product=self.product1, package=self.package1.pk)
2720+
self.assertIsNone(pp2.review_status)
2721+
26832722
def test_product_portfolio_product_manage_packages_grid_view_delete(self):
26842723
self.client.login(username=self.basic_user.username, password="secret")
26852724

0 commit comments

Comments
 (0)