Skip to content

Commit 9a1a544

Browse files
committed
feat(eap): Update on Export url for eaps
1 parent 64ea825 commit 9a1a544

File tree

3 files changed

+57
-40
lines changed

3 files changed

+57
-40
lines changed

api/serializers.py

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from api.utils import CountryValidator, RegionValidator
1616
from deployments.models import EmergencyProject, Personnel, PersonnelDeployment
1717
from dref.models import Dref, DrefFinalReport, DrefOperationalUpdate
18-
from eap.models import FullEAP, SimplifiedEAP
18+
from eap.models import EAPRegistration, FullEAP, SimplifiedEAP
1919
from lang.models import String
2020
from lang.serializers import ModelSerializer
2121
from local_units.models import DelegationOffice
@@ -2559,19 +2559,6 @@ def validate_pdf_file(self, pdf_file):
25592559
validate_file_type(pdf_file)
25602560
return pdf_file
25612561

2562-
def get_latest(self, model: type[SimplifiedEAP | FullEAP], eap_registration_id: int, version: int | None = None):
2563-
"""
2564-
Get the latest version of the EAP (Simplified or Full) based on the eap_registration_id and optional version.
2565-
if version is provided, it fetches that specific version, otherwise it fetches the latest version.
2566-
"""
2567-
filters = {
2568-
"eap_registration__id": eap_registration_id,
2569-
}
2570-
if version:
2571-
filters["version"] = version
2572-
2573-
return model.objects.filter(**filters).order_by("-version").first()
2574-
25752562
def create(self, validated_data):
25762563
language = django_get_language()
25772564
export_id = validated_data.get("export_id")
@@ -2588,20 +2575,42 @@ def create(self, validated_data):
25882575
overview = Overview.objects.filter(id=export_id).first()
25892576
title = f"{overview.country.name}-preparedness-{overview.get_phase_display()}"
25902577
elif export_type == Export.ExportType.SIMPLIFIED_EAP:
2591-
simplified_eap = self.get_latest(
2592-
model=SimplifiedEAP,
2593-
eap_registration_id=export_id,
2594-
version=version,
2595-
)
2578+
if version:
2579+
simplified_eap = SimplifiedEAP.objects.filter(
2580+
eap_registration=export_id,
2581+
version=version,
2582+
).first()
2583+
if not simplified_eap:
2584+
raise serializers.ValidationError("No Simplified EAP found for the given EAP Registration ID and version")
2585+
else:
2586+
eap_registration = EAPRegistration.objects.filter(id=export_id).first()
2587+
if not eap_registration:
2588+
raise serializers.ValidationError("No EAP Registration found for the given ID")
2589+
2590+
simplified_eap = eap_registration.latest_simplified_eap
2591+
if not simplified_eap:
2592+
serializers.ValidationError("No Simplified EAP found for the given EAP Registration ID")
2593+
25962594
title = (
25972595
f"{simplified_eap.eap_registration.national_society.name}-{simplified_eap.eap_registration.disaster_type.name}"
25982596
)
25992597
elif export_type == Export.ExportType.FULL_EAP:
2600-
full_eap = self.get_latest(
2601-
model=FullEAP,
2602-
eap_registration_id=export_id,
2603-
version=version,
2604-
)
2598+
if version:
2599+
full_eap = FullEAP.objects.filter(
2600+
eap_registration=export_id,
2601+
version=version,
2602+
).first()
2603+
if not full_eap:
2604+
raise serializers.ValidationError("No Full EAP found for the given EAP Registration ID and version")
2605+
else:
2606+
eap_registration = EAPRegistration.objects.filter(id=export_id).first()
2607+
if not eap_registration:
2608+
raise serializers.ValidationError("No EAP Registration found for the given ID")
2609+
2610+
full_eap = eap_registration.latest_full_eap
2611+
if not full_eap:
2612+
serializers.ValidationError("No Full EAP found for the given EAP Registration ID")
2613+
26052614
title = f"{full_eap.eap_registration.national_society.name}-{full_eap.eap_registration.disaster_type.name}"
26062615
else:
26072616
title = "Export"

assets

eap/test_views.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,8 +1614,11 @@ def setUp(self):
16141614
self.partner2 = CountryFactory.create(name="partner2", iso3="AAA", iso="AA")
16151615

16161616
self.user = UserFactory.create()
1617+
self.url = "/api/v2/pdf-export/"
16171618

