Repository: cisagov/manage.get.gov

Issue:
Ensure domain Request and domain Info have "Non-federal" instead of None when empty
### Issue description

For ease of filtering and for consistency, we should make sure when a non federal domain is approved it's agency is not None and is instead Non-federal agency. 

### Acceptance criteria

- [ ] in the Domain request approval function, if federal agency is None change it to "Non-federal" agency
- [ ] be sure this happens before Domain Information is made so that Domain information is now non-federal agency as well 

### Additional context

_No response_

### Links to other issues

_No response_


Discussion:

Resolving patch:
diff --git a/src/registrar/models/domain_request.py b/src/registrar/models/domain_request.py
--- a/src/registrar/models/domain_request.py
+++ b/src/registrar/models/domain_request.py
@@ -9,6 +9,7 @@
 from django_fsm import FSMField, transition  # type: ignore
 from django.utils import timezone
 from registrar.models.domain import Domain
+from registrar.models.federal_agency import FederalAgency
 from registrar.models.utility.generic_helper import CreateOrUpdateOrganizationTypeHelper
 from registrar.utility.errors import FSMDomainRequestError, FSMErrorCodes
 
@@ -751,6 +752,10 @@ def approve(self, send_email=True):
         domain request into an admin on that domain. It also triggers an email
         notification."""
 
+        if self.federal_agency is None:
+            self.federal_agency = FederalAgency.objects.filter(agency="Non-Federal Agency").first()
+            self.save()
+
         # create the domain
         Domain = apps.get_model("registrar.Domain")
 


Test patch:
diff --git a/src/registrar/tests/test_admin.py b/src/registrar/tests/test_admin.py
--- a/src/registrar/tests/test_admin.py
+++ b/src/registrar/tests/test_admin.py
@@ -646,7 +646,7 @@ def test_short_org_name_in_domains_list(self):
             response = self.client.get("/admin/registrar/domain/")
             # There are 4 template references to Federal (4) plus four references in the table
             # for our actual domain_request
-            self.assertContains(response, "Federal", count=54)
+            self.assertContains(response, "Federal", count=56)
             # This may be a bit more robust
             self.assertContains(response, '<td class="field-generic_org_type">Federal</td>', count=1)
             # Now let's make sure the long description does not exist
diff --git a/src/registrar/tests/test_models.py b/src/registrar/tests/test_models.py
--- a/src/registrar/tests/test_models.py
+++ b/src/registrar/tests/test_models.py
@@ -12,6 +12,7 @@
     DraftDomain,
     DomainInvitation,
     UserDomainRole,
+    FederalAgency,
 )
 
 import boto3_mocking
@@ -75,6 +76,26 @@ def assertNotRaises(self, exception_type):
         with less_console_noise():
             return self.assertRaises(Exception, None, exception_type)
 
+    def test_federal_agency_set_to_non_federal_on_approve(self):
+        """Ensures that when the federal_agency field is 'none' when .approve() is called,
+        the field is set to the 'Non-Federal Agency' record"""
+        domain_request = completed_domain_request(
+            status=DomainRequest.DomainRequestStatus.IN_REVIEW,
+            name="city2.gov",
+            federal_agency=None,
+        )
+
+        # Ensure that the federal agency is None
+        self.assertEqual(domain_request.federal_agency, None)
+
+        # Approve the request
+        domain_request.approve()
+        self.assertEqual(domain_request.status, DomainRequest.DomainRequestStatus.APPROVED)
+
+        # After approval, it should be "Non-Federal agency"
+        expected_federal_agency = FederalAgency.objects.filter(agency="Non-Federal Agency").first()
+        self.assertEqual(domain_request.federal_agency, expected_federal_agency)
+
     def test_empty_create_fails(self):
         """Can't create a completely empty domain request.
         NOTE: something about theexception this test raises messes up with the
@@ -942,6 +963,7 @@ def test_approval_creates_info(self):
             domain=domain,
             notes="test notes",
             domain_request=domain_request,
+            federal_agency=FederalAgency.objects.get(agency="Non-Federal Agency"),
         ).__dict__
 
         # Test the two records for consistency