pt. 1 of test refactors

This commit is contained in:
zandercymatics 2024-08-19 15:18:54 -06:00
parent f587a994f2
commit 432ee9c860
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
11 changed files with 100 additions and 132 deletions

View file

@ -89,7 +89,7 @@ class PortfolioInvitation(TimeStampedModel):
portfolio=self.portfolio, user=user
)
if self.portfolio_roles and len(self.portfolio_roles) > 0:
user_portfolio_permission.portfolio_roles = self.portfolio_roles
user_portfolio_permission.roles = self.portfolio_roles
if self.portfolio_additional_permissions and len(self.portfolio_additional_permissions) > 0:
user_portfolio_permission.portfolio_additional_permissions = self.portfolio_additional_permissions
user_portfolio_permission.additional_permissions = self.portfolio_additional_permissions
user_portfolio_permission.save()

View file

@ -208,17 +208,6 @@ class User(AbstractUser):
def has_contact_info(self):
return bool(self.title or self.email or self.phone)
def clean(self):
"""Extends clean method to perform additional validation, which can raise errors in django admin."""
super().clean()
portfolio_perm = self.portfolio_permissions.filter(portfolio=self.last_selected_portfolio, user=self).first()
if self.last_selected_portfolio is None and portfolio_perm._get_portfolio_permissions():
raise ValidationError("When portfolio roles or additional permissions are assigned, portfolio is required.")
if self.last_selected_portfolio is not None and not portfolio_perm._get_portfolio_permissions():
raise ValidationError("When portfolio is assigned, portfolio roles or additional permissions are required.")
def _has_portfolio_permission(self, portfolio_permission):
"""The views should only call this function when testing for perms and not rely on roles."""

View file

@ -54,7 +54,7 @@ class UserPortfolioPermission(TimeStampedModel):
related_name="portfolio_users",
)
portfolio_roles = ArrayField(
roles = ArrayField(
models.CharField(
max_length=50,
choices=UserPortfolioRoleChoices.choices,
@ -64,7 +64,7 @@ class UserPortfolioPermission(TimeStampedModel):
help_text="Select one or more roles.",
)
portfolio_additional_permissions = ArrayField(
additional_permissions = ArrayField(
models.CharField(
max_length=50,
choices=UserPortfolioPermissionChoices.choices,
@ -76,8 +76,8 @@ class UserPortfolioPermission(TimeStampedModel):
def __str__(self):
return (
f"User '{self.user}' on Portfolio '{self.portfolio}' " f"<Roles: {self.portfolio_roles}>"
if self.portfolio_roles
f"User '{self.user}' on Portfolio '{self.portfolio}' " f"<Roles: {self.roles}>"
if self.roles
else ""
)
@ -88,12 +88,12 @@ class UserPortfolioPermission(TimeStampedModel):
# Use a set to avoid duplicate permissions
portfolio_permissions = set()
if self.portfolio_roles:
for role in self.portfolio_roles:
if self.roles:
for role in self.roles:
portfolio_permissions.update(self.PORTFOLIO_ROLE_PERMISSIONS.get(role, []))
if self.portfolio_additional_permissions:
portfolio_permissions.update(self.portfolio_additional_permissions)
if self.additional_permissions:
portfolio_permissions.update(self.additional_permissions)
return list(portfolio_permissions)
@ -107,3 +107,9 @@ class UserPortfolioPermission(TimeStampedModel):
raise ValidationError(
"Only one portfolio permission is allowed per user when multiple portfolios are disabled."
)
if self.portfolio is None and self._get_portfolio_permissions():
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():
raise ValidationError("When portfolio is assigned, portfolio roles or additional permissions are required.")