1618-
self.eap_registration = EAPRegistrationFactory.create(
1619+
@mock.patch("api.serializers.generate_url.delay")
1620+
def test_simplified_eap_export(self, mock_generate_url):
1621+
eap_registration = EAPRegistrationFactory.create(
16191622
eap_type=EAPType.SIMPLIFIED_EAP,
16201623
country=self.country,
16211624
national_society=self.national_society,
@@ -1624,13 +1627,8 @@ def setUp(self):
16241627
created_by=self.user,
16251628
modified_by=self.user,
16261629
)
1627-
1628-
self.url = "/api/v2/pdf-export/"
1629-
1630-
@mock.patch("api.serializers.generate_url.delay")
1631-
def test_simplified_eap_export(self, mock_generate_url):
1632-
self.simplified_eap = SimplifiedEAPFactory.create(
1633-
eap_registration=self.eap_registration,
1630+
simplified_eap = SimplifiedEAPFactory.create(
1631+
eap_registration=eap_registration,
16341632
created_by=self.user,
16351633
modified_by=self.user,
16361634
national_society_contact_title="NS Title Example",
@@ -1639,9 +1637,12 @@ def test_simplified_eap_export(self, mock_generate_url):
16391637
modified_by=self.user,
16401638
),
16411639
)
1640+
eap_registration.latest_simplified_eap = simplified_eap
1641+
eap_registration.save()
1642+
16421643
data = {
16431644
"export_type": Export.ExportType.SIMPLIFIED_EAP,
1644-
"export_id": self.eap_registration.id,
1645+
"export_id": eap_registration.id,
16451646
"is_pga": False,
16461647
}
16471648

@@ -1652,7 +1653,7 @@ def test_simplified_eap_export(self, mock_generate_url):
16521653
self.assert_201(response)
16531654
self.assertIsNotNone(response.data["id"], response.data)
16541655

1655-
expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/"
1656+
expected_url = f"{settings.GO_WEB_INTERNAL_URL}/eap/{eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/"
16561657
self.assertEqual(response.data["url"], expected_url)
16571658
self.assertEqual(response.data["status"], Export.ExportStatus.PENDING)
16581659

@@ -1669,12 +1670,12 @@ def test_simplified_eap_export(self, mock_generate_url):
16691670
# Test Export Snapshot
16701671

16711672
# create a new snapshot
1672-
simplfied_eap_snapshot = self.simplified_eap.generate_snapshot()
1673+
simplfied_eap_snapshot = simplified_eap.generate_snapshot()
16731674
assert simplfied_eap_snapshot.version == 2, "Snapshot version should be 2"
16741675

16751676
data = {
16761677
"export_type": Export.ExportType.SIMPLIFIED_EAP,
1677-
"export_id": self.eap_registration.id,
1678+
"export_id": eap_registration.id,
16781679
"version": 2,
16791680
}
16801681

@@ -1684,7 +1685,7 @@ def test_simplified_eap_export(self, mock_generate_url):
16841685
self.assertIsNotNone(response.data["id"], response.data)
16851686

16861687
expected_url = (
1687-
f"{settings.GO_WEB_INTERNAL_URL}/eap/{self.eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/?version=2"
1688+
f"{settings.GO_WEB_INTERNAL_URL}/eap/{eap_registration.id}/{Export.ExportType.SIMPLIFIED_EAP}/export/?version=2"
16881689
)
16891690
self.assertEqual(response.data["url"], expected_url)
16901691

@@ -1699,7 +1700,7 @@ def test_full_eap_export(self, mock_generate_url):
16991700
modified_by=self.user,
17001701
)
17011702

1702-
FullEAPFactory.create(
1703+
full_eap = FullEAPFactory.create(
17031704
eap_registration=eap_registration,
17041705
created_by=self.user,
17051706
modified_by=self.user,
@@ -1708,6 +1709,10 @@ def test_full_eap_export(self, mock_generate_url):
17081709
modified_by=self.user,
17091710
),
17101711
)
1712+
1713+
eap_registration.latest_full_eap = full_eap
1714+
eap_registration.save()
1715+
17111716
data = {
17121717
"export_type": Export.ExportType.FULL_EAP,
17131718
"export_id": eap_registration.id,
@@ -1745,7 +1750,7 @@ def test_diff_export_eap(self, mock_generate_url):
17451750
modified_by=self.user,
17461751
)
17471752

1748-
SimplifiedEAPFactory.create(
1753+
simplified_eap = SimplifiedEAPFactory.create(
17491754
eap_registration=eap_registration,
17501755
created_by=self.user,
17511756
modified_by=self.user,
@@ -1755,6 +1760,9 @@ def test_diff_export_eap(self, mock_generate_url):
17551760
),
17561761
)
17571762

1763+
eap_registration.latest_simplified_eap = simplified_eap
1764+
eap_registration.save()
1765+
17581766
self.authenticate(self.user)
17591767
data = {
17601768
"export_type": Export.ExportType.SIMPLIFIED_EAP,

0 commit comments

Comments
 (0)