Revise Domain Application model to change the status constants to use tuples

This commit is contained in:
Rachid Mrad 2023-12-05 19:18:11 -05:00
parent 58bc602742
commit d3b732f735
No known key found for this signature in database
GPG key ID: EF38E4CEC4A8F3CF
12 changed files with 182 additions and 160 deletions

View file

@ -515,14 +515,14 @@ class DomainApplicationAdminForm(forms.ModelForm):
current_state = application.status current_state = application.status
# first option in status transitions is current state # first option in status transitions is current state
available_transitions = [(current_state, current_state)] available_transitions = [(current_state, application.get_status_display())]
transitions = get_available_FIELD_transitions( transitions = get_available_FIELD_transitions(
application, models.DomainApplication._meta.get_field("status") application, models.DomainApplication._meta.get_field("status")
) )
for transition in transitions: for transition in transitions:
available_transitions.append((transition.target, transition.target)) available_transitions.append((transition.target, transition.target.label))
# only set the available transitions if the user is not restricted # only set the available transitions if the user is not restricted
# from editing the domain application; otherwise, the form will be # from editing the domain application; otherwise, the form will be
@ -638,10 +638,10 @@ class DomainApplicationAdmin(ListHeaderAdmin):
if ( if (
obj obj
and original_obj.status == models.DomainApplication.APPROVED and original_obj.status == models.DomainApplication.ApplicationStatus.APPROVED
and ( and (
obj.status == models.DomainApplication.REJECTED obj.status == models.DomainApplication.ApplicationStatus.REJECTED
or obj.status == models.DomainApplication.INELIGIBLE or obj.status == models.DomainApplication.ApplicationStatus.INELIGIBLE
) )
and not obj.domain_is_not_active() and not obj.domain_is_not_active()
): ):
@ -663,14 +663,14 @@ class DomainApplicationAdmin(ListHeaderAdmin):
else: else:
if obj.status != original_obj.status: if obj.status != original_obj.status:
status_method_mapping = { status_method_mapping = {
models.DomainApplication.STARTED: None, models.DomainApplication.ApplicationStatus.STARTED: None,
models.DomainApplication.SUBMITTED: obj.submit, models.DomainApplication.ApplicationStatus.SUBMITTED: obj.submit,
models.DomainApplication.IN_REVIEW: obj.in_review, models.DomainApplication.ApplicationStatus.IN_REVIEW: obj.in_review,
models.DomainApplication.ACTION_NEEDED: obj.action_needed, models.DomainApplication.ApplicationStatus.ACTION_NEEDED: obj.action_needed,
models.DomainApplication.APPROVED: obj.approve, models.DomainApplication.ApplicationStatus.APPROVED: obj.approve,
models.DomainApplication.WITHDRAWN: obj.withdraw, models.DomainApplication.ApplicationStatus.WITHDRAWN: obj.withdraw,
models.DomainApplication.REJECTED: obj.reject, models.DomainApplication.ApplicationStatus.REJECTED: obj.reject,
models.DomainApplication.INELIGIBLE: (obj.reject_with_prejudice), models.DomainApplication.ApplicationStatus.INELIGIBLE: (obj.reject_with_prejudice),
} }
selected_method = status_method_mapping.get(obj.status) selected_method = status_method_mapping.get(obj.status)
if selected_method is None: if selected_method is None:

View file

@ -65,22 +65,22 @@ function openInNewTab(el, removeAttribute = false){
/** An IIFE to capitalize statuses in the Domain Application status dropdown /** An IIFE to capitalize statuses in the Domain Application status dropdown
*/ */
(function (){ // (function (){
function capitalizeFirstLetterInDropdownOptions(dropdown_id) { // function capitalizeFirstLetterInDropdownOptions(dropdown_id) {
// Grabs the status dropdown // // Grabs the status dropdown
var selectElement = document.getElementById(dropdown_id); // var selectElement = document.getElementById(dropdown_id);
if (selectElement) { // if (selectElement) {
var options = selectElement.options; // var options = selectElement.options;
// Loop through each option, and convert to sentence case // // Loop through each option, and convert to sentence case
for (var i = 0; i < options.length; i++) { // for (var i = 0; i < options.length; i++) {
var option = options[i]; // var option = options[i];
option.text = option.text.charAt(0).toUpperCase() + option.text.slice(1).toLowerCase(); // option.text = option.text.charAt(0).toUpperCase() + option.text.slice(1).toLowerCase();
} // }
} // }
} // }
capitalizeFirstLetterInDropdownOptions('id_status'); // capitalizeFirstLetterInDropdownOptions('id_status');
})(); // })();
// Function to check for the existence of the "to" select list element in the DOM, and if and when found, // Function to check for the existence of the "to" select list element in the DOM, and if and when found,
// initialize the associated widget // initialize the associated widget

View file

@ -214,7 +214,7 @@ class DomainFixture(DomainApplicationFixture):
for user in users: for user in users:
# approve one of each users in review status domains # approve one of each users in review status domains
application = DomainApplication.objects.filter(creator=user, status=DomainApplication.IN_REVIEW).last() application = DomainApplication.objects.filter(creator=user, status=DomainApplication.ApplicationStatus.IN_REVIEW).last()
logger.debug(f"Approving {application} for {user}") logger.debug(f"Approving {application} for {user}")
application.approve() application.approve()
application.save() application.save()

View file

@ -0,0 +1,31 @@
# Generated by Django 4.2.7 on 2023-12-05 23:14
from django.db import migrations
import django_fsm
class Migration(migrations.Migration):
dependencies = [
("registrar", "0053_alter_domain_state_alter_domainapplication_status_and_more"),
]
operations = [
migrations.AlterField(
model_name="domainapplication",
name="status",
field=django_fsm.FSMField(
choices=[
("started", "Started"),
("submitted", "Submitted"),
("in_review", "In review"),
("action_needed", "Action needed"),
("approved", "Approved"),
("withdrawn", "Withdrawn"),
("rejected", "Rejected"),
("ineligible", "Ineligible"),
],
default="started",
max_length=50,
),
),
]

View file

@ -19,25 +19,16 @@ class DomainApplication(TimeStampedModel):
"""A registrant's application for a new domain.""" """A registrant's application for a new domain."""
# #### Constants for choice fields #### # Constants for choice fields
STARTED = "started" class ApplicationStatus(models.TextChoices):
SUBMITTED = "submitted" STARTED = "started", "Started"
IN_REVIEW = "in review" SUBMITTED = "submitted", "Submitted"
ACTION_NEEDED = "action needed" IN_REVIEW = "in_review", "In review"
APPROVED = "approved" ACTION_NEEDED = "action_needed", "Action needed"
WITHDRAWN = "withdrawn" APPROVED = "approved", "Approved"
REJECTED = "rejected" WITHDRAWN = "withdrawn", "Withdrawn"
INELIGIBLE = "ineligible" REJECTED = "rejected", "Rejected"
STATUS_CHOICES = [ INELIGIBLE = "ineligible", "Ineligible"
(STARTED, STARTED.capitalize()),
(SUBMITTED, SUBMITTED.capitalize()),
(IN_REVIEW, IN_REVIEW.capitalize()),
(ACTION_NEEDED, ACTION_NEEDED.capitalize()),
(APPROVED, APPROVED.capitalize()),
(WITHDRAWN, WITHDRAWN.capitalize()),
(REJECTED, REJECTED.capitalize()),
(INELIGIBLE, INELIGIBLE.capitalize()),
]
class StateTerritoryChoices(models.TextChoices): class StateTerritoryChoices(models.TextChoices):
ALABAMA = "AL", "Alabama (AL)" ALABAMA = "AL", "Alabama (AL)"
@ -363,8 +354,8 @@ class DomainApplication(TimeStampedModel):
# #### Internal fields about the application ##### # #### Internal fields about the application #####
status = FSMField( status = FSMField(
choices=STATUS_CHOICES, # possible states as an array of constants choices=ApplicationStatus.choices, # possible states as an array of constants
default=STARTED, # sensible default default=ApplicationStatus.STARTED, # sensible default
protected=False, # can change state directly, particularly in Django admin protected=False, # can change state directly, particularly in Django admin
) )
# This is the application user who created this application. The contact # This is the application user who created this application. The contact
@ -590,7 +581,7 @@ class DomainApplication(TimeStampedModel):
except EmailSendingError: except EmailSendingError:
logger.warning("Failed to send confirmation email", exc_info=True) logger.warning("Failed to send confirmation email", exc_info=True)
@transition(field="status", source=[STARTED, ACTION_NEEDED, WITHDRAWN], target=SUBMITTED) @transition(field="status", source=[ApplicationStatus.STARTED, ApplicationStatus.ACTION_NEEDED, ApplicationStatus.WITHDRAWN], target=ApplicationStatus.SUBMITTED)
def submit(self): def submit(self):
"""Submit an application that is started. """Submit an application that is started.
@ -616,7 +607,7 @@ class DomainApplication(TimeStampedModel):
"emails/submission_confirmation_subject.txt", "emails/submission_confirmation_subject.txt",
) )
@transition(field="status", source=SUBMITTED, target=IN_REVIEW) @transition(field="status", source=ApplicationStatus.SUBMITTED, target=ApplicationStatus.IN_REVIEW)
def in_review(self): def in_review(self):
"""Investigate an application that has been submitted. """Investigate an application that has been submitted.
@ -628,7 +619,7 @@ class DomainApplication(TimeStampedModel):
"emails/status_change_in_review_subject.txt", "emails/status_change_in_review_subject.txt",
) )
@transition(field="status", source=[IN_REVIEW, REJECTED], target=ACTION_NEEDED) @transition(field="status", source=[ApplicationStatus.IN_REVIEW, ApplicationStatus.REJECTED], target=ApplicationStatus.ACTION_NEEDED)
def action_needed(self): def action_needed(self):
"""Send back an application that is under investigation or rejected. """Send back an application that is under investigation or rejected.
@ -642,8 +633,8 @@ class DomainApplication(TimeStampedModel):
@transition( @transition(
field="status", field="status",
source=[SUBMITTED, IN_REVIEW, REJECTED, INELIGIBLE], source=[ApplicationStatus.SUBMITTED, ApplicationStatus.IN_REVIEW, ApplicationStatus.REJECTED, ApplicationStatus.INELIGIBLE],
target=APPROVED, target=ApplicationStatus.APPROVED,
) )
def approve(self): def approve(self):
"""Approve an application that has been submitted. """Approve an application that has been submitted.
@ -676,7 +667,7 @@ class DomainApplication(TimeStampedModel):
"emails/status_change_approved_subject.txt", "emails/status_change_approved_subject.txt",
) )
@transition(field="status", source=[SUBMITTED, IN_REVIEW], target=WITHDRAWN) @transition(field="status", source=[ApplicationStatus.SUBMITTED, ApplicationStatus.IN_REVIEW], target=ApplicationStatus.WITHDRAWN)
def withdraw(self): def withdraw(self):
"""Withdraw an application that has been submitted.""" """Withdraw an application that has been submitted."""
self._send_status_update_email( self._send_status_update_email(
@ -687,8 +678,8 @@ class DomainApplication(TimeStampedModel):
@transition( @transition(
field="status", field="status",
source=[IN_REVIEW, APPROVED], source=[ApplicationStatus.IN_REVIEW, ApplicationStatus.APPROVED],
target=REJECTED, target=ApplicationStatus.REJECTED,
conditions=[domain_is_not_active], conditions=[domain_is_not_active],
) )
def reject(self): def reject(self):
@ -696,7 +687,7 @@ class DomainApplication(TimeStampedModel):
As side effects this will delete the domain and domain_information As side effects this will delete the domain and domain_information
(will cascade), and send an email notification.""" (will cascade), and send an email notification."""
if self.status == self.APPROVED: if self.status == self.ApplicationStatus.APPROVED:
domain_state = self.approved_domain.state domain_state = self.approved_domain.state
# Only reject if it exists on EPP # Only reject if it exists on EPP
if domain_state != Domain.State.UNKNOWN: if domain_state != Domain.State.UNKNOWN:
@ -712,8 +703,8 @@ class DomainApplication(TimeStampedModel):
@transition( @transition(
field="status", field="status",
source=[IN_REVIEW, APPROVED], source=[ApplicationStatus.IN_REVIEW, ApplicationStatus.APPROVED],
target=INELIGIBLE, target=ApplicationStatus.INELIGIBLE,
conditions=[domain_is_not_active], conditions=[domain_is_not_active],
) )
def reject_with_prejudice(self): def reject_with_prejudice(self):
@ -725,7 +716,7 @@ class DomainApplication(TimeStampedModel):
permissions classes test against. This will also delete the domain permissions classes test against. This will also delete the domain
and domain_information (will cascade) when they exist.""" and domain_information (will cascade) when they exist."""
if self.status == self.APPROVED: if self.status == self.ApplicationStatus.APPROVED:
domain_state = self.approved_domain.state domain_state = self.approved_domain.state
# Only reject if it exists on EPP # Only reject if it exists on EPP
if domain_state != Domain.State.UNKNOWN: if domain_state != Domain.State.UNKNOWN:

View file

@ -294,7 +294,7 @@ class AuditedAdminMockData:
self, self,
domain_type, domain_type,
item_name, item_name,
status=DomainApplication.STARTED, status=DomainApplication.ApplicationStatus.STARTED,
org_type="federal", org_type="federal",
federal_type="executive", federal_type="executive",
purpose="Purpose of the site", purpose="Purpose of the site",
@ -311,7 +311,7 @@ class AuditedAdminMockData:
title, email, and username. title, email, and username.
status (str - optional): Defines the status for DomainApplication, status (str - optional): Defines the status for DomainApplication,
e.g. DomainApplication.STARTED e.g. DomainApplication.ApplicationStatus.STARTED
org_type (str - optional): Sets a domains org_type org_type (str - optional): Sets a domains org_type
@ -348,19 +348,19 @@ class AuditedAdminMockData:
) )
return full_arg_dict return full_arg_dict
def create_full_dummy_domain_application(self, item_name, status=DomainApplication.STARTED): def create_full_dummy_domain_application(self, item_name, status=DomainApplication.ApplicationStatus.STARTED):
"""Creates a dummy domain application object""" """Creates a dummy domain application object"""
domain_application_kwargs = self.dummy_kwarg_boilerplate(self.APPLICATION, item_name, status) domain_application_kwargs = self.dummy_kwarg_boilerplate(self.APPLICATION, item_name, status)
application = DomainApplication.objects.get_or_create(**domain_application_kwargs)[0] application = DomainApplication.objects.get_or_create(**domain_application_kwargs)[0]
return application return application
def create_full_dummy_domain_information(self, item_name, status=DomainApplication.STARTED): def create_full_dummy_domain_information(self, item_name, status=DomainApplication.ApplicationStatus.STARTED):
"""Creates a dummy domain information object""" """Creates a dummy domain information object"""
domain_application_kwargs = self.dummy_kwarg_boilerplate(self.INFORMATION, item_name, status) domain_application_kwargs = self.dummy_kwarg_boilerplate(self.INFORMATION, item_name, status)
application = DomainInformation.objects.get_or_create(**domain_application_kwargs)[0] application = DomainInformation.objects.get_or_create(**domain_application_kwargs)[0]
return application return application
def create_full_dummy_domain_invitation(self, item_name, status=DomainApplication.STARTED): def create_full_dummy_domain_invitation(self, item_name, status=DomainApplication.ApplicationStatus.STARTED):
"""Creates a dummy domain invitation object""" """Creates a dummy domain invitation object"""
domain_application_kwargs = self.dummy_kwarg_boilerplate(self.INVITATION, item_name, status) domain_application_kwargs = self.dummy_kwarg_boilerplate(self.INVITATION, item_name, status)
application = DomainInvitation.objects.get_or_create(**domain_application_kwargs)[0] application = DomainInvitation.objects.get_or_create(**domain_application_kwargs)[0]
@ -374,7 +374,7 @@ class AuditedAdminMockData:
has_other_contacts=True, has_other_contacts=True,
has_current_website=True, has_current_website=True,
has_alternative_gov_domain=True, has_alternative_gov_domain=True,
status=DomainApplication.STARTED, status=DomainApplication.ApplicationStatus.STARTED,
): ):
"""A helper to create a dummy domain application object""" """A helper to create a dummy domain application object"""
application = None application = None
@ -455,7 +455,7 @@ def completed_application(
has_alternative_gov_domain=True, has_alternative_gov_domain=True,
has_about_your_organization=True, has_about_your_organization=True,
has_anything_else=True, has_anything_else=True,
status=DomainApplication.STARTED, status=DomainApplication.ApplicationStatus.STARTED,
user=False, user=False,
name="city.gov", name="city.gov",
): ):

View file

@ -61,7 +61,7 @@ class TestDomainAdmin(MockEppLib):
Make sure the short name is displaying in admin on the list page Make sure the short name is displaying in admin on the list page
""" """
self.client.force_login(self.superuser) self.client.force_login(self.superuser)
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
application.approve() application.approve()
response = self.client.get("/admin/registrar/domain/") response = self.client.get("/admin/registrar/domain/")
@ -282,7 +282,7 @@ class TestDomainApplicationAdminForm(TestCase):
form = DomainApplicationAdminForm(instance=self.application) form = DomainApplicationAdminForm(instance=self.application)
# Verify that the form choices match the available transitions for started # Verify that the form choices match the available transitions for started
expected_choices = [("started", "started"), ("submitted", "submitted")] expected_choices = [("started", "Started"), ("submitted", "Submitted")]
self.assertEqual(form.fields["status"].widget.choices, expected_choices) self.assertEqual(form.fields["status"].widget.choices, expected_choices)
def test_form_choices_when_no_instance(self): def test_form_choices_when_no_instance(self):
@ -355,7 +355,7 @@ class TestDomainApplicationAdmin(MockEppLib):
request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk)) request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk))
# Modify the application's property # Modify the application's property
application.status = DomainApplication.SUBMITTED application.status = DomainApplication.ApplicationStatus.SUBMITTED
# Use the model admin's save_model method # Use the model admin's save_model method
self.admin.save_model(request, application, form=None, change=True) self.admin.save_model(request, application, form=None, change=True)
@ -390,13 +390,13 @@ class TestDomainApplicationAdmin(MockEppLib):
with boto3_mocking.clients.handler_for("sesv2", mock_client): with boto3_mocking.clients.handler_for("sesv2", mock_client):
# Create a sample application # Create a sample application
application = completed_application(status=DomainApplication.SUBMITTED) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED)
# Create a mock request # Create a mock request
request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk)) request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk))
# Modify the application's property # Modify the application's property
application.status = DomainApplication.IN_REVIEW application.status = DomainApplication.ApplicationStatus.IN_REVIEW
# Use the model admin's save_model method # Use the model admin's save_model method
self.admin.save_model(request, application, form=None, change=True) self.admin.save_model(request, application, form=None, change=True)
@ -431,13 +431,13 @@ class TestDomainApplicationAdmin(MockEppLib):
with boto3_mocking.clients.handler_for("sesv2", mock_client): with boto3_mocking.clients.handler_for("sesv2", mock_client):
# Create a sample application # Create a sample application
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
# Create a mock request # Create a mock request
request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk)) request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk))
# Modify the application's property # Modify the application's property
application.status = DomainApplication.APPROVED application.status = DomainApplication.ApplicationStatus.APPROVED
# Use the model admin's save_model method # Use the model admin's save_model method
self.admin.save_model(request, application, form=None, change=True) self.admin.save_model(request, application, form=None, change=True)
@ -467,13 +467,13 @@ class TestDomainApplicationAdmin(MockEppLib):
User.objects.filter(email=EMAIL).delete() User.objects.filter(email=EMAIL).delete()
# Create a sample application # Create a sample application
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
# Create a mock request # Create a mock request
request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk)) request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk))
# Modify the application's property # Modify the application's property
application.status = DomainApplication.APPROVED application.status = DomainApplication.ApplicationStatus.APPROVED
# Use the model admin's save_model method # Use the model admin's save_model method
self.admin.save_model(request, application, form=None, change=True) self.admin.save_model(request, application, form=None, change=True)
@ -492,13 +492,13 @@ class TestDomainApplicationAdmin(MockEppLib):
with boto3_mocking.clients.handler_for("sesv2", mock_client): with boto3_mocking.clients.handler_for("sesv2", mock_client):
# Create a sample application # Create a sample application
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
# Create a mock request # Create a mock request
request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk)) request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk))
# Modify the application's property # Modify the application's property
application.status = DomainApplication.ACTION_NEEDED application.status = DomainApplication.ApplicationStatus.ACTION_NEEDED
# Use the model admin's save_model method # Use the model admin's save_model method
self.admin.save_model(request, application, form=None, change=True) self.admin.save_model(request, application, form=None, change=True)
@ -533,13 +533,13 @@ class TestDomainApplicationAdmin(MockEppLib):
with boto3_mocking.clients.handler_for("sesv2", mock_client): with boto3_mocking.clients.handler_for("sesv2", mock_client):
# Create a sample application # Create a sample application
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
# Create a mock request # Create a mock request
request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk)) request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk))
# Modify the application's property # Modify the application's property
application.status = DomainApplication.REJECTED application.status = DomainApplication.ApplicationStatus.REJECTED
# Use the model admin's save_model method # Use the model admin's save_model method
self.admin.save_model(request, application, form=None, change=True) self.admin.save_model(request, application, form=None, change=True)
@ -569,13 +569,13 @@ class TestDomainApplicationAdmin(MockEppLib):
User.objects.filter(email=EMAIL).delete() User.objects.filter(email=EMAIL).delete()
# Create a sample application # Create a sample application
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
# Create a mock request # Create a mock request
request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk)) request = self.factory.post("/admin/registrar/domainapplication/{}/change/".format(application.pk))
# Modify the application's property # Modify the application's property
application.status = DomainApplication.INELIGIBLE application.status = DomainApplication.ApplicationStatus.INELIGIBLE
# Use the model admin's save_model method # Use the model admin's save_model method
self.admin.save_model(request, application, form=None, change=True) self.admin.save_model(request, application, form=None, change=True)
@ -584,7 +584,7 @@ class TestDomainApplicationAdmin(MockEppLib):
self.assertEqual(application.creator.status, "restricted") self.assertEqual(application.creator.status, "restricted")
def test_readonly_when_restricted_creator(self): def test_readonly_when_restricted_creator(self):
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
application.creator.status = User.RESTRICTED application.creator.status = User.RESTRICTED
application.creator.save() application.creator.save()
@ -662,7 +662,7 @@ class TestDomainApplicationAdmin(MockEppLib):
def test_saving_when_restricted_creator(self): def test_saving_when_restricted_creator(self):
# Create an instance of the model # Create an instance of the model
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
application.creator.status = User.RESTRICTED application.creator.status = User.RESTRICTED
application.creator.save() application.creator.save()
@ -681,11 +681,11 @@ class TestDomainApplicationAdmin(MockEppLib):
) )
# Assert that the status has not changed # Assert that the status has not changed
self.assertEqual(application.status, DomainApplication.IN_REVIEW) self.assertEqual(application.status, DomainApplication.ApplicationStatus.IN_REVIEW)
def test_change_view_with_restricted_creator(self): def test_change_view_with_restricted_creator(self):
# Create an instance of the model # Create an instance of the model
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
application.creator.status = User.RESTRICTED application.creator.status = User.RESTRICTED
application.creator.save() application.creator.save()
@ -704,7 +704,7 @@ class TestDomainApplicationAdmin(MockEppLib):
def test_error_when_saving_approved_to_rejected_and_domain_is_active(self): def test_error_when_saving_approved_to_rejected_and_domain_is_active(self):
# Create an instance of the model # Create an instance of the model
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
domain = Domain.objects.create(name=application.requested_domain.name) domain = Domain.objects.create(name=application.requested_domain.name)
application.approved_domain = domain application.approved_domain = domain
application.save() application.save()
@ -724,7 +724,7 @@ class TestDomainApplicationAdmin(MockEppLib):
stack.enter_context(patch.object(messages, "error")) stack.enter_context(patch.object(messages, "error"))
# Simulate saving the model # Simulate saving the model
application.status = DomainApplication.REJECTED application.status = DomainApplication.ApplicationStatus.REJECTED
self.admin.save_model(request, application, None, True) self.admin.save_model(request, application, None, True)
# Assert that the error message was called with the correct argument # Assert that the error message was called with the correct argument
@ -735,7 +735,7 @@ class TestDomainApplicationAdmin(MockEppLib):
def test_side_effects_when_saving_approved_to_rejected(self): def test_side_effects_when_saving_approved_to_rejected(self):
# Create an instance of the model # Create an instance of the model
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
domain = Domain.objects.create(name=application.requested_domain.name) domain = Domain.objects.create(name=application.requested_domain.name)
domain_information = DomainInformation.objects.create(creator=self.superuser, domain=domain) domain_information = DomainInformation.objects.create(creator=self.superuser, domain=domain)
application.approved_domain = domain application.approved_domain = domain
@ -756,7 +756,7 @@ class TestDomainApplicationAdmin(MockEppLib):
stack.enter_context(patch.object(messages, "error")) stack.enter_context(patch.object(messages, "error"))
# Simulate saving the model # Simulate saving the model
application.status = DomainApplication.REJECTED application.status = DomainApplication.ApplicationStatus.REJECTED
self.admin.save_model(request, application, None, True) self.admin.save_model(request, application, None, True)
# Assert that the error message was never called # Assert that the error message was never called
@ -774,7 +774,7 @@ class TestDomainApplicationAdmin(MockEppLib):
def test_error_when_saving_approved_to_ineligible_and_domain_is_active(self): def test_error_when_saving_approved_to_ineligible_and_domain_is_active(self):
# Create an instance of the model # Create an instance of the model
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
domain = Domain.objects.create(name=application.requested_domain.name) domain = Domain.objects.create(name=application.requested_domain.name)
application.approved_domain = domain application.approved_domain = domain
application.save() application.save()
@ -794,7 +794,7 @@ class TestDomainApplicationAdmin(MockEppLib):
stack.enter_context(patch.object(messages, "error")) stack.enter_context(patch.object(messages, "error"))
# Simulate saving the model # Simulate saving the model
application.status = DomainApplication.INELIGIBLE application.status = DomainApplication.ApplicationStatus.INELIGIBLE
self.admin.save_model(request, application, None, True) self.admin.save_model(request, application, None, True)
# Assert that the error message was called with the correct argument # Assert that the error message was called with the correct argument
@ -805,7 +805,7 @@ class TestDomainApplicationAdmin(MockEppLib):
def test_side_effects_when_saving_approved_to_ineligible(self): def test_side_effects_when_saving_approved_to_ineligible(self):
# Create an instance of the model # Create an instance of the model
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
domain = Domain.objects.create(name=application.requested_domain.name) domain = Domain.objects.create(name=application.requested_domain.name)
domain_information = DomainInformation.objects.create(creator=self.superuser, domain=domain) domain_information = DomainInformation.objects.create(creator=self.superuser, domain=domain)
application.approved_domain = domain application.approved_domain = domain
@ -826,7 +826,7 @@ class TestDomainApplicationAdmin(MockEppLib):
stack.enter_context(patch.object(messages, "error")) stack.enter_context(patch.object(messages, "error"))
# Simulate saving the model # Simulate saving the model
application.status = DomainApplication.INELIGIBLE application.status = DomainApplication.ApplicationStatus.INELIGIBLE
self.admin.save_model(request, application, None, True) self.admin.save_model(request, application, None, True)
# Assert that the error message was never called # Assert that the error message was never called

View file

@ -35,7 +35,7 @@ class TestDomainApplication(TestCase):
"""Can create with just a creator.""" """Can create with just a creator."""
user, _ = User.objects.get_or_create() user, _ = User.objects.get_or_create()
application = DomainApplication.objects.create(creator=user) application = DomainApplication.objects.create(creator=user)
self.assertEqual(application.status, DomainApplication.STARTED) self.assertEqual(application.status, DomainApplication.ApplicationStatus.STARTED)
def test_full_create(self): def test_full_create(self):
"""Can create with all fields.""" """Can create with all fields."""
@ -108,7 +108,7 @@ class TestDomainApplication(TestCase):
# no submitter email so this emits a log warning # no submitter email so this emits a log warning
with less_console_noise(): with less_console_noise():
application.submit() application.submit()
self.assertEqual(application.status, application.SUBMITTED) self.assertEqual(application.status, application.ApplicationStatus.SUBMITTED)
def test_submit_sends_email(self): def test_submit_sends_email(self):
"""Create an application and submit it and see if email was sent.""" """Create an application and submit it and see if email was sent."""
@ -139,7 +139,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status submitted and call submit """Create an application with status submitted and call submit
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.SUBMITTED) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.submit() application.submit()
@ -148,7 +148,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status in review and call submit """Create an application with status in review and call submit
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.submit() application.submit()
@ -157,7 +157,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status approved and call submit """Create an application with status approved and call submit
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.submit() application.submit()
@ -166,7 +166,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status rejected and call submit """Create an application with status rejected and call submit
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.REJECTED) application = completed_application(status=DomainApplication.ApplicationStatus.REJECTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.submit() application.submit()
@ -175,7 +175,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status ineligible and call submit """Create an application with status ineligible and call submit
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.INELIGIBLE) application = completed_application(status=DomainApplication.ApplicationStatus.INELIGIBLE)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.submit() application.submit()
@ -184,7 +184,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status started and call in_review """Create an application with status started and call in_review
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.STARTED) application = completed_application(status=DomainApplication.ApplicationStatus.STARTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.in_review() application.in_review()
@ -193,7 +193,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status in review and call in_review """Create an application with status in review and call in_review
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.IN_REVIEW) application = completed_application(status=DomainApplication.ApplicationStatus.IN_REVIEW)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.in_review() application.in_review()
@ -202,7 +202,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status approved and call in_review """Create an application with status approved and call in_review
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.in_review() application.in_review()
@ -211,7 +211,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status action needed and call in_review """Create an application with status action needed and call in_review
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.ACTION_NEEDED) application = completed_application(status=DomainApplication.ApplicationStatus.ACTION_NEEDED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.in_review() application.in_review()
@ -220,7 +220,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status rejected and call in_review """Create an application with status rejected and call in_review
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.REJECTED) application = completed_application(status=DomainApplication.ApplicationStatus.REJECTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.in_review() application.in_review()
@ -229,7 +229,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status withdrawn and call in_review """Create an application with status withdrawn and call in_review
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.WITHDRAWN) application = completed_application(status=DomainApplication.ApplicationStatus.WITHDRAWN)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.in_review() application.in_review()
@ -238,7 +238,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status ineligible and call in_review """Create an application with status ineligible and call in_review
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.INELIGIBLE) application = completed_application(status=DomainApplication.ApplicationStatus.INELIGIBLE)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.in_review() application.in_review()
@ -247,7 +247,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status started and call action_needed """Create an application with status started and call action_needed
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.STARTED) application = completed_application(status=DomainApplication.ApplicationStatus.STARTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.action_needed() application.action_needed()
@ -256,7 +256,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status submitted and call action_needed """Create an application with status submitted and call action_needed
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.SUBMITTED) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.action_needed() application.action_needed()
@ -265,7 +265,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status action needed and call action_needed """Create an application with status action needed and call action_needed
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.ACTION_NEEDED) application = completed_application(status=DomainApplication.ApplicationStatus.ACTION_NEEDED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.action_needed() application.action_needed()
@ -274,7 +274,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status approved and call action_needed """Create an application with status approved and call action_needed
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.action_needed() application.action_needed()
@ -283,7 +283,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status withdrawn and call action_needed """Create an application with status withdrawn and call action_needed
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.WITHDRAWN) application = completed_application(status=DomainApplication.ApplicationStatus.WITHDRAWN)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.action_needed() application.action_needed()
@ -292,7 +292,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status ineligible and call action_needed """Create an application with status ineligible and call action_needed
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.INELIGIBLE) application = completed_application(status=DomainApplication.ApplicationStatus.INELIGIBLE)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.action_needed() application.action_needed()
@ -301,7 +301,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status started and call approve """Create an application with status started and call approve
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.STARTED) application = completed_application(status=DomainApplication.ApplicationStatus.STARTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.approve() application.approve()
@ -310,7 +310,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status approved and call approve """Create an application with status approved and call approve
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.approve() application.approve()
@ -319,7 +319,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status action needed and call approve """Create an application with status action needed and call approve
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.ACTION_NEEDED) application = completed_application(status=DomainApplication.ApplicationStatus.ACTION_NEEDED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.approve() application.approve()
@ -328,7 +328,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status withdrawn and call approve """Create an application with status withdrawn and call approve
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.WITHDRAWN) application = completed_application(status=DomainApplication.ApplicationStatus.WITHDRAWN)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.approve() application.approve()
@ -337,7 +337,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status started and call withdraw """Create an application with status started and call withdraw
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.STARTED) application = completed_application(status=DomainApplication.ApplicationStatus.STARTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.withdraw() application.withdraw()
@ -346,7 +346,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status approved and call withdraw """Create an application with status approved and call withdraw
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.withdraw() application.withdraw()
@ -355,7 +355,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status action needed and call withdraw """Create an application with status action needed and call withdraw
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.ACTION_NEEDED) application = completed_application(status=DomainApplication.ApplicationStatus.ACTION_NEEDED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.withdraw() application.withdraw()
@ -364,7 +364,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status rejected and call withdraw """Create an application with status rejected and call withdraw
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.REJECTED) application = completed_application(status=DomainApplication.ApplicationStatus.REJECTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.withdraw() application.withdraw()
@ -373,7 +373,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status withdrawn and call withdraw """Create an application with status withdrawn and call withdraw
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.WITHDRAWN) application = completed_application(status=DomainApplication.ApplicationStatus.WITHDRAWN)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.withdraw() application.withdraw()
@ -382,7 +382,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status ineligible and call withdraw """Create an application with status ineligible and call withdraw
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.INELIGIBLE) application = completed_application(status=DomainApplication.ApplicationStatus.INELIGIBLE)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.withdraw() application.withdraw()
@ -391,7 +391,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status started and call reject """Create an application with status started and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.STARTED) application = completed_application(status=DomainApplication.ApplicationStatus.STARTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject() application.reject()
@ -400,7 +400,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status submitted and call reject """Create an application with status submitted and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.SUBMITTED) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject() application.reject()
@ -409,7 +409,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status action needed and call reject """Create an application with status action needed and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.ACTION_NEEDED) application = completed_application(status=DomainApplication.ApplicationStatus.ACTION_NEEDED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject() application.reject()
@ -418,7 +418,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status withdrawn and call reject """Create an application with status withdrawn and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.WITHDRAWN) application = completed_application(status=DomainApplication.ApplicationStatus.WITHDRAWN)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject() application.reject()
@ -427,7 +427,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status rejected and call reject """Create an application with status rejected and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.REJECTED) application = completed_application(status=DomainApplication.ApplicationStatus.REJECTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject() application.reject()
@ -436,7 +436,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status ineligible and call reject """Create an application with status ineligible and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.INELIGIBLE) application = completed_application(status=DomainApplication.ApplicationStatus.INELIGIBLE)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject() application.reject()
@ -445,7 +445,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status approved, create a matching domain that """Create an application with status approved, create a matching domain that
is active, and call reject against transition rules""" is active, and call reject against transition rules"""
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
domain = Domain.objects.create(name=application.requested_domain.name) domain = Domain.objects.create(name=application.requested_domain.name)
application.approved_domain = domain application.approved_domain = domain
application.save() application.save()
@ -464,7 +464,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status started and call reject """Create an application with status started and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.STARTED) application = completed_application(status=DomainApplication.ApplicationStatus.STARTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject_with_prejudice() application.reject_with_prejudice()
@ -473,7 +473,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status submitted and call reject """Create an application with status submitted and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.SUBMITTED) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject_with_prejudice() application.reject_with_prejudice()
@ -482,7 +482,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status action needed and call reject """Create an application with status action needed and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.ACTION_NEEDED) application = completed_application(status=DomainApplication.ApplicationStatus.ACTION_NEEDED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject_with_prejudice() application.reject_with_prejudice()
@ -491,7 +491,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status withdrawn and call reject """Create an application with status withdrawn and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.WITHDRAWN) application = completed_application(status=DomainApplication.ApplicationStatus.WITHDRAWN)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject_with_prejudice() application.reject_with_prejudice()
@ -500,7 +500,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status rejected and call reject """Create an application with status rejected and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.REJECTED) application = completed_application(status=DomainApplication.ApplicationStatus.REJECTED)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject_with_prejudice() application.reject_with_prejudice()
@ -509,7 +509,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status ineligible and call reject """Create an application with status ineligible and call reject
against transition rules""" against transition rules"""
application = completed_application(status=DomainApplication.INELIGIBLE) application = completed_application(status=DomainApplication.ApplicationStatus.INELIGIBLE)
with self.assertRaises(TransitionNotAllowed): with self.assertRaises(TransitionNotAllowed):
application.reject_with_prejudice() application.reject_with_prejudice()
@ -518,7 +518,7 @@ class TestDomainApplication(TestCase):
"""Create an application with status approved, create a matching domain that """Create an application with status approved, create a matching domain that
is active, and call reject_with_prejudice against transition rules""" is active, and call reject_with_prejudice against transition rules"""
application = completed_application(status=DomainApplication.APPROVED) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED)
domain = Domain.objects.create(name=application.requested_domain.name) domain = Domain.objects.create(name=application.requested_domain.name)
application.approved_domain = domain application.approved_domain = domain
application.save() application.save()
@ -543,7 +543,7 @@ class TestPermissions(TestCase):
user, _ = User.objects.get_or_create() user, _ = User.objects.get_or_create()
application = DomainApplication.objects.create(creator=user, requested_domain=draft_domain) application = DomainApplication.objects.create(creator=user, requested_domain=draft_domain)
# skip using the submit method # skip using the submit method
application.status = DomainApplication.SUBMITTED application.status = DomainApplication.ApplicationStatus.SUBMITTED
application.approve() application.approve()
# should be a role for this user # should be a role for this user
@ -560,7 +560,7 @@ class TestDomainInfo(TestCase):
user, _ = User.objects.get_or_create() user, _ = User.objects.get_or_create()
application = DomainApplication.objects.create(creator=user, requested_domain=draft_domain) application = DomainApplication.objects.create(creator=user, requested_domain=draft_domain)
# skip using the submit method # skip using the submit method
application.status = DomainApplication.SUBMITTED application.status = DomainApplication.ApplicationStatus.SUBMITTED
application.approve() application.approve()
# should be an information present for this domain # should be an information present for this domain

View file

@ -261,7 +261,7 @@ class TestDomainCreation(MockEppLib):
user, _ = User.objects.get_or_create() user, _ = User.objects.get_or_create()
application = DomainApplication.objects.create(creator=user, requested_domain=draft_domain) application = DomainApplication.objects.create(creator=user, requested_domain=draft_domain)
# skip using the submit method # skip using the submit method
application.status = DomainApplication.SUBMITTED application.status = DomainApplication.ApplicationStatus.SUBMITTED
# transition to approve state # transition to approve state
application.approve() application.approve()
# should have information present for this domain # should have information present for this domain

View file

@ -1079,7 +1079,7 @@ class DomainApplicationTests(TestWithUser, WebTest):
Make sure the long name is displaying in the application summary Make sure the long name is displaying in the application summary
page (manage your application) page (manage your application)
""" """
completed_application(status=DomainApplication.SUBMITTED, user=self.user) completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED, user=self.user)
home_page = self.app.get("/") home_page = self.app.get("/")
self.assertContains(home_page, "city.gov") self.assertContains(home_page, "city.gov")
# click the "Edit" link # click the "Edit" link
@ -2117,7 +2117,7 @@ class TestApplicationStatus(TestWithUser, WebTest):
def test_application_status(self): def test_application_status(self):
"""Checking application status page""" """Checking application status page"""
application = completed_application(status=DomainApplication.SUBMITTED, user=self.user) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED, user=self.user)
application.save() application.save()
home_page = self.app.get("/") home_page = self.app.get("/")
@ -2137,7 +2137,7 @@ class TestApplicationStatus(TestWithUser, WebTest):
self.user.status = "ineligible" self.user.status = "ineligible"
self.user.save() self.user.save()
application = completed_application(status=DomainApplication.SUBMITTED, user=self.user) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED, user=self.user)
application.save() application.save()
home_page = self.app.get("/") home_page = self.app.get("/")
@ -2152,7 +2152,7 @@ class TestApplicationStatus(TestWithUser, WebTest):
def test_application_withdraw(self): def test_application_withdraw(self):
"""Checking application status page""" """Checking application status page"""
application = completed_application(status=DomainApplication.SUBMITTED, user=self.user) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED, user=self.user)
application.save() application.save()
home_page = self.app.get("/") home_page = self.app.get("/")
@ -2182,7 +2182,7 @@ class TestApplicationStatus(TestWithUser, WebTest):
def test_application_status_no_permissions(self): def test_application_status_no_permissions(self):
"""Can't access applications without being the creator.""" """Can't access applications without being the creator."""
application = completed_application(status=DomainApplication.SUBMITTED, user=self.user) application = completed_application(status=DomainApplication.ApplicationStatus.SUBMITTED, user=self.user)
other_user = User() other_user = User()
other_user.save() other_user.save()
application.creator = other_user application.creator = other_user
@ -2202,7 +2202,7 @@ class TestApplicationStatus(TestWithUser, WebTest):
def test_approved_application_not_in_active_requests(self): def test_approved_application_not_in_active_requests(self):
"""An approved application is not shown in the Active """An approved application is not shown in the Active
Requests table on home.html.""" Requests table on home.html."""
application = completed_application(status=DomainApplication.APPROVED, user=self.user) application = completed_application(status=DomainApplication.ApplicationStatus.APPROVED, user=self.user)
application.save() application.save()
home_page = self.app.get("/") home_page = self.app.get("/")

View file

@ -293,9 +293,9 @@ class ApplicationWizard(ApplicationWizardPermissionView, TemplateView):
return self.pending_applications() return self.pending_applications()
def approved_applications_exist(self): def approved_applications_exist(self):
"""Checks if user is creator of applications with APPROVED status""" """Checks if user is creator of applications with ApplicationStatus.APPROVED status"""
approved_application_count = DomainApplication.objects.filter( approved_application_count = DomainApplication.objects.filter(
creator=self.request.user, status=DomainApplication.APPROVED creator=self.request.user, status=DomainApplication.ApplicationStatus.APPROVED
).count() ).count()
return approved_application_count > 0 return approved_application_count > 0
@ -308,11 +308,11 @@ class ApplicationWizard(ApplicationWizardPermissionView, TemplateView):
def pending_applications(self): def pending_applications(self):
"""Returns a List of user's applications with one of the following states: """Returns a List of user's applications with one of the following states:
SUBMITTED, IN_REVIEW, ACTION_NEEDED""" ApplicationStatus.SUBMITTED, ApplicationStatus.IN_REVIEW, ApplicationStatus.ACTION_NEEDED"""
# if the current application has ACTION_NEEDED status, this check should not be performed # if the current application has ApplicationStatus.ACTION_NEEDED status, this check should not be performed
if self.application.status == DomainApplication.ACTION_NEEDED: if self.application.status == DomainApplication.ApplicationStatus.ACTION_NEEDED:
return [] return []
check_statuses = [DomainApplication.SUBMITTED, DomainApplication.IN_REVIEW, DomainApplication.ACTION_NEEDED] check_statuses = [DomainApplication.ApplicationStatus.SUBMITTED, DomainApplication.ApplicationStatus.IN_REVIEW, DomainApplication.ApplicationStatus.ACTION_NEEDED]
return DomainApplication.objects.filter(creator=self.request.user, status__in=check_statuses) return DomainApplication.objects.filter(creator=self.request.user, status__in=check_statuses)
def get_context_data(self): def get_context_data(self):

View file

@ -101,10 +101,10 @@ class DomainPermission(PermissionsLoginMixin):
# Analysts may manage domains, when they are in these statuses: # Analysts may manage domains, when they are in these statuses:
valid_domain_statuses = [ valid_domain_statuses = [
DomainApplication.APPROVED, DomainApplication.ApplicationStatus.APPROVED,
DomainApplication.IN_REVIEW, DomainApplication.ApplicationStatus.IN_REVIEW,
DomainApplication.REJECTED, DomainApplication.ApplicationStatus.REJECTED,
DomainApplication.ACTION_NEEDED, DomainApplication.ApplicationStatus.ACTION_NEEDED,
# Edge case - some domains do not have # Edge case - some domains do not have
# a status or DomainInformation... aka a status of 'None'. # a status or DomainInformation... aka a status of 'None'.
# It is necessary to access those to correct errors. # It is necessary to access those to correct errors.