Fix logic in clean

This commit is contained in:
zandercymatics 2024-08-21 11:43:40 -06:00
parent 5c07775277
commit 32ed84a5e1
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
2 changed files with 8 additions and 10 deletions

View file

@ -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.")

View file

@ -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."