Skip to content

Commit 73448f6

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 6cca70f commit 73448f6

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
@@ -908,12 +908,15 @@ def create_event(self, report):
908908
report.save()
909909
return event
910910

911-
def create_eap_activation(self, eap_activation_data, fieldreport):
912-
eap_id = eap_activation_data.pop('eap')
913-
document_id = eap_activation_data.pop('document')
914-
eap = EAP.objects.get(id=eap_id)
915-
document = EAPDocument.objects.get(id=document_id)
916-
eap_activation = EAPActivation.objects.create(eap=eap, field_report=fieldreport, document=document, **eap_activation_data)
911+
def create_eap_activation(self, data, fieldreport):
912+
eap = EAP.objects.filter(id=data.pop('eap', None)).first()
913+
document = EAPDocument.objects.filter(id=data.pop('document', None)).first()
914+
eap_activation = EAPActivation.objects.create(
915+
eap=eap,
916+
field_report=fieldreport,
917+
document=document,
918+
**data
919+
)
917920
return eap_activation
918921

919922
def create(self, request, *args, **kwargs):
@@ -932,7 +935,7 @@ def create(self, request, *args, **kwargs):
932935
# TODO: Use serializer to create fieldreport
933936
eap_activation_data = data.pop('eap_activation')
934937
fieldreport = FieldReport.objects.create(**data)
935-
self.create_eap_activation(eap_activation_data, fieldreport)
938+
self.create_eap_activation(eap_activation_data, fieldreport) # activate respected eap for field report
936939
CreateFieldReportSerializer.trigger_field_translation(fieldreport)
937940
except Exception as e:
938941
try:
@@ -974,20 +977,22 @@ def create(self, request, *args, **kwargs):
974977
return Response({'id': fieldreport.id}, status=HTTP_201_CREATED)
975978

976979

977-
from eap.serializers import EAPActivationSerializer
980+
from eap.serializers import EAPActivationSerializer # It is imported here to avoid circular import issue
978981
class UpdateFieldReport(UpdateAPIView, GenericFieldReportView):
979982
authentication_classes = (TokenAuthentication,)
980983
permission_classes = (IsAuthenticated,)
981984
queryset = FieldReport.objects.all()
982985
serializer_class = CreateFieldReportSerializer
983986

984-
def update_eap_activation(self, eap_activation_data, fieldreport):
985-
eap_activation_data.pop('eap')
986-
document_id = eap_activation_data.pop('document')
987-
eap_activation_obj = EAPActivation.objects.get(field_report=fieldreport)
988-
eap_activation = EAPActivationSerializer().update(eap_activation_obj, eap_activation_data)
989-
eap_activation_obj.document = EAPDocument.objects.get(id=document_id)
990-
eap_activation_obj.save(update_fields=['document'])
987+
# function for updating eap-activate in field report
988+
def update_eap_activation(self, data, fieldreport):
989+
eap_id = data.pop('eap', None)
990+
document_id = data.pop('document', None)
991+
instance = EAPActivation.objects.get(field_report=fieldreport)
992+
eap_activation = EAPActivationSerializer().update(instance, data)
993+
instance.document = EAPDocument.objects.filter(id=document_id).first()
994+
instance.eap = EAP.objects.filter(id=eap_id).first()
995+
instance.save(update_fields=['document', 'eap'])
991996
return eap_activation
992997

993998
def partial_update(self, request, *args, **kwargs):
@@ -1004,6 +1009,7 @@ def update(self, request, *args, **kwargs):
10041009

10051010
try:
10061011
field_report = serializer.save()
1012+
# update respected eap-activation
10071013
self.update_eap_activation(request.data['eap_activation'], field_report)
10081014
except Exception:
10091015
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)