Skip to content

Commit 4b3f013

Browse files
Modified test case for field report to check EAP Activation Data
- Solve issue for empty document for eap activation create and update
1 parent fe19092 commit 4b3f013

File tree

4 files changed

+53
-20
lines changed

4 files changed

+53
-20
lines changed

api/drf_views.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -916,12 +916,15 @@ def create_event(self, report):
916916
report.save()
917917
return event
918918

919-
def create_eap_activation(self, eap_activation_data, fieldreport):
920-
eap_id = eap_activation_data.pop('eap')
921-
document_id = eap_activation_data.pop('document')
922-
eap = EAP.objects.get(id=eap_id)
923-
document = EAPDocument.objects.get(id=document_id)
924-
eap_activation = EAPActivation.objects.create(eap=eap, field_report=fieldreport, document=document, **eap_activation_data)
919+
def create_eap_activation(self, data, fieldreport):
920+
eap = EAP.objects.filter(id=data.pop('eap', None)).first()
921+
document = EAPDocument.objects.filter(id=data.pop('document', None)).first()
922+
eap_activation = EAPActivation.objects.create(
923+
eap=eap,
924+
field_report=fieldreport,
925+
document=document,
926+
**data
927+
)
925928
return eap_activation
926929

927930
def create(self, request, *args, **kwargs):
@@ -940,7 +943,7 @@ def create(self, request, *args, **kwargs):
940943
# TODO: Use serializer to create fieldreport
941944
eap_activation_data = data.pop('eap_activation')
942945
fieldreport = FieldReport.objects.create(**data)
943-
self.create_eap_activation(eap_activation_data, fieldreport)
946+
self.create_eap_activation(eap_activation_data, fieldreport) # activate respected eap for field report
944947
CreateFieldReportSerializer.trigger_field_translation(fieldreport)
945948
except Exception as e:
946949
try:
@@ -982,20 +985,22 @@ def create(self, request, *args, **kwargs):
982985
return Response({'id': fieldreport.id}, status=HTTP_201_CREATED)
983986

984987

985-
from eap.serializers import EAPActivationSerializer
988+
from eap.serializers import EAPActivationSerializer # It is imported here to avoid circular import issue
986989
class UpdateFieldReport(UpdateAPIView, GenericFieldReportView):
987990
authentication_classes = (TokenAuthentication,)
988991
permission_classes = (IsAuthenticated,)
989992
queryset = FieldReport.objects.all()
990993
serializer_class = CreateFieldReportSerializer
991994

992-
def update_eap_activation(self, eap_activation_data, fieldreport):
993-
eap_activation_data.pop('eap')
994-
document_id = eap_activation_data.pop('document')
995-
eap_activation_obj = EAPActivation.objects.get(field_report=fieldreport)
996-
eap_activation = EAPActivationSerializer().update(eap_activation_obj, eap_activation_data)
997-
eap_activation_obj.document = EAPDocument.objects.get(id=document_id)
998-
eap_activation_obj.save(update_fields=['document'])
995+
# function for updating eap-activate in field report
996+
def update_eap_activation(self, data, fieldreport):
997+
eap_id = data.pop('eap', None)
998+
document_id = data.pop('document', None)
999+
instance = EAPActivation.objects.get(field_report=fieldreport)
1000+
eap_activation = EAPActivationSerializer().update(instance, data)
1001+
instance.document = EAPDocument.objects.filter(id=document_id).first()
1002+
instance.eap = EAP.objects.filter(id=eap_id).first()
1003+
instance.save(update_fields=['document', 'eap'])
9991004
return eap_activation
10001005

10011006
def partial_update(self, request, *args, **kwargs):
@@ -1012,6 +1017,7 @@ def update(self, request, *args, **kwargs):
10121017

10131018
try:
10141019
field_report = serializer.save()
1020+
# update respected eap-activation
10151021
self.update_eap_activation(request.data['eap_activation'], field_report)
10161022
except Exception:
10171023
logger.error('Faild to update field report', exc_info=True)

api/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1060,7 +1060,8 @@ class Meta:
10601060
model = FieldReport
10611061
fields = '__all__'
10621062

