Skip to content

Commit cf25ed8

Browse files
Add test case for EAP final report
1 parent 3625320 commit cf25ed8

File tree

4 files changed

+134
-16
lines changed

4 files changed

+134
-16
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Generated by Django 2.2.28 on 2022-08-03 09:36
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('eap', '0006_auto_20220802_0835'),
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name='ActionAchievement',
16+
fields=[
17+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18+
('early_act_achievement', models.TextField(blank=True, null=True, verbose_name='Early Actions Achievements')),
19+
('client_id', models.CharField(blank=True, max_length=50, null=True)),
20+
('action', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='action_achievement', to='eap.Action')),
21+
('operational_plan', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='action_achievement', to='eap.EAPOperationalPlan', verbose_name='Action Achievement')),
22+
],
23+
options={
24+
'verbose_name': 'Action Achievement',
25+
'verbose_name_plural': 'Action Achievements',
26+
},
27+
),
28+
migrations.AlterField(
29+
model_name='operationalplanindicator',
30+
name='indicator',
31+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operational_plan_indicator', to='eap.EarlyActionIndicator'),
32+
),
33+
migrations.DeleteModel(
34+
name='ActionAchievements',
35+
),
36+
]

eap/models.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,9 +289,10 @@ class OperationalPlanIndicator(models.Model):
289289
related_name="operational_plan_indicator", verbose_name=_('Operational Plan'),
290290
null=True, blank=True
291291
)
292-
indicator = models.OneToOneField(
292+
indicator = models.ForeignKey(
293293
EarlyActionIndicator,
294294
on_delete=models.SET_NULL,
295+
related_name='operational_plan_indicator',
295296
null=True,
296297
blank=True
297298
)
@@ -305,13 +306,18 @@ def __str__(self):
305306
return f'{self.indicator.id}'
306307

307308

308-
class ActionAchievements(models.Model):
309+
class ActionAchievement(models.Model):
309310
operational_plan = models.ForeignKey(
310311
EAPOperationalPlan, on_delete=models.SET_NULL,
311312
related_name="action_achievement", verbose_name=_('Action Achievement'),
312313
null=True, blank=True
313314
)
314-
action = models.OneToOneField(Action, on_delete=models.SET_NULL, null=True, blank=True)
315+
action = models.ForeignKey(
316+
Action,
317+
on_delete=models.SET_NULL,
318+
related_name='action_achievement',
319+
null=True, blank=True
320+
)
315321
early_act_achievement = models.TextField(verbose_name=_('Early Actions Achievements'), null=True, blank=True)
316322
client_id = models.CharField(max_length=50, null=True, blank=True)
317323

eap/serializers.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
from rest_framework import serializers
44

5-
from enumfields.drf.serializers import EnumSupportSerializerMixin
6-
75
from api.serializers import (
86
UserNameSerializer,
97
DisasterTypeSerializer,
@@ -22,8 +20,9 @@
2220
PrioritizedRisk,
2321
EAPActivation,
2422
EAPOperationalPlan,
25-
ActionAchievements,
23+
ActionAchievement,
2624
EAPActivationReport,
25+
OperationalPlanIndicator,
2726
)
2827

2928
from main.writable_nested_serializers import (
@@ -153,10 +152,17 @@ class Meta:
153152
exclude = ('eap', 'field_report')
154153

155154

156-
class ActionAchievementsSerializer(serializers.ModelSerializer):
155+
class ActionAchievementSerializer(serializers.ModelSerializer):
156+
157+
class Meta:
158+
model = ActionAchievement
159+
exclude = ('operational_plan',)
160+
161+
162+
class OperationalPlanIndicatorSerializer(serializers.ModelSerializer):
157163

158164
class Meta:
159-
model = ActionAchievements
165+
model = OperationalPlanIndicator
160166
exclude = ('operational_plan',)
161167

162168

@@ -165,8 +171,8 @@ class OperationalPlanSerializer(
165171
NestedCreateMixin,
166172
serializers.ModelSerializer
167173
):
168-
# indicators = EarlyActionIndicatorSerializer(many=True, required=False)
169-
early_actions_achievements = ActionAchievementsSerializer(source='action_achievement', many=True, required=False)
174+
indicators = OperationalPlanIndicatorSerializer(source='operational_plan_indicator', many=True, required=False)
175+
early_actions_achievements = ActionAchievementSerializer(source='action_achievement', many=True, required=False)
170176

171177
class Meta:
172178
model = EAPOperationalPlan

eap/test_views.py

Lines changed: 76 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@
44
from django.contrib.auth.models import User
55

66
from main.test_case import APITestCase
7-
from eap.models import EAP, EarlyAction, EAPActivationReport, Action
7+
from eap.models import (
8+
EAP,
9+
EarlyAction,
10+
EAPActivationReport,
11+
Action,
12+
EarlyActionIndicator,
13+
)
814

915
from api.factories.country import CountryFactory
1016
from api.factories.district import DistrictFactory
@@ -174,11 +180,19 @@ def setUp(self):
174180
"prepo_activities_achievements": "test",
175181
"early_actions_achievements": [
176182
{
177-
"early_act_achievement": "test"
183+
"early_act_achievement": "test 1"
178184
},
179185
{
180186
"early_act_achievement": "test 2"
181187
}
188+
],
189+
"indicators": [
190+
{
191+
"indicator_value": 200
192+
},
193+
{
194+
"indicator_value": 300
195+
}
182196
]
183197
},
184198
]
@@ -264,12 +278,17 @@ def test_create_and_update_eap_activation_report(self):
264278
self.client.force_authenticate(user=self.user)
265279
# create eap
266280
with self.capture_on_commit_callbacks(execute=True):
267-
self.client.post('/api/v2/eap/', self.body, format='json').json()
268-
actions = Action.objects.all().values_list('id', flat=True)
269-
early_actions = EarlyAction.objects.all().values_list('id', flat=True)
270-
self.eap_act_report_body['operational_plans'][0]['early_action'] = early_actions[0]
281+
eap_resp = self.client.post('/api/v2/eap/', self.body, format='json').json()
282+
early_action = EarlyAction.objects.get(id=eap_resp['early_actions'][0]['id'])
283+
284+
actions = list(Action.objects.filter(early_action=early_action).values_list('id', flat=True))
285+
actions_indicators = early_action.indicators.all().values_list('id', flat=True)
286+
self.eap_act_report_body['operational_plans'][0]['early_action'] = early_action.id
271287
self.eap_act_report_body['operational_plans'][0]['early_actions_achievements'][0]['action'] = actions[0]
272288
self.eap_act_report_body['operational_plans'][0]['early_actions_achievements'][1]['action'] = actions[1]
289+
290+
self.eap_act_report_body['operational_plans'][0]['indicators'][0]['indicator'] = actions_indicators[0]
291+
self.eap_act_report_body['operational_plans'][0]['indicators'][1]['indicator'] = actions_indicators[1]
273292
# create eap_report
274293
with self.capture_on_commit_callbacks(execute=True):
275294
final_report_resp = self.client.post(
@@ -283,3 +302,54 @@ def test_create_and_update_eap_activation_report(self):
283302
self.assertEqual(final_report_resp['ifrc_financial_report'], self.document1.id)
284303
self.assertEqual(len(final_report_resp['documents']), 2)
285304
self.assertEqual(len(final_report_resp['operational_plans']), 1)
305+
self.assertEqual(len(final_report_resp['operational_plans'][0]['early_actions_achievements']), 2)
306+
self.assertEqual(len(final_report_resp['operational_plans'][0]['indicators']), 2)
307+
308+
# update eap_report
309+
data = self.eap_act_report_body
310+
data['description'] = 'updated description'
311+
data['documents'] = [self.document1.id]
312+
data['ifrc_financial_report'] = self.document2.id
313+
data['operational_plans'] = [
314+
{
315+
"budget": 500000,
316+
"value": 500,
317+
"no_of_people_reached": 500,
318+
"readiness_activities_achievements": "test updated",
319+
"prepo_activities_achievements": "test updated",
320+
"early_actions_achievements": [
321+
{
322+
'action': actions[0],
323+
"early_act_achievement": "test updated"
324+
},
325+
{
326+
'action': actions[1],
327+
"early_act_achievement": "test 2 updated"
328+
}
329+
],
330+
"indicators": [
331+
{
332+
"indicator": actions_indicators[0],
333+
"indicator_value": 500
334+
},
335+
{
336+
'indicator': actions_indicators[1],
337+
"indicator_value": 500
338+
}
339+
]
340+
},
341+
]
342+
with self.capture_on_commit_callbacks(execute=True):
343+
final_report_updated_resp = self.client.put(
344+
f'/api/v2/eap_activation_report/{created.id}/',
345+
data,
346+
format='json'
347+
).json()
348+
updated = EAPActivationReport.objects.get(id=final_report_updated_resp['id'])
349+
self.assertEqual(updated.created_by.id, self.user.id)
350+
self.assertEqual(final_report_updated_resp['eap_activation'], self.eap_activation.id)
351+
self.assertEqual(final_report_updated_resp['ifrc_financial_report'], self.document2.id)
352+
self.assertEqual(len(final_report_updated_resp['documents']), 1)
353+
self.assertEqual(len(final_report_updated_resp['operational_plans']), 1)
354+
self.assertEqual(len(final_report_updated_resp['operational_plans'][0]['early_actions_achievements']), 2)
355+
self.assertEqual(len(final_report_updated_resp['operational_plans'][0]['indicators']), 2)

0 commit comments

Comments
 (0)