updated model

This commit is contained in:
David Kennedy 2024-10-07 13:18:13 -04:00
parent 57c89497b2
commit 58002de5e0
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
10 changed files with 62 additions and 62 deletions

View file

@ -188,11 +188,11 @@ class PortfolioInvitationAdminForm(UserChangeForm):
model = models.PortfolioInvitation model = models.PortfolioInvitation
fields = "__all__" fields = "__all__"
widgets = { widgets = {
"portfolio_roles": FilteredSelectMultipleArrayWidget( "roles": FilteredSelectMultipleArrayWidget(
"portfolio_roles", is_stacked=False, choices=UserPortfolioRoleChoices.choices "roles", is_stacked=False, choices=UserPortfolioRoleChoices.choices
), ),
"portfolio_additional_permissions": FilteredSelectMultipleArrayWidget( "additional_permissions": FilteredSelectMultipleArrayWidget(
"portfolio_additional_permissions", "additional_permissions",
is_stacked=False, is_stacked=False,
choices=UserPortfolioPermissionChoices.choices, choices=UserPortfolioPermissionChoices.choices,
), ),
@ -1387,8 +1387,8 @@ class PortfolioInvitationAdmin(ListHeaderAdmin):
list_display = [ list_display = [
"email", "email",
"portfolio", "portfolio",
"portfolio_roles", "roles",
"portfolio_additional_permissions", "additional_permissions",
"status", "status",
] ]

View file

@ -133,14 +133,14 @@ class PortfolioInvitedMemberForm(forms.ModelForm):
Form for updating a portfolio invited member. Form for updating a portfolio invited member.
""" """
portfolio_roles = forms.MultipleChoiceField( roles = forms.MultipleChoiceField(
choices=UserPortfolioRoleChoices.choices, choices=UserPortfolioRoleChoices.choices,
widget=forms.SelectMultiple(attrs={'class': 'usa-select'}), widget=forms.SelectMultiple(attrs={'class': 'usa-select'}),
required=False, required=False,
label="Roles", label="Roles",
) )
portfolio_additional_permissions = forms.MultipleChoiceField( additional_permissions = forms.MultipleChoiceField(
choices=UserPortfolioPermissionChoices.choices, choices=UserPortfolioPermissionChoices.choices,
widget=forms.SelectMultiple(attrs={'class': 'usa-select'}), widget=forms.SelectMultiple(attrs={'class': 'usa-select'}),
required=False, required=False,
@ -150,7 +150,7 @@ class PortfolioInvitedMemberForm(forms.ModelForm):
class Meta: class Meta:
model = PortfolioInvitation model = PortfolioInvitation
fields = [ fields = [
"portfolio_roles", "roles",
"portfolio_additional_permissions", "additional_permissions",
] ]

View file

@ -0,0 +1,23 @@
# Generated by Django 4.2.10 on 2024-10-07 17:12
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("registrar", "0129_alter_portfolioinvitation_portfolio_roles_and_more"),
]
operations = [
migrations.RenameField(
model_name="portfolioinvitation",
old_name="portfolio_additional_permissions",
new_name="additional_permissions",
),
migrations.RenameField(
model_name="portfolioinvitation",
old_name="portfolio_roles",
new_name="roles",
),
]

View file

@ -38,7 +38,7 @@ class PortfolioInvitation(TimeStampedModel):
related_name="portfolios", related_name="portfolios",
) )
portfolio_roles = ArrayField( roles = ArrayField(
models.CharField( models.CharField(
max_length=50, max_length=50,
choices=UserPortfolioRoleChoices.choices, choices=UserPortfolioRoleChoices.choices,
@ -48,7 +48,7 @@ class PortfolioInvitation(TimeStampedModel):
help_text="Select one or more roles.", help_text="Select one or more roles.",
) )
portfolio_additional_permissions = ArrayField( additional_permissions = ArrayField(
models.CharField( models.CharField(
max_length=50, max_length=50,
choices=UserPortfolioPermissionChoices.choices, choices=UserPortfolioPermissionChoices.choices,
@ -88,8 +88,8 @@ class PortfolioInvitation(TimeStampedModel):
user_portfolio_permission, _ = UserPortfolioPermission.objects.get_or_create( user_portfolio_permission, _ = UserPortfolioPermission.objects.get_or_create(
portfolio=self.portfolio, user=user portfolio=self.portfolio, user=user
) )
if self.portfolio_roles and len(self.portfolio_roles) > 0: if self.roles and len(self.roles) > 0:
user_portfolio_permission.roles = self.portfolio_roles user_portfolio_permission.roles = self.roles
if self.portfolio_additional_permissions and len(self.portfolio_additional_permissions) > 0: if self.additional_permissions and len(self.additional_permissions) > 0:
user_portfolio_permission.additional_permissions = self.portfolio_additional_permissions user_portfolio_permission.additional_permissions = self.additional_permissions
user_portfolio_permission.save() user_portfolio_permission.save()

View file

@ -1,14 +1,8 @@
<h4 class="margin-bottom-0 text-primary">Member access</h4> <h4 class="margin-bottom-0 text-primary">Member access</h4>
{% if permissions.roles and 'organization_admin' in permissions.roles %} {% if permissions.roles and 'organization_admin' in permissions.roles %}
<p class="margin-top-0">Admin access</p> <p class="margin-top-0">Admin access</p>
{% elif permissions.portfolio_roles and 'organization_admin' in permissions.portfolio_roles %}
<p class="margin-top-0">Admin access</p>
{% elif permissions.roles and 'organization_member' in permissions.roles %} {% elif permissions.roles and 'organization_member' in permissions.roles %}
<p class="margin-top-0">Basic access</p> <p class="margin-top-0">Basic access</p>
{% elif permissions.portfolio_roles and 'organization_member' in permissions.portfolio_roles %}
<p class="margin-top-0">Basic access</p>
{% else %} {% else %}
<p class="margin-top-0"></p> <p class="margin-top-0"></p>
{% endif %} {% endif %}
@ -16,14 +10,8 @@
<h4 class="margin-bottom-0 text-primary">Organization domain requests</h4> <h4 class="margin-bottom-0 text-primary">Organization domain requests</h4>
{% if permissions.roles and 'organization_admin' in permissions.roles or 'edit_requests' in permissions.additional_permissions %} {% if permissions.roles and 'organization_admin' in permissions.roles or 'edit_requests' in permissions.additional_permissions %}
<p class="margin-top-0">View all requests plus create requests</p> <p class="margin-top-0">View all requests plus create requests</p>
{% elif permissions.portfolio_roles and 'organization_admin' in permissions.portfolio_roles or 'edit_requests' in permissions.portfolio_additional_permissions %}
<p class="margin-top-0">View all requests plus create requests</p>
{% elif permissions.additional_permissions and 'view_all_requests' in permissions.additional_permissions %} {% elif permissions.additional_permissions and 'view_all_requests' in permissions.additional_permissions %}
<p class="margin-top-0">View all requests</p> <p class="margin-top-0">View all requests</p>
{% elif permissions.portfolio_additional_permissions and 'view_all_requests' in permissions.portfolio_additional_permissions %}
<p class="margin-top-0">View all requests</p>
{% else %} {% else %}
<p class="margin-top-0">No access</p> <p class="margin-top-0">No access</p>
{% endif %} {% endif %}
@ -31,14 +19,8 @@
<h4 class="margin-bottom-0 text-primary">Organization members</h4> <h4 class="margin-bottom-0 text-primary">Organization members</h4>
{% if permissions.additional_permissions and 'edit_members' in permissions.additional_permissions %} {% if permissions.additional_permissions and 'edit_members' in permissions.additional_permissions %}
<p class="margin-top-0">View all members plus manage members</p> <p class="margin-top-0">View all members plus manage members</p>
{% elif permissions.portfolio_additional_permissions and 'edit_members' in permissions.portfolio_additional_permissions %}
<p class="margin-top-0">View all members plus manage members</p>
{% elif permissions.additional_permissions and 'view_members' in permissions.additional_permissions %} {% elif permissions.additional_permissions and 'view_members' in permissions.additional_permissions %}
<p class="margin-top-0">View all members</p> <p class="margin-top-0">View all members</p>
{% elif permissions.portfolio_additional_permissions and 'view_members' in permissions.portfolio_additional_permissions %}
<p class="margin-top-0">View all members</p>
{% else %} {% else %}
<p class="margin-top-0">No access</p> <p class="margin-top-0">No access</p>
{% endif %} {% endif %}

View file

@ -27,13 +27,8 @@
<form class="usa-form usa-form--large" method="post" novalidate> <form class="usa-form usa-form--large" method="post" novalidate>
{% csrf_token %} {% csrf_token %}
{% if form.roles %} {% input_with_errors form.roles %}
{% input_with_errors form.roles %} {% input_with_errors form.additional_permissions %}
{% input_with_errors form.additional_permissions %}
{% elif form.portfolio_roles %}
{% input_with_errors form.portfolio_roles %}
{% input_with_errors form.portfolio_additional_permissions %}
{% endif %}
<button <button
type="submit" type="submit"
class="usa-button" class="usa-button"

View file

@ -1176,8 +1176,8 @@ class TestPortfolioInvitations(TestCase):
self.invitation, _ = PortfolioInvitation.objects.get_or_create( self.invitation, _ = PortfolioInvitation.objects.get_or_create(
email=self.email, email=self.email,
portfolio=self.portfolio, portfolio=self.portfolio,
portfolio_roles=[self.portfolio_role_base, self.portfolio_role_admin], roles=[self.portfolio_role_base, self.portfolio_role_admin],
portfolio_additional_permissions=[self.portfolio_permission_1, self.portfolio_permission_2], additional_permissions=[self.portfolio_permission_1, self.portfolio_permission_2],
) )
def tearDown(self): def tearDown(self):
@ -1233,8 +1233,8 @@ class TestPortfolioInvitations(TestCase):
PortfolioInvitation.objects.get_or_create( PortfolioInvitation.objects.get_or_create(
email=self.email, email=self.email,
portfolio=portfolio2, portfolio=portfolio2,
portfolio_roles=[self.portfolio_role_base, self.portfolio_role_admin], roles=[self.portfolio_role_base, self.portfolio_role_admin],
portfolio_additional_permissions=[self.portfolio_permission_1, self.portfolio_permission_2], additional_permissions=[self.portfolio_permission_1, self.portfolio_permission_2],
) )
with override_flag("multiple_portfolios", active=True): with override_flag("multiple_portfolios", active=True):
self.user.check_portfolio_invitations_on_login() self.user.check_portfolio_invitations_on_login()
@ -1257,8 +1257,8 @@ class TestPortfolioInvitations(TestCase):
PortfolioInvitation.objects.get_or_create( PortfolioInvitation.objects.get_or_create(
email=self.email, email=self.email,
portfolio=portfolio2, portfolio=portfolio2,
portfolio_roles=[self.portfolio_role_base, self.portfolio_role_admin], roles=[self.portfolio_role_base, self.portfolio_role_admin],
portfolio_additional_permissions=[self.portfolio_permission_1, self.portfolio_permission_2], additional_permissions=[self.portfolio_permission_1, self.portfolio_permission_2],
) )
self.user.check_portfolio_invitations_on_login() self.user.check_portfolio_invitations_on_login()
self.user.refresh_from_db() self.user.refresh_from_db()

View file

@ -72,8 +72,8 @@ class GetPortfolioMembersJsonTest(TestWithUser, WebTest):
PortfolioInvitation.objects.create( PortfolioInvitation.objects.create(
email=cls.email5, email=cls.email5,
portfolio=cls.portfolio, portfolio=cls.portfolio,
portfolio_roles=[UserPortfolioRoleChoices.ORGANIZATION_ADMIN], roles=[UserPortfolioRoleChoices.ORGANIZATION_ADMIN],
portfolio_additional_permissions=[ additional_permissions=[
UserPortfolioPermissionChoices.VIEW_MEMBERS, UserPortfolioPermissionChoices.VIEW_MEMBERS,
UserPortfolioPermissionChoices.EDIT_MEMBERS, UserPortfolioPermissionChoices.EDIT_MEMBERS,
], ],

View file

@ -288,9 +288,9 @@ class TestPortfolio(WebTest):
def test_accessible_pages_when_user_does_not_have_role(self): def test_accessible_pages_when_user_does_not_have_role(self):
"""Test that admin / memmber roles are associated with the right access""" """Test that admin / memmber roles are associated with the right access"""
self.app.set_user(self.user.username) self.app.set_user(self.user.username)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN] roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
portfolio_permission, _ = UserPortfolioPermission.objects.get_or_create( portfolio_permission, _ = UserPortfolioPermission.objects.get_or_create(
user=self.user, portfolio=self.portfolio, roles=portfolio_roles user=self.user, portfolio=self.portfolio, roles=roles
) )
with override_flag("organization_feature", active=True): with override_flag("organization_feature", active=True):
# This will redirect the user to the portfolio page. # This will redirect the user to the portfolio page.
@ -398,8 +398,8 @@ class TestPortfolio(WebTest):
"""When organization_feature flag is true and user has a portfolio, """When organization_feature flag is true and user has a portfolio,
the portfolio should be set in session.""" the portfolio should be set in session."""
self.client.force_login(self.user) self.client.force_login(self.user)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN] roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=portfolio_roles) UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=roles)
with override_flag("organization_feature", active=True): with override_flag("organization_feature", active=True):
response = self.client.get(reverse("home")) response = self.client.get(reverse("home"))
# Ensure that middleware processes the session # Ensure that middleware processes the session
@ -420,8 +420,8 @@ class TestPortfolio(WebTest):
This test also satisfies the condition when multiple_portfolios flag This test also satisfies the condition when multiple_portfolios flag
is false and user has a portfolio, so won't add a redundant test for that.""" is false and user has a portfolio, so won't add a redundant test for that."""
self.client.force_login(self.user) self.client.force_login(self.user)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN] roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=portfolio_roles) UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=roles)
response = self.client.get(reverse("home")) response = self.client.get(reverse("home"))
# Ensure that middleware processes the session # Ensure that middleware processes the session
session_middleware = SessionMiddleware(lambda request: None) session_middleware = SessionMiddleware(lambda request: None)
@ -457,8 +457,8 @@ class TestPortfolio(WebTest):
"""When multiple_portfolios flag is true and user has a portfolio, """When multiple_portfolios flag is true and user has a portfolio,
the portfolio should be set in session.""" the portfolio should be set in session."""
self.client.force_login(self.user) self.client.force_login(self.user)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN] roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=portfolio_roles) UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=roles)
with override_flag("organization_feature", active=True), override_flag("multiple_portfolios", active=True): with override_flag("organization_feature", active=True), override_flag("multiple_portfolios", active=True):
response = self.client.get(reverse("home")) response = self.client.get(reverse("home"))
# Ensure that middleware processes the session # Ensure that middleware processes the session
@ -1014,8 +1014,8 @@ class TestPortfolio(WebTest):
def test_portfolio_cache_updates_when_modified(self): def test_portfolio_cache_updates_when_modified(self):
"""Test that the portfolio in session updates when the portfolio is modified""" """Test that the portfolio in session updates when the portfolio is modified"""
self.client.force_login(self.user) self.client.force_login(self.user)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN] roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=portfolio_roles) UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=roles)
with override_flag("organization_feature", active=True): with override_flag("organization_feature", active=True):
# Initial request to set the portfolio in session # Initial request to set the portfolio in session
@ -1043,8 +1043,8 @@ class TestPortfolio(WebTest):
def test_portfolio_cache_updates_when_flag_disabled_while_logged_in(self): def test_portfolio_cache_updates_when_flag_disabled_while_logged_in(self):
"""Test that the portfolio in session is set to None when the organization_feature flag is disabled""" """Test that the portfolio in session is set to None when the organization_feature flag is disabled"""
self.client.force_login(self.user) self.client.force_login(self.user)
portfolio_roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN] roles = [UserPortfolioRoleChoices.ORGANIZATION_ADMIN]
UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=portfolio_roles) UserPortfolioPermission.objects.get_or_create(user=self.user, portfolio=self.portfolio, roles=roles)
with override_flag("organization_feature", active=True): with override_flag("organization_feature", active=True):
# Initial request to set the portfolio in session # Initial request to set the portfolio in session

View file

@ -20,7 +20,7 @@ def get_portfolio_members_json(request):
permissions = UserPortfolioPermission.objects.filter(portfolio=portfolio).select_related("user").values_list("pk", "user__first_name", "user__last_name", "user__email", "user__last_login", "roles") permissions = UserPortfolioPermission.objects.filter(portfolio=portfolio).select_related("user").values_list("pk", "user__first_name", "user__last_name", "user__email", "user__last_login", "roles")
invitations = PortfolioInvitation.objects.filter(portfolio=portfolio).values_list( invitations = PortfolioInvitation.objects.filter(portfolio=portfolio).values_list(
'pk', 'email', 'portfolio_roles', 'portfolio_additional_permissions', 'status' 'pk', 'email', 'roles', 'additional_permissions', 'status'
) )
# Convert the permissions queryset into a list of dictionaries # Convert the permissions queryset into a list of dictionaries