Skip to content

Commit 55ba9b7

Browse files
authored
Merge pull request #2754 from IFRCGo/feature/dref-event-trigger-translation
feat: Trigger event translation for approved DREF
2 parents ee0aea9 + ba2935f commit 55ba9b7

4 files changed

Lines changed: 93 additions & 3 deletions

File tree

api/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,11 @@ class EventSource(models.IntegerChoices):
886886
verbose_name=_("emergency response contact email"), null=True, blank=True, max_length=255
887887
)
888888

889+
# TYPING
890+
891+
id: int
892+
pk: int
893+
889894
class Meta:
890895
ordering = (
891896
"-disaster_start_date",

dref/test_views.py

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from django.core import management
1111
from rest_framework import status
1212

13-
from api.models import Country, DisasterType, District, Region, RegionName
13+
from api.models import Country, DisasterType, District, Event, Region, RegionName
1414
from api.utils import get_model_name
1515
from deployments.factories.project import SectorFactory
1616
from deployments.factories.user import UserFactory
@@ -30,6 +30,7 @@
3030
ProposedAction,
3131
)
3232
from dref.tasks import send_dref_email
33+
from lang.serializers import TranslatedModelSerializerMixin
3334
from main.test_case import APITestCase
3435

3536

@@ -2664,6 +2665,79 @@ def test_dref_final_report_finalize(self, mock_translation):
26642665
self.assert_200(response)
26652666
self.assertEqual(response.data["status"], Dref.Status.FINALIZED)
26662667

2668+
@patch.object(
2669+
TranslatedModelSerializerMixin,
2670+
"trigger_field_translation",
2671+
)
2672+
def test_create_event_from_dref(self, mock_trigger_translation):
2673+
region = Region.objects.create(name=RegionName.ASIA_PACIFIC)
2674+
country = Country.objects.create(name="Test countrynpl", region=region)
2675+
district = District.objects.create(name="test district", country=country)
2676+
disaster_type = DisasterType.objects.create(name="test disaster")
2677+
dref = DrefFactory.create(
2678+
title="Test Title",
2679+
disaster_type=disaster_type,
2680+
event_description="Test event description",
2681+
event_date="2021-10-10",
2682+
glide_code="GLIDE123",
2683+
created_by=self.user,
2684+
country=country,
2685+
status=Dref.Status.FINALIZED,
2686+
type_of_dref=Dref.DrefType.ASSESSMENT,
2687+
)
2688+
dref.district.set([district])
2689+
url = f"/api/v2/dref/{dref.id}/approve/"
2690+
self.authenticate(self.root_user)
2691+
response = self.client.post(url)
2692+
self.assert_200(response)
2693+
2694+
dref.refresh_from_db()
2695+
2696+
dref_event_id = response.data["event"]
2697+
event_instance = Event.objects.get(id=dref_event_id)
2698+
2699+
# Translation triggered
2700+
mock_trigger_translation.assert_called_once()
2701+
2702+
translated_event = mock_trigger_translation.call_args.args[0]
2703+
2704+
self.assertEqual(
2705+
translated_event.pk,
2706+
event_instance.pk,
2707+
)
2708+
2709+
self.assertEqual(
2710+
{
2711+
event_instance.name,
2712+
event_instance.dtype.id,
2713+
event_instance.summary,
2714+
event_instance.disaster_start_date.date(),
2715+
event_instance.glide,
2716+
event_instance.source,
2717+
},
2718+
{
2719+
dref.title,
2720+
dref.disaster_type.id,
2721+
dref.event_description,
2722+
dref.event_date,
2723+
dref.glide_code,
2724+
Event.EventSource.DREF,
2725+
},
2726+
)
2727+
self.assertEqual(
2728+
list(event_instance.regions.values_list("id", flat=True)),
2729+
[dref.country.region.id],
2730+
)
2731+
self.assertEqual(
2732+
list(event_instance.countries.values_list("id", flat=True)),
2733+
[dref.country.id],
2734+
)
2735+
self.assertEqual(
2736+
list(event_instance.districts.values_list("id", flat=True)),
2737+
[district.id],
2738+
)
2739+
self.assertTrue(event_instance.auto_generated)
2740+
26672741

26682742
User = get_user_model()
26692743

dref/utils.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ def create_event_from_dref(dref: Dref) -> Event:
6767
source=Event.EventSource.DREF,
6868
)
6969

70-
event.countries.add(dref.country)
70+
country = getattr(dref, "country", None)
71+
if country:
72+
event.countries.add(dref.country)
73+
7174
event.districts.add(*dref.district.all())
75+
region = getattr(country, "region", None)
76+
if region:
77+
event.regions.add(region)
7278
return event

dref/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
)
5151
from dref.tasks import process_dref_translation
5252
from dref.utils import create_event_from_dref
53+
from lang.serializers import TranslatedModelSerializerMixin
5354
from main.permissions import DenyGuestUserPermission
5455

5556
logger = logging.getLogger(__name__)
@@ -127,7 +128,11 @@ def get_approved(self, request, pk=None, version=None):
127128
if event:
128129
dref.event = event
129130
else:
130-
dref.event = create_event_from_dref(dref)
131+
event = create_event_from_dref(dref)
132+
dref.event = event
133+
# Translate the emergency instance
134+
TranslatedModelSerializerMixin.trigger_field_translation(event)
135+
131136
dref.status = Dref.Status.APPROVED
132137
dref.save(update_fields=["event", "status"])
133138

0 commit comments

Comments
 (0)