formatted for code readability

This commit is contained in:
David Kennedy 2024-10-21 19:55:05 -04:00
parent 08d878b427
commit dbf208c2bb
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
8 changed files with 117 additions and 49 deletions

View file

@ -338,7 +338,7 @@ urlpatterns = [
path("get-domains-json/", get_domains_json, name="get_domains_json"), path("get-domains-json/", get_domains_json, name="get_domains_json"),
path("get-domain-requests-json/", get_domain_requests_json, name="get_domain_requests_json"), path("get-domain-requests-json/", get_domain_requests_json, name="get_domain_requests_json"),
path("get-portfolio-members-json/", views.PortfolioMembersJson.as_view(), name="get_portfolio_members_json"), path("get-portfolio-members-json/", views.PortfolioMembersJson.as_view(), name="get_portfolio_members_json"),
path('get-member-domains-json/', views.PortfolioMemberDomainsJson.as_view(), name="get_member_domains_json"), path("get-member-domains-json/", views.PortfolioMemberDomainsJson.as_view(), name="get_member_domains_json"),
] ]
# Djangooidc strips out context data from that context, so we define a custom error # Djangooidc strips out context data from that context, so we define a custom error

View file

@ -53,7 +53,7 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
UserPortfolioPermissionChoices.EDIT_MEMBERS, UserPortfolioPermissionChoices.EDIT_MEMBERS,
], ],
) )
# Assign some domains # Assign some domains
cls.domain1 = Domain.objects.create(name="example1.com", expiration_date="2024-03-01", state="ready") cls.domain1 = Domain.objects.create(name="example1.com", expiration_date="2024-03-01", state="ready")
cls.domain2 = Domain.objects.create(name="example2.com", expiration_date="2024-03-01", state="ready") cls.domain2 = Domain.objects.create(name="example2.com", expiration_date="2024-03-01", state="ready")
@ -83,8 +83,12 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
UserPortfolioPermissionChoices.VIEW_MEMBERS, UserPortfolioPermissionChoices.VIEW_MEMBERS,
], ],
) )
DomainInvitation.objects.create(email=cls.invited_member_email, domain=cls.domain1, status=DomainInvitation.DomainInvitationStatus.INVITED) DomainInvitation.objects.create(
DomainInvitation.objects.create(email=cls.invited_member_email, domain=cls.domain2, status=DomainInvitation.DomainInvitationStatus.INVITED) email=cls.invited_member_email, domain=cls.domain1, status=DomainInvitation.DomainInvitationStatus.INVITED
)
DomainInvitation.objects.create(
email=cls.invited_member_email, domain=cls.domain2, status=DomainInvitation.DomainInvitationStatus.INVITED
)
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
@ -107,7 +111,10 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
@override_flag("organization_members", active=True) @override_flag("organization_members", active=True)
def test_get_portfolio_member_domains_json_authenticated(self): def test_get_portfolio_member_domains_json_authenticated(self):
"""Test that portfolio member's domains are returned properly for an authenticated user.""" """Test that portfolio member's domains are returned properly for an authenticated user."""
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "true"}) response = self.app.get(
reverse("get_member_domains_json"),
params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "true"},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -127,7 +134,10 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
@override_flag("organization_members", active=True) @override_flag("organization_members", active=True)
def test_get_portfolio_invitedmember_domains_json_authenticated(self): def test_get_portfolio_invitedmember_domains_json_authenticated(self):
"""Test that portfolio invitedmember's domains are returned properly for an authenticated user.""" """Test that portfolio invitedmember's domains are returned properly for an authenticated user."""
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "email": self.invited_member_email, "member_only": "true"}) response = self.app.get(
reverse("get_member_domains_json"),
params={"portfolio": self.portfolio.id, "email": self.invited_member_email, "member_only": "true"},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -147,7 +157,10 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
@override_flag("organization_members", active=True) @override_flag("organization_members", active=True)
def test_get_portfolio_member_domains_json_authenticated_include_all_domains(self): def test_get_portfolio_member_domains_json_authenticated_include_all_domains(self):
"""Test that all portfolio domains are returned properly for an authenticated user.""" """Test that all portfolio domains are returned properly for an authenticated user."""
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "false"}) response = self.app.get(
reverse("get_member_domains_json"),
params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "false"},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -167,7 +180,10 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
@override_flag("organization_members", active=True) @override_flag("organization_members", active=True)
def test_get_portfolio_invitedmember_domains_json_authenticated_include_all_domains(self): def test_get_portfolio_invitedmember_domains_json_authenticated_include_all_domains(self):
"""Test that all portfolio domains are returned properly for an authenticated user.""" """Test that all portfolio domains are returned properly for an authenticated user."""
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "email": self.invited_member_email, "member_only": "false"}) response = self.app.get(
reverse("get_member_domains_json"),
params={"portfolio": self.portfolio.id, "email": self.invited_member_email, "member_only": "false"},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -187,7 +203,15 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
@override_flag("organization_members", active=True) @override_flag("organization_members", active=True)
def test_get_portfolio_member_domains_json_authenticated_search(self): def test_get_portfolio_member_domains_json_authenticated_search(self):
"""Test that search_term yields correct domain.""" """Test that search_term yields correct domain."""
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "false", "search_term": "example1"}) response = self.app.get(
reverse("get_member_domains_json"),
params={
"portfolio": self.portfolio.id,
"member_id": self.user_member.id,
"member_only": "false",
"search_term": "example1",
},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -207,7 +231,15 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
@override_flag("organization_members", active=True) @override_flag("organization_members", active=True)
def test_get_portfolio_invitedmember_domains_json_authenticated_search(self): def test_get_portfolio_invitedmember_domains_json_authenticated_search(self):
"""Test that search_term yields correct domain.""" """Test that search_term yields correct domain."""
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "email": self.invited_member_email, "member_only": "false", "search_term": "example1"}) response = self.app.get(
reverse("get_member_domains_json"),
params={
"portfolio": self.portfolio.id,
"email": self.invited_member_email,
"member_only": "false",
"search_term": "example1",
},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -228,7 +260,16 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
def test_get_portfolio_member_domains_json_authenticated_sort(self): def test_get_portfolio_member_domains_json_authenticated_sort(self):
"""Test that sort returns results in correct order.""" """Test that sort returns results in correct order."""
# Test by name in ascending order # Test by name in ascending order
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "false", "sort_by": "name", "order":"asc"}) response = self.app.get(
reverse("get_member_domains_json"),
params={
"portfolio": self.portfolio.id,
"member_id": self.user_member.id,
"member_only": "false",
"sort_by": "name",
"order": "asc",
},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -247,7 +288,16 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
self.assertEqual(data["domains"][0]["name"], "example1.com") self.assertEqual(data["domains"][0]["name"], "example1.com")
# Test by name in descending order # Test by name in descending order
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "false", "sort_by": "name", "order":"desc"}) response = self.app.get(
reverse("get_member_domains_json"),
params={
"portfolio": self.portfolio.id,
"member_id": self.user_member.id,
"member_only": "false",
"sort_by": "name",
"order": "desc",
},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -271,7 +321,16 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
def test_get_portfolio_invitedmember_domains_json_authenticated_sort(self): def test_get_portfolio_invitedmember_domains_json_authenticated_sort(self):
"""Test that sort returns results in correct order.""" """Test that sort returns results in correct order."""
# Test by name in ascending order # Test by name in ascending order
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "email": self.invited_member_email, "member_only": "false", "sort_by": "name", "order":"asc"}) response = self.app.get(
reverse("get_member_domains_json"),
params={
"portfolio": self.portfolio.id,
"email": self.invited_member_email,
"member_only": "false",
"sort_by": "name",
"order": "asc",
},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -290,7 +349,16 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
self.assertEqual(data["domains"][0]["name"], "example1.com") self.assertEqual(data["domains"][0]["name"], "example1.com")
# Test by name in descending order # Test by name in descending order
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "email": self.invited_member_email, "member_only": "false", "sort_by": "name", "order":"desc"}) response = self.app.get(
reverse("get_member_domains_json"),
params={
"portfolio": self.portfolio.id,
"email": self.invited_member_email,
"member_only": "false",
"sort_by": "name",
"order": "desc",
},
)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
data = response.json data = response.json
@ -315,10 +383,14 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
"""Test that an restricted user is denied access.""" """Test that an restricted user is denied access."""
# set user to a user with no permissions # set user to a user with no permissions
self.app.set_user(self.user_no_perms) self.app.set_user(self.user_no_perms)
# Try to access the portfolio members without being authenticated # Try to access the portfolio members without being authenticated
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "true"}, expect_errors=True) response = self.app.get(
reverse("get_member_domains_json"),
params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "true"},
expect_errors=True,
)
# Assert that the response is a 403 # Assert that the response is a 403
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
@ -329,10 +401,14 @@ class GetPortfolioMemberDomainsJsonTest(TestWithUser, WebTest):
"""Test that an unauthenticated user is redirected to login.""" """Test that an unauthenticated user is redirected to login."""
# set app to unauthenticated # set app to unauthenticated
self.app.set_user(None) self.app.set_user(None)
# Try to access the portfolio members without being authenticated # Try to access the portfolio members without being authenticated
response = self.app.get(reverse("get_member_domains_json"), params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "true"}, expect_errors=True) response = self.app.get(
reverse("get_member_domains_json"),
params={"portfolio": self.portfolio.id, "member_id": self.user_member.id, "member_only": "true"},
expect_errors=True,
)
# Assert that the response is a redirect to openid login # Assert that the response is a redirect to openid login
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertIn("/openid/login", response.location) self.assertIn("/openid/login", response.location)

