Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions api/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -886,6 +886,11 @@ class EventSource(models.IntegerChoices):
verbose_name=_("emergency response contact email"), null=True, blank=True, max_length=255
)

# TYPING

id: int
pk: int

class Meta:
ordering = (
"-disaster_start_date",
Expand Down
76 changes: 75 additions & 1 deletion dref/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from django.core import management
from rest_framework import status

from api.models import Country, DisasterType, District, Region, RegionName
from api.models import Country, DisasterType, District, Event, Region, RegionName
from api.utils import get_model_name
from deployments.factories.project import SectorFactory
from deployments.factories.user import UserFactory
Expand All @@ -30,6 +30,7 @@
ProposedAction,
)
from dref.tasks import send_dref_email
from lang.serializers import TranslatedModelSerializerMixin
from main.test_case import APITestCase


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

@patch.object(
TranslatedModelSerializerMixin,
"trigger_field_translation",
)
def test_create_event_from_dref(self, mock_trigger_translation):
region = Region.objects.create(name=RegionName.ASIA_PACIFIC)
country = Country.objects.create(name="Test countrynpl", region=region)
district = District.objects.create(name="test district", country=country)
disaster_type = DisasterType.objects.create(name="test disaster")
dref = DrefFactory.create(
title="Test Title",
disaster_type=disaster_type,
event_description="Test event description",
event_date="2021-10-10",
glide_code="GLIDE123",
created_by=self.user,
country=country,
status=Dref.Status.FINALIZED,
type_of_dref=Dref.DrefType.ASSESSMENT,
)
dref.district.set([district])
url = f"/api/v2/dref/{dref.id}/approve/"
self.authenticate(self.root_user)
response = self.client.post(url)
self.assert_200(response)

dref.refresh_from_db()

dref_event_id = response.data["event"]
event_instance = Event.objects.get(id=dref_event_id)

# Translation triggered
mock_trigger_translation.assert_called_once()

translated_event = mock_trigger_translation.call_args.args[0]

self.assertEqual(
translated_event.pk,
event_instance.pk,
)

self.assertEqual(
{
event_instance.name,
event_instance.dtype.id,
event_instance.summary,
event_instance.disaster_start_date.date(),
event_instance.glide,
event_instance.source,
},
{
dref.title,
dref.disaster_type.id,
dref.event_description,
dref.event_date,
dref.glide_code,
Event.EventSource.DREF,
},
)
self.assertEqual(
list(event_instance.regions.values_list("id", flat=True)),
[dref.country.region.id],
)
self.assertEqual(
list(event_instance.countries.values_list("id", flat=True)),
[dref.country.id],
)
self.assertEqual(
list(event_instance.districts.values_list("id", flat=True)),
[district.id],
)
self.assertTrue(event_instance.auto_generated)


User = get_user_model()

Expand Down
8 changes: 7 additions & 1 deletion dref/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ def create_event_from_dref(dref: Dref) -> Event:
source=Event.EventSource.DREF,
)

event.countries.add(dref.country)
country = getattr(dref, "country", None)
if country:
event.countries.add(dref.country)

event.districts.add(*dref.district.all())
region = getattr(country, "region", None)
if region:
event.regions.add(region)
return event
7 changes: 6 additions & 1 deletion dref/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
)
from dref.tasks import process_dref_translation
from dref.utils import create_event_from_dref
from lang.serializers import TranslatedModelSerializerMixin
from main.permissions import DenyGuestUserPermission

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -127,7 +128,11 @@ def get_approved(self, request, pk=None, version=None):
if event:
dref.event = event
else:
dref.event = create_event_from_dref(dref)
event = create_event_from_dref(dref)
dref.event = event
# Translate the emergency instance
TranslatedModelSerializerMixin.trigger_field_translation(event)

dref.status = Dref.Status.APPROVED
dref.save(update_fields=["event", "status"])

Expand Down
Loading