1063-
from eap.serializers import EAPActivationSerializer
1063+
1064+
from eap.serializers import EAPActivationSerializer # It is imported here to avoid circular import issue
10641065
class DetailFieldReportSerializer(FieldReportEnumDisplayMixin, ModelSerializer):
10651066
user = UserSerializer()
10661067
dtype = DisasterTypeSerializer()

api/test_views.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
AppealFactory
1414
)
1515
from eap.factories import EAPFactory, EAPDocumentFactory
16+
from eap.models import EAPActivation
1617

1718

1819
class AuthTokenTest(APITestCase):
@@ -64,7 +65,6 @@ def test_sit_rep_types(self):
6465

6566
# Filter by event
6667
response = self.client.get('/api/v2/situation_report/?limit=100&event=%s' % event1.id)
67-
print(response)
6868
self.assertEqual(response.status_code, 200)
6969
count = response.json()['count']
7070
self.assertEqual(count, 3)
@@ -116,6 +116,15 @@ def test_create_and_update(self):
116116
'description': 'test eap description',
117117
'trigger_met_date': '2022-11-11 00:00',
118118
'document': document1.id,
119+
'originator_name': 'test name',
120+
'originator_title': 'test originator title',
121+
'originator_email': '[email protected]',
122+
'nsc_name_operational': 'test name operational',
123+
'nsc_title_operational': 'test nsc operational',
124+
'nsc_email_operational': 'test nsc operational',
125+
'ifrc_focal_name': 'test focal name',
126+
'ifrc_focal_title': 'test focal title',
127+
'ifrc_focal_email': '[email protected]'
119128
}
120129
}
121130
self.client.force_authenticate(user=user)
@@ -149,6 +158,13 @@ def test_create_and_update(self):
149158
self.aws_translator._fake_translation('test', 'es', 'en')
150159
)
151160

161+
# check eap-activation data
162+
eap_activation_obj = EAPActivation.objects.get(field_report=created)
163+
self.assertEqual(eap_activation_obj.title, 'eap activation title')
164+
self.assertEqual(eap_activation_obj.eap.id, eap1.id)
165+
self.assertEqual(eap_activation_obj.document.id, document1.id)
166+
self.assertEqual(eap_activation_obj.field_report.id, created.id)
167+
152168
# created an emergency automatically
153169
self.assertEqual(created.event.name, 'test')
154170
event_pk = created.event.id
@@ -168,7 +184,13 @@ def test_create_and_update(self):
168184
'trigger_met_date': '2022-11-11 01:00',
169185
'document': document2.id,
170186
'originator_name': 'test name',
187+
'originator_title': 'test originator title',
188+
'originator_email': '[email protected]',
171189
'nsc_name_operational': 'test name operational',
190+
'nsc_title_operational': 'test nsc operational',
191+
'nsc_email_operational': 'test nsc operational',
192+
'ifrc_focal_name': 'test focal name',
193+
'ifrc_focal_title': 'test focal title',
172194
'ifrc_focal_email': '[email protected]'
173195
}
174196

@@ -200,6 +222,13 @@ def test_create_and_update(self):
200222
self.aws_translator._fake_translation('this is a test description', 'es', 'en'),
201223
) # This has not been reset
202224

225+
# check eap-activation data
226+
eap_activation_obj = EAPActivation.objects.get(field_report=updated)
227+
self.assertEqual(eap_activation_obj.title, 'eap activation title updated')
228+
self.assertEqual(eap_activation_obj.eap.id, eap2.id)
229+
self.assertEqual(eap_activation_obj.document.id, document2.id)
230+
self.assertEqual(eap_activation_obj.field_report.id, updated.id)
231+
203232
body['summary'] = 'test [updated again]'
204233
with self.capture_on_commit_callbacks(execute=True):
205234
response = self.client.put(f'/api/v2/update_field_report/{created.id}/', body, format='json').json()

eap/serializers.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,3 @@ class Meta:
145145
model = EAPActivation
146146
exclude = ('eap', 'field_report')
147147

148-
def update(self, instance, validated_data):
149-
eap_activation = super().update(instance, validated_data)
150-
return eap_activation

0 commit comments

Comments
 (0)