View file

@ -132,10 +132,12 @@ class GetPortfolioMembersJsonTest(TestWithUser, WebTest):
"""Test that an unauthenticated user is redirected or denied access.""" """Test that an unauthenticated user is redirected or denied access."""
# Log out the user by setting the user to None # Log out the user by setting the user to None
self.app.set_user(None) self.app.set_user(None)
# Try to access the portfolio members without being authenticated # Try to access the portfolio members without being authenticated
response = self.app.get(reverse("get_portfolio_members_json"), params={"portfolio": self.portfolio.id}, expect_errors=True) response = self.app.get(
reverse("get_portfolio_members_json"), params={"portfolio": self.portfolio.id}, expect_errors=True
)
# Assert that the response is a redirect to the login page # Assert that the response is a redirect to the login page
self.assertEqual(response.status_code, 302) # Redirect to openid login self.assertEqual(response.status_code, 302) # Redirect to openid login
self.assertIn("/openid/login", response.location) self.assertIn("/openid/login", response.location)

View file

@ -1437,7 +1437,7 @@ class TestPortfolioMemberDomainsView(TestWithUser, WebTest):
UserPortfolioPermissionChoices.EDIT_MEMBERS, UserPortfolioPermissionChoices.EDIT_MEMBERS,
], ],
) )
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
UserPortfolioPermission.objects.all().delete() UserPortfolioPermission.objects.all().delete()
@ -1454,7 +1454,6 @@ class TestPortfolioMemberDomainsView(TestWithUser, WebTest):
response = self.client.get(reverse("member-domains", kwargs={"pk": self.permission.id})) response = self.client.get(reverse("member-domains", kwargs={"pk": self.permission.id}))
# Make sure the page loaded, and that we're on the right page # Make sure the page loaded, and that we're on the right page
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertContains(response, self.user_member.email) self.assertContains(response, self.user_member.email)
@ -1493,10 +1492,9 @@ class TestPortfolioMemberDomainsView(TestWithUser, WebTest):
response = self.client.get(reverse("member-domains", kwargs={"pk": "0"})) response = self.client.get(reverse("member-domains", kwargs={"pk": "0"}))
# Make sure the response is not found # Make sure the response is not found
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)
class TestPortfolioInvitedMemberDomainsView(TestWithUser, WebTest): class TestPortfolioInvitedMemberDomainsView(TestWithUser, WebTest):
@classmethod @classmethod
@ -1536,7 +1534,7 @@ class TestPortfolioInvitedMemberDomainsView(TestWithUser, WebTest):
UserPortfolioPermissionChoices.EDIT_MEMBERS, UserPortfolioPermissionChoices.EDIT_MEMBERS,
], ],
) )
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
PortfolioInvitation.objects.all().delete() PortfolioInvitation.objects.all().delete()
@ -1554,7 +1552,6 @@ class TestPortfolioInvitedMemberDomainsView(TestWithUser, WebTest):
response = self.client.get(reverse("invitedmember-domains", kwargs={"pk": self.invitation.id})) response = self.client.get(reverse("invitedmember-domains", kwargs={"pk": self.invitation.id}))
# Make sure the page loaded, and that we're on the right page # Make sure the page loaded, and that we're on the right page
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertContains(response, self.invited_member_email) self.assertContains(response, self.invited_member_email)
@ -1593,7 +1590,5 @@ class TestPortfolioInvitedMemberDomainsView(TestWithUser, WebTest):
response = self.client.get(reverse("invitedmember-domains", kwargs={"pk": "0"})) response = self.client.get(reverse("invitedmember-domains", kwargs={"pk": "0"}))
# Make sure the response is not found # Make sure the response is not found
self.assertEqual(response.status_code, 404) self.assertEqual(response.status_code, 404)

View file

@ -4,7 +4,6 @@ from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.views import View from django.views import View
from registrar.models import UserDomainRole, Domain, DomainInformation, User from registrar.models import UserDomainRole, Domain, DomainInformation, User
from django.contrib.auth.decorators import login_required
from django.urls import reverse from django.urls import reverse
from django.db.models import Q from django.db.models import Q
@ -47,7 +46,6 @@ class PortfolioMemberDomainsJson(PortfolioMemberDomainsPermission, View):
} }
) )
def get_domain_ids_from_request(self, request): def get_domain_ids_from_request(self, request):
"""Get domain ids from request. """Get domain ids from request.
@ -64,27 +62,29 @@ class PortfolioMemberDomainsJson(PortfolioMemberDomainsPermission, View):
if member_only: if member_only:
if member_id: if member_id:
member = get_object_or_404(User, pk=member_id) member = get_object_or_404(User, pk=member_id)
domain_info_ids = DomainInformation.objects.filter(portfolio=portfolio).values_list("domain_id", flat=True) domain_info_ids = DomainInformation.objects.filter(portfolio=portfolio).values_list(
"domain_id", flat=True
)
user_domain_roles = UserDomainRole.objects.filter(user=member).values_list("domain_id", flat=True) user_domain_roles = UserDomainRole.objects.filter(user=member).values_list("domain_id", flat=True)
return domain_info_ids.intersection(user_domain_roles) return domain_info_ids.intersection(user_domain_roles)
elif email: elif email:
domain_info_ids = DomainInformation.objects.filter(portfolio=portfolio).values_list("domain_id", flat=True) domain_info_ids = DomainInformation.objects.filter(portfolio=portfolio).values_list(
"domain_id", flat=True
)
domain_invitations = DomainInvitation.objects.filter(email=email).values_list("domain_id", flat=True) domain_invitations = DomainInvitation.objects.filter(email=email).values_list("domain_id", flat=True)
return domain_info_ids.intersection(domain_invitations) return domain_info_ids.intersection(domain_invitations)
else: else:
domain_infos = DomainInformation.objects.filter(portfolio=portfolio) domain_infos = DomainInformation.objects.filter(portfolio=portfolio)
return domain_infos.values_list("domain_id", flat=True) return domain_infos.values_list("domain_id", flat=True)
logger.warning("Invalid search criteria, returning empty results list") logger.warning("Invalid search criteria, returning empty results list")
return [] return []
def apply_search(self, queryset, request): def apply_search(self, queryset, request):
search_term = request.GET.get("search_term") search_term = request.GET.get("search_term")
if search_term: if search_term:
queryset = queryset.filter(Q(name__icontains=search_term)) queryset = queryset.filter(Q(name__icontains=search_term))
return queryset return queryset
def apply_sorting(self, queryset, request): def apply_sorting(self, queryset, request):
sort_by = request.GET.get("sort_by", "name") sort_by = request.GET.get("sort_by", "name")
order = request.GET.get("order", "asc") order = request.GET.get("order", "asc")
@ -92,7 +92,6 @@ class PortfolioMemberDomainsJson(PortfolioMemberDomainsPermission, View):
sort_by = f"-{sort_by}" sort_by = f"-{sort_by}"
return queryset.order_by(sort_by) return queryset.order_by(sort_by)
def serialize_domain(self, domain, user): def serialize_domain(self, domain, user):
suborganization_name = None suborganization_name = None
try: try:

View file

@ -1,6 +1,5 @@
from django.http import JsonResponse from django.http import JsonResponse
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.contrib.auth.decorators import login_required
from django.db.models import Value, F, CharField, TextField, Q, Case, When from django.db.models import Value, F, CharField, TextField, Q, Case, When
from django.db.models.functions import Concat, Coalesce from django.db.models.functions import Concat, Coalesce
from django.urls import reverse from django.urls import reverse
@ -14,7 +13,7 @@ from registrar.views.utility.mixins import PortfolioMembersPermission
class PortfolioMembersJson(PortfolioMembersPermission, View): class PortfolioMembersJson(PortfolioMembersPermission, View):
def get(self, request): def get(self, request):
"""Fetch members (permissions and invitations) for the given portfolio.""" """Fetch members (permissions and invitations) for the given portfolio."""
@ -52,7 +51,6 @@ class PortfolioMembersJson(PortfolioMembersPermission, View):
} }
) )
def initial_permissions_search(self, portfolio): def initial_permissions_search(self, portfolio):
"""Perform initial search for permissions before applying any filters.""" """Perform initial search for permissions before applying any filters."""
permissions = UserPortfolioPermission.objects.filter(portfolio=portfolio) permissions = UserPortfolioPermission.objects.filter(portfolio=portfolio)
@ -96,7 +94,6 @@ class PortfolioMembersJson(PortfolioMembersPermission, View):
) )
return permissions return permissions
def initial_invitations_search(self, portfolio): def initial_invitations_search(self, portfolio):
"""Perform initial invitations search before applying any filters.""" """Perform initial invitations search before applying any filters."""
invitations = PortfolioInvitation.objects.filter(portfolio=portfolio) invitations = PortfolioInvitation.objects.filter(portfolio=portfolio)
@ -121,7 +118,6 @@ class PortfolioMembersJson(PortfolioMembersPermission, View):
) )
return invitations return invitations
def apply_search_term(self, queryset, request): def apply_search_term(self, queryset, request):
"""Apply search term to the queryset.""" """Apply search term to the queryset."""
search_term = request.GET.get("search_term", "").lower() search_term = request.GET.get("search_term", "").lower()
@ -133,7 +129,6 @@ class PortfolioMembersJson(PortfolioMembersPermission, View):
) )
return queryset return queryset
def apply_sorting(self, queryset, request): def apply_sorting(self, queryset, request):
"""Apply sorting to the queryset.""" """Apply sorting to the queryset."""
sort_by = request.GET.get("sort_by", "id") # Default to 'id' sort_by = request.GET.get("sort_by", "id") # Default to 'id'
@ -147,7 +142,6 @@ class PortfolioMembersJson(PortfolioMembersPermission, View):
queryset = queryset.order_by(sort_by) queryset = queryset.order_by(sort_by)
return queryset return queryset
def serialize_members(self, request, portfolio, item, user): def serialize_members(self, request, portfolio, item, user):
# Check if the user can edit other users # Check if the user can edit other users
user_can_edit_other_users = any( user_can_edit_other_users = any(

View file

@ -136,7 +136,8 @@ class PortfolioMemberEditView(PortfolioMemberEditPermissionView, View):
"member": user, # Pass the user object again to the template "member": user, # Pass the user object again to the template
}, },
) )
class PortfolioMemberDomainsView(PortfolioMemberDomainsPermissionView, View): class PortfolioMemberDomainsView(PortfolioMemberDomainsPermissionView, View):
template_name = "portfolio_member_domains.html" template_name = "portfolio_member_domains.html"
@ -155,7 +156,6 @@ class PortfolioMemberDomainsView(PortfolioMemberDomainsPermissionView, View):
) )
class PortfolioInvitedMemberView(PortfolioMemberPermissionView, View): class PortfolioInvitedMemberView(PortfolioMemberPermissionView, View):
template_name = "portfolio_member.html" template_name = "portfolio_member.html"
@ -227,7 +227,8 @@ class PortfolioInvitedMemberEditView(PortfolioMemberEditPermissionView, View):
"invitation": portfolio_invitation, # Pass the user object again to the template "invitation": portfolio_invitation, # Pass the user object again to the template
}, },
) )
class PortfolioInvitedMemberDomainsView(PortfolioMemberDomainsPermissionView, View): class PortfolioInvitedMemberDomainsView(PortfolioMemberDomainsPermissionView, View):
template_name = "portfolio_member_domains.html" template_name = "portfolio_member_domains.html"

View file

@ -278,6 +278,7 @@ class PortfolioMemberEditPermissionView(PortfolioMemberEditPermission, Portfolio
`template_name`. `template_name`.
""" """
class PortfolioMemberDomainsPermissionView(PortfolioMemberDomainsPermission, PortfolioBasePermissionView, abc.ABC): class PortfolioMemberDomainsPermissionView(PortfolioMemberDomainsPermission, PortfolioBasePermissionView, abc.ABC):
"""Abstract base view for portfolio member domains views that enforces permissions. """Abstract base view for portfolio member domains views that enforces permissions.