Add tests

This commit is contained in:
zandercymatics 2024-04-05 10:30:55 -06:00
parent ebee04e501
commit 17c231a22a
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
2 changed files with 223 additions and 1 deletions

View file

@ -0,0 +1 @@
manualtransmission.gov
1 manualtransmission.gov

View file

@ -1,5 +1,6 @@
import copy import copy
from datetime import date, datetime, time from datetime import date, datetime, time
from unittest import skip
from django.utils import timezone from django.utils import timezone
from django.test import TestCase from django.test import TestCase
@ -7,6 +8,9 @@ from django.test import TestCase
from registrar.models import ( from registrar.models import (
User, User,
Domain, Domain,
DomainRequest,
Contact,
Website,
DomainInvitation, DomainInvitation,
TransitionDomain, TransitionDomain,
DomainInformation, DomainInformation,
@ -18,7 +22,224 @@ from django.core.management import call_command
from unittest.mock import patch, call from unittest.mock import patch, call
from epplibwrapper import commands, common from epplibwrapper import commands, common
from .common import MockEppLib, less_console_noise from .common import MockEppLib, less_console_noise, completed_domain_request
from api.tests.common import less_console_noise_decorator
class TestPopulateOrganizationType(MockEppLib):
"""Tests for the populate_organization_type script"""
def setUp(self):
"""Creates a fake domain object"""
super().setUp()
# Get the domain requests
self.domain_request_1 = completed_domain_request(
name="lasers.gov",
generic_org_type=DomainRequest.OrganizationChoices.FEDERAL,
is_election_board=True,
)
self.domain_request_2 = completed_domain_request(
name="readysetgo.gov",
generic_org_type=DomainRequest.OrganizationChoices.CITY,
)
self.domain_request_3 = completed_domain_request(
name="manualtransmission.gov",
generic_org_type=DomainRequest.OrganizationChoices.TRIBAL,
)
self.domain_request_4 = completed_domain_request(
name="saladandfries.gov",
generic_org_type=DomainRequest.OrganizationChoices.TRIBAL,
is_election_board=True,
)
# Approve all three requests
self.domain_request_1.approve()
self.domain_request_2.approve()
self.domain_request_3.approve()
self.domain_request_4.approve()
# Get the domains
self.domain_1 = Domain.objects.get(name="lasers.gov")
self.domain_2 = Domain.objects.get(name="readysetgo.gov")
self.domain_3 = Domain.objects.get(name="manualtransmission.gov")
self.domain_4 = Domain.objects.get(name="saladandfries.gov")
# Get the domain infos
self.domain_info_1 = DomainInformation.objects.get(domain=self.domain_1)
self.domain_info_2 = DomainInformation.objects.get(domain=self.domain_2)
self.domain_info_3 = DomainInformation.objects.get(domain=self.domain_3)
self.domain_info_4 = DomainInformation.objects.get(domain=self.domain_4)
def tearDown(self):
"""Deletes all DB objects related to migrations"""
super().tearDown()
# Delete domains and related information
Domain.objects.all().delete()
DomainInformation.objects.all().delete()
DomainRequest.objects.all().delete()
User.objects.all().delete()
Contact.objects.all().delete()
Website.objects.all().delete()
@less_console_noise_decorator
def run_populate_organization_type(self):
"""
This method executes the populate_organization_type command.
The 'call_command' function from Django's management framework is then used to
execute the populate_organization_type command with the specified arguments.
"""
with patch(
"registrar.management.commands.utility.terminal_helper.TerminalHelper.query_yes_no_exit", # noqa
return_value=True,
):
call_command("populate_organization_type", "registrar/tests/data/fake_election_domains.csv", debug=True)
def assert_expected_org_values_on_request_and_info(
self,
domain_request: DomainRequest,
domain_info: DomainInformation,
expected_values: dict,
):
"""
This is a a helper function that ensures that:
1. DomainRequest and DomainInformation (on given objects) are equivalent
2. That generic_org_type, is_election_board, and organization_type are equal to passed in values
"""
# Test domain request
self.assertEqual(domain_request.generic_org_type, expected_values['generic_org_type'])
self.assertEqual(domain_request.is_election_board, expected_values['is_election_board'])
self.assertEqual(domain_request.organization_type, expected_values['organization_type'])
# Test domain info
self.assertEqual(domain_info.generic_org_type, expected_values['generic_org_type'])
self.assertEqual(domain_info.is_election_board, expected_values['is_election_board'])
self.assertEqual(domain_info.organization_type, expected_values['organization_type'])
def test_request_and_info_city_not_in_csv(self):
"""Tests what happens to a city domain that is not defined in the CSV"""
city_request = self.domain_request_2
city_info = self.domain_request_2
# Make sure that all data is correct before proceeding.
# Since the presave fixture is in effect, we should expect that
# is_election_board is equal to none, even though we tried to define it as "True"
expected_values = {
'is_election_board': False,
'generic_org_type': DomainRequest.OrganizationChoices.CITY,
'organization_type': DomainRequest.OrgChoicesElectionOffice.CITY,
}
self.assert_expected_org_values_on_request_and_info(city_request, city_info, expected_values)
# Run the populate script
try:
self.run_populate_organization_type()
except Exception as e:
self.fail(f"Could not run populate_organization_type script. Failed with exception: {e}")
# All values should be the same
self.assert_expected_org_values_on_request_and_info(city_request, city_info, expected_values)
def test_request_and_info_federal(self):
"""Tests what happens to a federal domain with is_election_board=True (which should be reverted to None)"""
federal_request = self.domain_request_1
federal_info = self.domain_info_1
# Make sure that all data is correct before proceeding.
# Since the presave fixture is in effect, we should expect that
# is_election_board is equal to none, even though we tried to define it as "True"
# TODO - either add some logging if this happens or a ValueError in the original ticket.
# Or FSM? Probably FSM.
expected_values = {
'is_election_board': None,
'generic_org_type': DomainRequest.OrganizationChoices.FEDERAL,
'organization_type': DomainRequest.OrgChoicesElectionOffice.FEDERAL,
}
self.assert_expected_org_values_on_request_and_info(federal_request, federal_info, expected_values)
# Run the populate script
try:
self.run_populate_organization_type()
except Exception as e:
self.fail(f"Could not run populate_organization_type script. Failed with exception: {e}")
# All values should be the same
self.assert_expected_org_values_on_request_and_info(federal_request, federal_info, expected_values)
def test_request_and_info_tribal_add_election_office(self):
"""
Tests if a tribal domain in the election csv changes organization_type to TRIBAL - ELECTION
for the domain request and the domain info
"""
tribal_request = self.domain_request_3
tribal_info = self.domain_info_3
# Make sure that all data is correct before proceeding.
# Because the presave fixture is in place when creating this, we should expect that the
# organization_type variable is already pre-populated. We will test what happens when
# it is not in another test.
expected_values = {
'is_election_board': False,
'generic_org_type': DomainRequest.OrganizationChoices.TRIBAL,
'organization_type': DomainRequest.OrgChoicesElectionOffice.TRIBAL
}
self.assert_expected_org_values_on_request_and_info(tribal_request, tribal_info, expected_values)
# Run the populate script
try:
self.run_populate_organization_type()
except Exception as e:
self.fail(f"Could not run populate_organization_type script. Failed with exception: {e}")
# Because we define this in the "csv", we expect that is election board will switch to True,
# and organization_type will now be tribal_election
expected_values["is_election_board"] = True
expected_values["organization_type"] = DomainRequest.OrgChoicesElectionOffice.TRIBAL_ELECTION
self.assert_expected_org_values_on_request_and_info(tribal_request, tribal_info, expected_values)
def test_request_and_info_tribal_remove_election_office(self):
"""
Tests if a tribal domain in the election csv changes organization_type to TRIBAL
when it used to be TRIBAL - ELECTION
for the domain request and the domain info
"""
tribal_election_request = self.domain_request_4
tribal_election_info = self.domain_info_4
# Make sure that all data is correct before proceeding.
# Because the presave fixture is in place when creating this, we should expect that the
# organization_type variable is already pre-populated. We will test what happens when
# it is not in another test.
expected_values = {
'is_election_board': True,
'generic_org_type': DomainRequest.OrganizationChoices.TRIBAL,
'organization_type': DomainRequest.OrgChoicesElectionOffice.TRIBAL_ELECTION
}
self.assert_expected_org_values_on_request_and_info(tribal_election_request, tribal_election_info, expected_values)
# Run the populate script
try:
self.run_populate_organization_type()
except Exception as e:
self.fail(f"Could not run populate_organization_type script. Failed with exception: {e}")
# Because we don't define this in the "csv", we expect that is election board will switch to False,
# and organization_type will now be tribal
expected_values["is_election_board"] = False
expected_values["organization_type"] = DomainRequest.OrgChoicesElectionOffice.TRIBAL
self.assert_expected_org_values_on_request_and_info(tribal_election_request, tribal_election_info, expected_values)
@skip("TODO")
def test_transition_data(self):
"""Tests for how this script interacts with prexisting data (for instance, stable)"""
# Make instead of mocking we can literally just run the transition domain scripts?
pass
class TestPopulateFirstReady(TestCase): class TestPopulateFirstReady(TestCase):