mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-01 23:42:17 +02:00
DomainInvitationAdmin tests
This commit is contained in:
parent
952f1c35cc
commit
7994484fed
3 changed files with 140 additions and 6 deletions
|
@ -1820,7 +1820,7 @@ class DomainInvitationAdmin(BaseInvitationAdmin):
|
||||||
if request.user.groups.filter(name="omb_analysts_group").exists():
|
if request.user.groups.filter(name="omb_analysts_group").exists():
|
||||||
return (
|
return (
|
||||||
obj.domain.domain_info.converted_generic_org_type == DomainRequest.OrganizationChoices.FEDERAL
|
obj.domain.domain_info.converted_generic_org_type == DomainRequest.OrganizationChoices.FEDERAL
|
||||||
and obj.domain.domain_info.federal_type == BranchChoices.EXECUTIVE
|
and obj.domain.domain_info.converted_federal_type == BranchChoices.EXECUTIVE
|
||||||
)
|
)
|
||||||
return super().has_view_permission(request, obj)
|
return super().has_view_permission(request, obj)
|
||||||
|
|
||||||
|
|
|
@ -1009,6 +1009,25 @@ def create_user(**kwargs):
|
||||||
user.groups.set([group])
|
user.groups.set([group])
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
def create_omb_analyst_user(**kwargs):
|
||||||
|
"""Creates a analyst user with is_staff=True and the group cisa_analysts_group"""
|
||||||
|
User = get_user_model()
|
||||||
|
p = "userpass"
|
||||||
|
user = User.objects.create_user(
|
||||||
|
username=kwargs.get("username", "ombanalystuser"),
|
||||||
|
email=kwargs.get("email", "ombanalyst@example.com"),
|
||||||
|
first_name=kwargs.get("first_name", "first"),
|
||||||
|
last_name=kwargs.get("last_name", "last"),
|
||||||
|
is_staff=kwargs.get("is_staff", True),
|
||||||
|
title=kwargs.get("title", "title"),
|
||||||
|
password=kwargs.get("password", p),
|
||||||
|
phone=kwargs.get("phone", "8003111234"),
|
||||||
|
)
|
||||||
|
# Retrieve the group or create it if it doesn't exist
|
||||||
|
group, _ = UserGroup.objects.get_or_create(name="omb_analysts_group")
|
||||||
|
# Add the user to the group
|
||||||
|
user.groups.set([group])
|
||||||
|
return user
|
||||||
|
|
||||||
def create_test_user():
|
def create_test_user():
|
||||||
username = "test_user"
|
username = "test_user"
|
||||||
|
|
|
@ -3,6 +3,7 @@ from django.utils import timezone
|
||||||
from django.test import TestCase, RequestFactory, Client
|
from django.test import TestCase, RequestFactory, Client
|
||||||
from django.contrib.admin.sites import AdminSite
|
from django.contrib.admin.sites import AdminSite
|
||||||
from registrar import models
|
from registrar import models
|
||||||
|
from registrar.utility.constants import BranchChoices
|
||||||
from registrar.utility.email import EmailSendingError
|
from registrar.utility.email import EmailSendingError
|
||||||
from registrar.utility.errors import MissingEmailError
|
from registrar.utility.errors import MissingEmailError
|
||||||
from waffle.testutils import override_flag
|
from waffle.testutils import override_flag
|
||||||
|
@ -57,6 +58,7 @@ from .common import (
|
||||||
MockDbForSharedTests,
|
MockDbForSharedTests,
|
||||||
AuditedAdminMockData,
|
AuditedAdminMockData,
|
||||||
completed_domain_request,
|
completed_domain_request,
|
||||||
|
create_omb_analyst_user,
|
||||||
create_test_user,
|
create_test_user,
|
||||||
generic_domain_object,
|
generic_domain_object,
|
||||||
less_console_noise,
|
less_console_noise,
|
||||||
|
@ -136,18 +138,21 @@ class TestDomainInvitationAdmin(WebTest):
|
||||||
csrf_checks = False
|
csrf_checks = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(self):
|
def setUpClass(cls):
|
||||||
super().setUpClass()
|
super().setUpClass()
|
||||||
self.site = AdminSite()
|
cls.site = AdminSite()
|
||||||
self.factory = RequestFactory()
|
cls.factory = RequestFactory()
|
||||||
self.superuser = create_superuser()
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
self.superuser = create_superuser()
|
||||||
|
self.cisa_analyst = create_user()
|
||||||
|
self.omb_analyst = create_omb_analyst_user()
|
||||||
self.admin = ListHeaderAdmin(model=DomainInvitationAdmin, admin_site=AdminSite())
|
self.admin = ListHeaderAdmin(model=DomainInvitationAdmin, admin_site=AdminSite())
|
||||||
self.domain = Domain.objects.create(name="example.com")
|
self.domain = Domain.objects.create(name="example.com")
|
||||||
|
self.fed_agency = FederalAgency.objects.create(agency="New FedExec Agency", federal_type=BranchChoices.EXECUTIVE)
|
||||||
self.portfolio = Portfolio.objects.create(organization_name="new portfolio", creator=self.superuser)
|
self.portfolio = Portfolio.objects.create(organization_name="new portfolio", creator=self.superuser)
|
||||||
DomainInformation.objects.create(domain=self.domain, portfolio=self.portfolio, creator=self.superuser)
|
self.domain_info = DomainInformation.objects.create(domain=self.domain, portfolio=self.portfolio, creator=self.superuser)
|
||||||
"""Create a client object"""
|
"""Create a client object"""
|
||||||
self.client = Client(HTTP_HOST="localhost:8080")
|
self.client = Client(HTTP_HOST="localhost:8080")
|
||||||
self.client.force_login(self.superuser)
|
self.client.force_login(self.superuser)
|
||||||
|
@ -159,10 +164,120 @@ class TestDomainInvitationAdmin(WebTest):
|
||||||
DomainInvitation.objects.all().delete()
|
DomainInvitation.objects.all().delete()
|
||||||
DomainInformation.objects.all().delete()
|
DomainInformation.objects.all().delete()
|
||||||
Portfolio.objects.all().delete()
|
Portfolio.objects.all().delete()
|
||||||
|
self.fed_agency.delete()
|
||||||
Domain.objects.all().delete()
|
Domain.objects.all().delete()
|
||||||
Contact.objects.all().delete()
|
Contact.objects.all().delete()
|
||||||
User.objects.all().delete()
|
User.objects.all().delete()
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_analyst_view(self):
|
||||||
|
"""Ensure regular analysts can view domain invitations."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
self.client.force_login(self.cisa_analyst)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_changelist"))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertContains(response, invitation.email)
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_omb_analyst_view_non_feb_domain(self):
|
||||||
|
"""Ensure OMB analysts cannot view non-federal domains."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
self.client.force_login(self.omb_analyst)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_changelist"))
|
||||||
|
self.assertNotContains(response, invitation.email)
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_omb_analyst_view_feb_domain(self):
|
||||||
|
"""Ensure OMB analysts can view federal executive branch domains."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
self.portfolio.organization_type = DomainRequest.OrganizationChoices.FEDERAL
|
||||||
|
self.portfolio.federal_agency = self.fed_agency
|
||||||
|
self.portfolio.save()
|
||||||
|
self.client.force_login(self.omb_analyst)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_changelist"))
|
||||||
|
self.assertContains(response, invitation.email)
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_superuser_view(self):
|
||||||
|
"""Ensure superusers can view domain invitations."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_changelist"))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertContains(response, invitation.email)
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_analyst_change(self):
|
||||||
|
"""Ensure regular analysts can view domain invitations but not update."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
self.client.force_login(self.cisa_analyst)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_change", args=[invitation.id]))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertContains(response, invitation.email)
|
||||||
|
# test whether fields are readonly or editable
|
||||||
|
self.assertNotContains(response, "id_domain")
|
||||||
|
self.assertNotContains(response, "id_email")
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_omb_analyst_change_non_feb_domain(self):
|
||||||
|
"""Ensure OMB analysts cannot change non-federal domains."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
self.client.force_login(self.omb_analyst)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_change", args=[invitation.id]))
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_omb_analyst_change_feb_domain(self):
|
||||||
|
"""Ensure OMB analysts can view federal executive branch domains."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
# update domain
|
||||||
|
self.portfolio.organization_type = DomainRequest.OrganizationChoices.FEDERAL
|
||||||
|
self.portfolio.federal_agency = self.fed_agency
|
||||||
|
self.portfolio.save()
|
||||||
|
self.client.force_login(self.omb_analyst)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_change", args=[invitation.id]))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertContains(response, invitation.email)
|
||||||
|
# test whether fields are readonly or editable
|
||||||
|
self.assertNotContains(response, "id_domain")
|
||||||
|
self.assertNotContains(response, "id_email")
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_superuser_change(self):
|
||||||
|
"""Ensure superusers can change domain invitations."""
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_change", args=[invitation.id]))
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertContains(response, invitation.email)
|
||||||
|
# test whether fields are readonly or editable
|
||||||
|
self.assertContains(response, "id_domain")
|
||||||
|
self.assertContains(response, "id_email")
|
||||||
|
|
||||||
|
@less_console_noise_decorator
|
||||||
|
def test_omb_analyst_filter_feb_domain(self):
|
||||||
|
"""Ensure OMB analysts can apply filters and only federal executive branch domains show."""
|
||||||
|
# create invitation on domain that is not FEB
|
||||||
|
invitation = DomainInvitation.objects.create(email="test@example.com", domain=self.domain)
|
||||||
|
self.client.force_login(self.omb_analyst)
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_changelist"), {"status": DomainInvitation.DomainInvitationStatus.INVITED})
|
||||||
|
self.assertNotContains(response, invitation.email)
|
||||||
|
# update domain
|
||||||
|
self.portfolio.organization_type = DomainRequest.OrganizationChoices.FEDERAL
|
||||||
|
self.portfolio.federal_agency = self.fed_agency
|
||||||
|
self.portfolio.save()
|
||||||
|
response = self.client.get(reverse("admin:registrar_domaininvitation_changelist"), {"status": DomainInvitation.DomainInvitationStatus.INVITED})
|
||||||
|
self.assertContains(response, invitation.email)
|
||||||
|
|
||||||
|
# test_analyst_view
|
||||||
|
# test_omb_analyst_view_non_feb_domain
|
||||||
|
# test_omb_analyst_view_feb_domain
|
||||||
|
# test_superuser_view
|
||||||
|
# test_analyst_change
|
||||||
|
# test_omb_analyst_change_non_feb_domain
|
||||||
|
# test_omb_analyst_change_feb_domain
|
||||||
|
# test_superuser
|
||||||
|
# test_filter_feb
|
||||||
|
|
||||||
|
|
||||||
@less_console_noise_decorator
|
@less_console_noise_decorator
|
||||||
def test_has_model_description(self):
|
def test_has_model_description(self):
|
||||||
"""Tests if this model has a model description on the table view"""
|
"""Tests if this model has a model description on the table view"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue