mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-06-02 02:28:32 +02:00
Fix logic in clean
This commit is contained in:
parent
5c07775277
commit
32ed84a5e1
2 changed files with 8 additions and 10 deletions
|
@ -97,15 +97,19 @@ class UserPortfolioPermission(TimeStampedModel):
|
||||||
"""Extends clean method to perform additional validation, which can raise errors in django admin."""
|
"""Extends clean method to perform additional validation, which can raise errors in django admin."""
|
||||||
super().clean()
|
super().clean()
|
||||||
|
|
||||||
if not flag_is_active(None, "multiple_portfolios") and self.pk is None:
|
# Check if a user is set without accessing the related object.
|
||||||
|
has_user = bool(self.user_id)
|
||||||
|
if not flag_is_active(None, "multiple_portfolios") and self.pk is None and has_user:
|
||||||
existing_permissions = UserPortfolioPermission.objects.filter(user=self.user)
|
existing_permissions = UserPortfolioPermission.objects.filter(user=self.user)
|
||||||
if existing_permissions.exists():
|
if existing_permissions.exists():
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
"Only one portfolio permission is allowed per user when multiple portfolios are disabled."
|
"Only one portfolio permission is allowed per user when multiple portfolios are disabled."
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.portfolio is None and self._get_portfolio_permissions():
|
# Check if portfolio is set without accessing the related object.
|
||||||
|
has_portfolio = bool(self.portfolio_id)
|
||||||
|
if not has_portfolio and self._get_portfolio_permissions():
|
||||||
raise ValidationError("When portfolio roles or additional permissions are assigned, portfolio is required.")
|
raise ValidationError("When portfolio roles or additional permissions are assigned, portfolio is required.")
|
||||||
|
|
||||||
if self.portfolio is not None and not self._get_portfolio_permissions():
|
if has_portfolio and not self._get_portfolio_permissions():
|
||||||
raise ValidationError("When portfolio is assigned, portfolio roles or additional permissions are required.")
|
raise ValidationError("When portfolio is assigned, portfolio roles or additional permissions are required.")
|
||||||
|
|
|
@ -1459,15 +1459,9 @@ class TestUser(TestCase):
|
||||||
portfolio_permission.portfolio = None
|
portfolio_permission.portfolio = None
|
||||||
portfolio_permission.roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
|
portfolio_permission.roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
|
||||||
|
|
||||||
# Create a new UserPortfolioPermission instance without a portfolio
|
|
||||||
invalid_permission = UserPortfolioPermission(
|
|
||||||
user=self.user,
|
|
||||||
roles=[UserPortfolioRoleChoices.ORGANIZATION_ADMIN],
|
|
||||||
portfolio=None # This should trigger the validation error
|
|
||||||
)
|
|
||||||
# Test if the ValidationError is raised with the correct message
|
# Test if the ValidationError is raised with the correct message
|
||||||
with self.assertRaises(ValidationError) as cm:
|
with self.assertRaises(ValidationError) as cm:
|
||||||
invalid_permission.clean()
|
portfolio_permission.clean()
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
cm.exception.message, "When portfolio roles or additional permissions are assigned, portfolio is required."
|
cm.exception.message, "When portfolio roles or additional permissions are assigned, portfolio is required."
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue