From e16bab7966a4e6bb106bf224f5e56c72552daff6 Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Thu, 4 Dec 2025 15:28:19 +0545 Subject: [PATCH 1/3] fix(eap-export): Update Export url for EAP --- .../0229_alter_export_export_type.py | 18 +++++++++++ api/models.py | 4 +-- api/serializers.py | 31 +++++++++++++++++-- api/tasks.py | 2 ++ eap/test_views.py | 8 ++--- 5 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 api/migrations/0229_alter_export_export_type.py diff --git a/api/migrations/0229_alter_export_export_type.py b/api/migrations/0229_alter_export_export_type.py new file mode 100644 index 000000000..db4e69525 --- /dev/null +++ b/api/migrations/0229_alter_export_export_type.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.26 on 2025-12-04 09:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0228_alter_export_export_type'), + ] + + operations = [ + migrations.AlterField( + model_name='export', + name='export_type', + field=models.CharField(choices=[('dref-applications', 'DREF Application'), ('dref-operational-updates', 'DREF Operational Update'), ('dref-final-reports', 'DREF Final Report'), ('old-dref-final-reports', 'Old DREF Final Report'), ('per', 'Per'), ('simplified', 'Simplified EAP'), ('full', 'Full EAP')], max_length=255, verbose_name='Export Type'), + ), + ] diff --git a/api/models.py b/api/models.py index e3621622e..9e6acc911 100644 --- a/api/models.py +++ b/api/models.py @@ -2560,8 +2560,8 @@ class ExportType(models.TextChoices): FINAL_REPORT = "dref-final-reports", _("DREF Final Report") OLD_FINAL_REPORT = "old-dref-final-reports", _("Old DREF Final Report") PER = "per", _("Per") - SIMPLIFIED_EAP = "simplified-eap", _("Simplified EAP") - FULL_EAP = "full-eap", _("Full EAP") + SIMPLIFIED_EAP = "simplified", _("Simplified EAP") + FULL_EAP = "full", _("Full EAP") export_id = models.IntegerField(verbose_name=_("Export Id")) export_type = models.CharField(verbose_name=_("Export Type"), max_length=255, choices=ExportType.choices) diff --git a/api/serializers.py b/api/serializers.py index 80fa58b0f..3fb34c042 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -2544,6 +2544,11 @@ class ExportSerializer(serializers.ModelSerializer): status_display = serializers.CharField(source="get_status_display", read_only=True) # NOTE: is_pga is used to determine if the export contains PGA or not is_pga = serializers.BooleanField(default=False, required=False, write_only=True) + # NOTE: diff is used to determine if the export is requested for diff view or not + # Currently only used for EAP exports + diff = serializers.BooleanField(default=False, required=False, write_only=True) + # NOTE: Version of a EAP export being requested, only applicable for full and simplified EAP exports + version = serializers.IntegerField(required=False, write_only=True) class Meta: model = Export @@ -2559,6 +2564,7 @@ def create(self, validated_data): export_id = validated_data.get("export_id") export_type = validated_data.get("export_type") country_id = validated_data.get("per_country") + version = validated_data.get("version", None) if export_type == Export.ExportType.DREF: title = Dref.objects.filter(id=export_id).first().title elif export_type == Export.ExportType.OPS_UPDATE: @@ -2569,12 +2575,20 @@ def create(self, validated_data): overview = Overview.objects.filter(id=export_id).first() title = f"{overview.country.name}-preparedness-{overview.get_phase_display()}" elif export_type == Export.ExportType.SIMPLIFIED_EAP: - simplified_eap = SimplifiedEAP.objects.filter(id=export_id).first() + if version: + simplified_eap = ( + SimplifiedEAP.objects.filter(eap_registration__id=export_id, version=version).order_by("-version").first() + ) + else: + simplified_eap = SimplifiedEAP.objects.filter(eap_registration__id=export_id).order_by("-version").first() title = ( f"{simplified_eap.eap_registration.national_society.name}-{simplified_eap.eap_registration.disaster_type.name}" ) elif export_type == Export.ExportType.FULL_EAP: - full_eap = FullEAP.objects.filter(id=export_id).first() + if version: + full_eap = FullEAP.objects.filter(eap_registration__id=export_id, version=version).order_by("-version").first() + else: + full_eap = FullEAP.objects.filter(eap_registration__id=export_id).order_by("-version").first() title = f"{full_eap.eap_registration.national_society.name}-{full_eap.eap_registration.disaster_type.name}" else: title = "Export" @@ -2582,6 +2596,19 @@ def create(self, validated_data): if export_type == Export.ExportType.PER: validated_data["url"] = f"{settings.GO_WEB_INTERNAL_URL}/countries/{country_id}/{export_type}/{export_id}/export/" + + if export_type in [ + Export.ExportType.SIMPLIFIED_EAP, + Export.ExportType.FULL_EAP, + ]: + validated_data["url"] = f"{settings.GO_WEB_INTERNAL_URL}/eap/{export_id}/{export_type}/export/" + # NOTE: EAP exports with diff view only for EAPs exports + diff = validated_data.pop("diff") + if diff: + validated_data["url"] += "?diff=true" + if version: + validated_data["url"] += f"&version={version}" if diff else f"?version={version}" + else: validated_data["url"] = f"{settings.GO_WEB_INTERNAL_URL}/{export_type}/{export_id}/export/" diff --git a/api/tasks.py b/api/tasks.py index c551d7507..11bcf357f 100644 --- a/api/tasks.py +++ b/api/tasks.py @@ -122,6 +122,8 @@ def generate_url(url, export_id, user, title, language): file_name = f'SIMPLIFIED EAP {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' elif export.export_type == Export.ExportType.FULL_EAP: file_name = f'FULL EAP {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' + elif export.export_type == Export.ExportType.EAP_REGISTRATION: + file_name = f'EAP REGISTRATION {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' else: file_name = f'DREF {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' file = ContentFile( diff --git a/eap/test_views.py b/eap/test_views.py index 4ea1befc5..85b345b94 100644 --- a/eap/test_views.py +++ b/eap/test_views.py @@ -1641,7 +1641,7 @@ def test_simplified_eap_export(self, mock_generate_url): ) data = { "export_type": Export.ExportType.SIMPLIFIED_EAP, - "export_id": self.simplified_eap.id, + "export_id": self.eap_registration.id, "is_pga": False, } @@ -1652,7 +1652,7 @@ def test_simplified_eap_export(self, mock_generate_url): self.assert_201(response) self.assertIsNotNone(response.data["id"], response.data) - expected_url = f"{settings.GO_WEB_INTERNAL_URL}/{Export.ExportType.SIMPLIFIED_EAP}/{self.simplified_eap.id}/export/" + expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/" self.assertEqual(response.data["url"], expected_url) self.assertEqual(response.data["status"], Export.ExportStatus.PENDING) @@ -1679,7 +1679,7 @@ def test_full_eap_export(self, mock_generate_url): ) data = { "export_type": Export.ExportType.FULL_EAP, - "export_id": self.full_eap.id, + "export_id": self.eap_registration.id, "is_pga": False, } @@ -1689,7 +1689,7 @@ def test_full_eap_export(self, mock_generate_url): response = self.client.post(self.url, data, format="json") self.assert_201(response) self.assertIsNotNone(response.data["id"], response.data) - expected_url = f"{settings.GO_WEB_INTERNAL_URL}/{Export.ExportType.FULL_EAP}/{self.full_eap.id}/export/" + expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.FULL_EAP}/export/" self.assertEqual(response.data["url"], expected_url) self.assertEqual(response.data["status"], Export.ExportStatus.PENDING) From 64ea825fe98844b952821056f14870326ef903f9 Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Fri, 5 Dec 2025 16:34:34 +0545 Subject: [PATCH 2/3] feat(eap): Add diff and version tracking for pdf export - Update logic for the diff and latest eaps --- .../0229_alter_export_export_type.py | 21 +++-- api/serializers.py | 43 +++++---- api/tasks.py | 2 - eap/test_views.py | 89 ++++++++++++++++++- 4 files changed, 129 insertions(+), 26 deletions(-) diff --git a/api/migrations/0229_alter_export_export_type.py b/api/migrations/0229_alter_export_export_type.py index db4e69525..1e89038e5 100644 --- a/api/migrations/0229_alter_export_export_type.py +++ b/api/migrations/0229_alter_export_export_type.py @@ -4,15 +4,26 @@ class Migration(migrations.Migration): - dependencies = [ - ('api', '0228_alter_export_export_type'), + ("api", "0228_alter_export_export_type"), ] operations = [ migrations.AlterField( - model_name='export', - name='export_type', - field=models.CharField(choices=[('dref-applications', 'DREF Application'), ('dref-operational-updates', 'DREF Operational Update'), ('dref-final-reports', 'DREF Final Report'), ('old-dref-final-reports', 'Old DREF Final Report'), ('per', 'Per'), ('simplified', 'Simplified EAP'), ('full', 'Full EAP')], max_length=255, verbose_name='Export Type'), + model_name="export", + name="export_type", + field=models.CharField( + choices=[ + ("dref-applications", "DREF Application"), + ("dref-operational-updates", "DREF Operational Update"), + ("dref-final-reports", "DREF Final Report"), + ("old-dref-final-reports", "Old DREF Final Report"), + ("per", "Per"), + ("simplified", "Simplified EAP"), + ("full", "Full EAP"), + ], + max_length=255, + verbose_name="Export Type", + ), ), ] diff --git a/api/serializers.py b/api/serializers.py index 3fb34c042..ec77e906c 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -2559,12 +2559,25 @@ def validate_pdf_file(self, pdf_file): validate_file_type(pdf_file) return pdf_file + def get_latest(self, model: type[SimplifiedEAP | FullEAP], eap_registration_id: int, version: int | None = None): + """ + Get the latest version of the EAP (Simplified or Full) based on the eap_registration_id and optional version. + if version is provided, it fetches that specific version, otherwise it fetches the latest version. + """ + filters = { + "eap_registration__id": eap_registration_id, + } + if version: + filters["version"] = version + + return model.objects.filter(**filters).order_by("-version").first() + def create(self, validated_data): language = django_get_language() export_id = validated_data.get("export_id") export_type = validated_data.get("export_type") country_id = validated_data.get("per_country") - version = validated_data.get("version", None) + version = validated_data.pop("version", None) if export_type == Export.ExportType.DREF: title = Dref.objects.filter(id=export_id).first().title elif export_type == Export.ExportType.OPS_UPDATE: @@ -2575,20 +2588,20 @@ def create(self, validated_data): overview = Overview.objects.filter(id=export_id).first() title = f"{overview.country.name}-preparedness-{overview.get_phase_display()}" elif export_type == Export.ExportType.SIMPLIFIED_EAP: - if version: - simplified_eap = ( - SimplifiedEAP.objects.filter(eap_registration__id=export_id, version=version).order_by("-version").first() - ) - else: - simplified_eap = SimplifiedEAP.objects.filter(eap_registration__id=export_id).order_by("-version").first() + simplified_eap = self.get_latest( + model=SimplifiedEAP, + eap_registration_id=export_id, + version=version, + ) title = ( f"{simplified_eap.eap_registration.national_society.name}-{simplified_eap.eap_registration.disaster_type.name}" ) elif export_type == Export.ExportType.FULL_EAP: - if version: - full_eap = FullEAP.objects.filter(eap_registration__id=export_id, version=version).order_by("-version").first() - else: - full_eap = FullEAP.objects.filter(eap_registration__id=export_id).order_by("-version").first() + full_eap = self.get_latest( + model=FullEAP, + eap_registration_id=export_id, + version=version, + ) title = f"{full_eap.eap_registration.national_society.name}-{full_eap.eap_registration.disaster_type.name}" else: title = "Export" @@ -2597,17 +2610,17 @@ def create(self, validated_data): if export_type == Export.ExportType.PER: validated_data["url"] = f"{settings.GO_WEB_INTERNAL_URL}/countries/{country_id}/{export_type}/{export_id}/export/" - if export_type in [ + elif export_type in [ Export.ExportType.SIMPLIFIED_EAP, Export.ExportType.FULL_EAP, ]: validated_data["url"] = f"{settings.GO_WEB_INTERNAL_URL}/eap/{export_id}/{export_type}/export/" # NOTE: EAP exports with diff view only for EAPs exports + if version: + validated_data["url"] += f"?version={version}" diff = validated_data.pop("diff") if diff: - validated_data["url"] += "?diff=true" - if version: - validated_data["url"] += f"&version={version}" if diff else f"?version={version}" + validated_data["url"] += "&diff=true" if version else "?diff=true" else: validated_data["url"] = f"{settings.GO_WEB_INTERNAL_URL}/{export_type}/{export_id}/export/" diff --git a/api/tasks.py b/api/tasks.py index 11bcf357f..c551d7507 100644 --- a/api/tasks.py +++ b/api/tasks.py @@ -122,8 +122,6 @@ def generate_url(url, export_id, user, title, language): file_name = f'SIMPLIFIED EAP {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' elif export.export_type == Export.ExportType.FULL_EAP: file_name = f'FULL EAP {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' - elif export.export_type == Export.ExportType.EAP_REGISTRATION: - file_name = f'EAP REGISTRATION {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' else: file_name = f'DREF {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf' file = ContentFile( diff --git a/eap/test_views.py b/eap/test_views.py index 85b345b94..e93420b83 100644 --- a/eap/test_views.py +++ b/eap/test_views.py @@ -1666,10 +1666,41 @@ def test_simplified_eap_export(self, mock_generate_url): django_get_language(), ) + # Test Export Snapshot + + # create a new snapshot + simplfied_eap_snapshot = self.simplified_eap.generate_snapshot() + assert simplfied_eap_snapshot.version == 2, "Snapshot version should be 2" + + data = { + "export_type": Export.ExportType.SIMPLIFIED_EAP, + "export_id": self.eap_registration.id, + "version": 2, + } + + with self.capture_on_commit_callbacks(execute=True): + response = self.client.post(self.url, data, format="json") + self.assert_201(response) + self.assertIsNotNone(response.data["id"], response.data) + + expected_url = ( + f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/?version=2" + ) + self.assertEqual(response.data["url"], expected_url) + @mock.patch("api.serializers.generate_url.delay") def test_full_eap_export(self, mock_generate_url): - self.full_eap = FullEAPFactory.create( - eap_registration=self.eap_registration, + eap_registration = EAPRegistrationFactory.create( + eap_type=EAPType.FULL_EAP, + country=self.country, + national_society=self.national_society, + disaster_type=self.disaster_type, + created_by=self.user, + modified_by=self.user, + ) + + FullEAPFactory.create( + eap_registration=eap_registration, created_by=self.user, modified_by=self.user, budget_file=EAPFileFactory._create_file( @@ -1679,7 +1710,7 @@ def test_full_eap_export(self, mock_generate_url): ) data = { "export_type": Export.ExportType.FULL_EAP, - "export_id": self.eap_registration.id, + "export_id": eap_registration.id, "is_pga": False, } @@ -1689,7 +1720,7 @@ def test_full_eap_export(self, mock_generate_url): response = self.client.post(self.url, data, format="json") self.assert_201(response) self.assertIsNotNone(response.data["id"], response.data) - expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.FULL_EAP}/export/" + expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{eap_registration.id}/{Export.ExportType.FULL_EAP}/export/" self.assertEqual(response.data["url"], expected_url) self.assertEqual(response.data["status"], Export.ExportStatus.PENDING) @@ -1703,6 +1734,56 @@ def test_full_eap_export(self, mock_generate_url): django_get_language(), ) + @mock.patch("api.serializers.generate_url.delay") + def test_diff_export_eap(self, mock_generate_url): + eap_registration = EAPRegistrationFactory.create( + eap_type=EAPType.SIMPLIFIED_EAP, + country=self.country, + national_society=self.national_society, + disaster_type=self.disaster_type, + created_by=self.user, + modified_by=self.user, + ) + + SimplifiedEAPFactory.create( + eap_registration=eap_registration, + created_by=self.user, + modified_by=self.user, + budget_file=EAPFileFactory._create_file( + created_by=self.user, + modified_by=self.user, + ), + ) + + self.authenticate(self.user) + data = { + "export_type": Export.ExportType.SIMPLIFIED_EAP, + "export_id": eap_registration.id, + "diff": True, + } + + self.authenticate(self.user) + + with self.capture_on_commit_callbacks(execute=True): + response = self.client.post(self.url, data, format="json") + self.assert_201(response) + self.assertIsNotNone(response.data["id"], response.data) + + expected_url = ( + f"{settings.GO_WEB_INTERNAL_URL}/eap/{eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/?diff=true" + ) + self.assertEqual(response.data["url"], expected_url) + + self.assertEqual(mock_generate_url.called, True) + title = f"{self.national_society.name}-{self.disaster_type.name}" + mock_generate_url.assert_called_once_with( + expected_url, + response.data["id"], + self.user.id, + title, + django_get_language(), + ) + class EAPFullTestCase(APITestCase): def setUp(self): From abc20b94143333aa7ab713abda914374b8da0c34 Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Fri, 12 Dec 2025 14:15:51 +0545 Subject: [PATCH 3/3] feat(eap): Update on Export url for eaps - Add default ordering - Add created and modified at --- api/serializers.py | 57 +++++++++++++++++++++++++++------------------- assets | 2 +- eap/serializers.py | 6 +++++ eap/test_views.py | 38 +++++++++++++++++++------------ eap/views.py | 1 - 5 files changed, 63 insertions(+), 41 deletions(-) diff --git a/api/serializers.py b/api/serializers.py index ec77e906c..4d8496b05 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -15,7 +15,7 @@ from api.utils import CountryValidator, RegionValidator from deployments.models import EmergencyProject, Personnel, PersonnelDeployment from dref.models import Dref, DrefFinalReport, DrefOperationalUpdate -from eap.models import FullEAP, SimplifiedEAP +from eap.models import EAPRegistration, FullEAP, SimplifiedEAP from lang.models import String from lang.serializers import ModelSerializer from local_units.models import DelegationOffice @@ -2559,19 +2559,6 @@ def validate_pdf_file(self, pdf_file): validate_file_type(pdf_file) return pdf_file - def get_latest(self, model: type[SimplifiedEAP | FullEAP], eap_registration_id: int, version: int | None = None): - """ - Get the latest version of the EAP (Simplified or Full) based on the eap_registration_id and optional version. - if version is provided, it fetches that specific version, otherwise it fetches the latest version. - """ - filters = { - "eap_registration__id": eap_registration_id, - } - if version: - filters["version"] = version - - return model.objects.filter(**filters).order_by("-version").first() - def create(self, validated_data): language = django_get_language() export_id = validated_data.get("export_id") @@ -2588,20 +2575,42 @@ def create(self, validated_data): overview = Overview.objects.filter(id=export_id).first() title = f"{overview.country.name}-preparedness-{overview.get_phase_display()}" elif export_type == Export.ExportType.SIMPLIFIED_EAP: - simplified_eap = self.get_latest( - model=SimplifiedEAP, - eap_registration_id=export_id, - version=version, - ) + if version: + simplified_eap = SimplifiedEAP.objects.filter( + eap_registration=export_id, + version=version, + ).first() + if not simplified_eap: + raise serializers.ValidationError("No Simplified EAP found for the given EAP Registration ID and version") + else: + eap_registration = EAPRegistration.objects.filter(id=export_id).first() + if not eap_registration: + raise serializers.ValidationError("No EAP Registration found for the given ID") + + simplified_eap = eap_registration.latest_simplified_eap + if not simplified_eap: + serializers.ValidationError("No Simplified EAP found for the given EAP Registration ID") + title = ( f"{simplified_eap.eap_registration.national_society.name}-{simplified_eap.eap_registration.disaster_type.name}" ) elif export_type == Export.ExportType.FULL_EAP: - full_eap = self.get_latest( - model=FullEAP, - eap_registration_id=export_id, - version=version, - ) + if version: + full_eap = FullEAP.objects.filter( + eap_registration=export_id, + version=version, + ).first() + if not full_eap: + raise serializers.ValidationError("No Full EAP found for the given EAP Registration ID and version") + else: + eap_registration = EAPRegistration.objects.filter(id=export_id).first() + if not eap_registration: + raise serializers.ValidationError("No EAP Registration found for the given ID") + + full_eap = eap_registration.latest_full_eap + if not full_eap: + serializers.ValidationError("No Full EAP found for the given EAP Registration ID") + title = f"{full_eap.eap_registration.national_society.name}-{full_eap.eap_registration.disaster_type.name}" else: title = "Export" diff --git a/assets b/assets index 585e4c8ee..31f596014 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 585e4c8eea8c255aab7830437b82b20c85d94cce +Subproject commit 31f5960143b09b0d9cfd4e729760d2517783758e diff --git a/eap/serializers.py b/eap/serializers.py index bf863204f..f18672f04 100644 --- a/eap/serializers.py +++ b/eap/serializers.py @@ -98,6 +98,8 @@ class Meta: "version", "is_locked", "updated_checklist_file", + "created_at", + "modified_at", ] @@ -118,6 +120,8 @@ class Meta: "version", "is_locked", "updated_checklist_file", + "created_at", + "modified_at", ] @@ -143,6 +147,8 @@ class Meta: "requirement_cost", "activated_at", "approved_at", + "created_at", + "modified_at", ] diff --git a/eap/test_views.py b/eap/test_views.py index e93420b83..5abedca49 100644 --- a/eap/test_views.py +++ b/eap/test_views.py @@ -1614,8 +1614,11 @@ def setUp(self): self.partner2 = CountryFactory.create(name="partner2", iso3="AAA", iso="AA") self.user = UserFactory.create() + self.url = "/api/v2/pdf-export/" - self.eap_registration = EAPRegistrationFactory.create( + @mock.patch("api.serializers.generate_url.delay") + def test_simplified_eap_export(self, mock_generate_url): + eap_registration = EAPRegistrationFactory.create( eap_type=EAPType.SIMPLIFIED_EAP, country=self.country, national_society=self.national_society, @@ -1624,13 +1627,8 @@ def setUp(self): created_by=self.user, modified_by=self.user, ) - - self.url = "/api/v2/pdf-export/" - - @mock.patch("api.serializers.generate_url.delay") - def test_simplified_eap_export(self, mock_generate_url): - self.simplified_eap = SimplifiedEAPFactory.create( - eap_registration=self.eap_registration, + simplified_eap = SimplifiedEAPFactory.create( + eap_registration=eap_registration, created_by=self.user, modified_by=self.user, national_society_contact_title="NS Title Example", @@ -1639,9 +1637,12 @@ def test_simplified_eap_export(self, mock_generate_url): modified_by=self.user, ), ) + eap_registration.latest_simplified_eap = simplified_eap + eap_registration.save() + data = { "export_type": Export.ExportType.SIMPLIFIED_EAP, - "export_id": self.eap_registration.id, + "export_id": eap_registration.id, "is_pga": False, } @@ -1652,7 +1653,7 @@ def test_simplified_eap_export(self, mock_generate_url): self.assert_201(response) self.assertIsNotNone(response.data["id"], response.data) - expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/" + expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/" self.assertEqual(response.data["url"], expected_url) self.assertEqual(response.data["status"], Export.ExportStatus.PENDING) @@ -1669,12 +1670,12 @@ def test_simplified_eap_export(self, mock_generate_url): # Test Export Snapshot # create a new snapshot - simplfied_eap_snapshot = self.simplified_eap.generate_snapshot() + simplfied_eap_snapshot = simplified_eap.generate_snapshot() assert simplfied_eap_snapshot.version == 2, "Snapshot version should be 2" data = { "export_type": Export.ExportType.SIMPLIFIED_EAP, - "export_id": self.eap_registration.id, + "export_id": eap_registration.id, "version": 2, } @@ -1684,7 +1685,7 @@ def test_simplified_eap_export(self, mock_generate_url): self.assertIsNotNone(response.data["id"], response.data) expected_url = ( - f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/?version=2" + f"{settings.GO_WEB_INTERNAL_URL}/eap/{eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/?version=2" ) self.assertEqual(response.data["url"], expected_url) @@ -1699,7 +1700,7 @@ def test_full_eap_export(self, mock_generate_url): modified_by=self.user, ) - FullEAPFactory.create( + full_eap = FullEAPFactory.create( eap_registration=eap_registration, created_by=self.user, modified_by=self.user, @@ -1708,6 +1709,10 @@ def test_full_eap_export(self, mock_generate_url): modified_by=self.user, ), ) + + eap_registration.latest_full_eap = full_eap + eap_registration.save() + data = { "export_type": Export.ExportType.FULL_EAP, "export_id": eap_registration.id, @@ -1745,7 +1750,7 @@ def test_diff_export_eap(self, mock_generate_url): modified_by=self.user, ) - SimplifiedEAPFactory.create( + simplified_eap = SimplifiedEAPFactory.create( eap_registration=eap_registration, created_by=self.user, modified_by=self.user, @@ -1755,6 +1760,9 @@ def test_diff_export_eap(self, mock_generate_url): ), ) + eap_registration.latest_simplified_eap = simplified_eap + eap_registration.save() + self.authenticate(self.user) data = { "export_type": Export.ExportType.SIMPLIFIED_EAP, diff --git a/eap/views.py b/eap/views.py index c3fccf92e..6ca759a11 100644 --- a/eap/views.py +++ b/eap/views.py @@ -104,7 +104,6 @@ def get_queryset(self) -> QuerySet[EAPRegistration]: "partners", "simplified_eap", ) - .order_by("id") ) @action(