mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-01 08:43:30 +02:00
Add tests
This commit is contained in:
parent
ebee04e501
commit
17c231a22a
2 changed files with 223 additions and 1 deletions
1
src/registrar/tests/data/fake_election_domains.csv
Normal file
1
src/registrar/tests/data/fake_election_domains.csv
Normal file
|
@ -0,0 +1 @@
|
||||||
|
manualtransmission.gov
|
|
|
@ -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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue