updated code for readability; handled ineligible status; tested for restricted user

This commit is contained in:
David Kennedy 2023-09-13 08:22:10 -04:00
parent 31d04c0269
commit af5ca2afdf
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
2 changed files with 23 additions and 5 deletions

View file

@ -264,20 +264,24 @@ class DomainApplicationAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
instance = kwargs.get("instance")
if instance and instance.pk:
current_state = instance.status
application = kwargs.get("instance")
if application and application.pk:
current_state = application.status
# first option in status transitions is current state
available_transitions = [(current_state, current_state)]
transitions = get_available_FIELD_transitions(
instance, models.DomainApplication._meta.get_field("status")
application, models.DomainApplication._meta.get_field("status")
)
for transition in transitions:
available_transitions.append((transition.target, transition.target))
# only set the available transitions if the user is not restricted
# from editing the domain application; otherwise, the form will be
# readonly and the status field will not have a widget
if not application.creator.is_restricted():
self.fields["status"].widget.choices = available_transitions

View file

@ -120,6 +120,20 @@ class TestDomainApplicationAdminForm(TestCase):
DomainApplication._meta.get_field("status").choices,
)
def test_form_choices_when_ineligible(self):
# Create a form instance with a domain application with ineligible status
ineligible_application = DomainApplication(status="ineligible")
# Attempt to create a form with the ineligible application
# The form should not raise an error, but choices should be the
# full list of possible choices
form = DomainApplicationAdminForm(instance=ineligible_application)
self.assertEqual(
form.fields["status"].widget.choices,
DomainApplication._meta.get_field("status").choices,
)
class TestDomainApplicationAdmin(TestCase):
def setUp(self):