|
1 | 1 | import re |
2 | 2 | import uuid |
3 | | -from datetime import timedelta |
| 3 | +from datetime import datetime, timedelta |
4 | 4 | from unittest.mock import patch |
5 | 5 |
|
6 | 6 | from django.contrib.auth.models import User |
|
10 | 10 | from django.utils import timezone |
11 | 11 |
|
12 | 12 | import api.models as models |
| 13 | +from api.factories.disaster_type import DisasterTypeFactory |
13 | 14 | from api.factories.event import ( |
14 | 15 | AppealFactory, |
15 | 16 | AppealType, |
| 17 | + EventContactFactory, |
16 | 18 | EventFactory, |
17 | 19 | EventFeaturedDocumentFactory, |
18 | 20 | EventLinkFactory, |
@@ -1042,3 +1044,97 @@ def test_ifrc_user_sees_all(self): |
1042 | 1044 | ] |
1043 | 1045 | ), |
1044 | 1046 | ) |
| 1047 | + |
| 1048 | + |
| 1049 | +class EmergencyViewTestCase(APITestCase): |
| 1050 | + def setUp(self): |
| 1051 | + super().setUp() |
| 1052 | + self.disaster_type = DisasterTypeFactory.create( |
| 1053 | + name="Flood", |
| 1054 | + ) |
| 1055 | + |
| 1056 | + self.event1 = EventFactory.create( |
| 1057 | + dtype=self.disaster_type, |
| 1058 | + source=models.Event.EventSource.GDACS, |
| 1059 | + slug="test1", |
| 1060 | + parent_event=None, |
| 1061 | + ) |
| 1062 | + self.contact = EventContactFactory.create( |
| 1063 | + event=self.event1, |
| 1064 | + ) |
| 1065 | + |
| 1066 | + self.field_report1 = FieldReportFactory.create( |
| 1067 | + event=self.event1, |
| 1068 | + created_at=timezone.make_aware(datetime(2024, 1, 1)), |
| 1069 | + updated_at=timezone.make_aware(datetime(2026, 1, 1)), |
| 1070 | + fr_num=50, |
| 1071 | + ) |
| 1072 | + |
| 1073 | + self.field_report2 = FieldReportFactory.create( |
| 1074 | + event=self.event1, |
| 1075 | + created_at=timezone.make_aware(datetime(2024, 1, 1)), |
| 1076 | + updated_at=timezone.make_aware(datetime(2025, 1, 1)), |
| 1077 | + fr_num=20, |
| 1078 | + ) |
| 1079 | + |
| 1080 | + self.event2 = EventFactory.create( |
| 1081 | + dtype=self.disaster_type, |
| 1082 | + source=models.Event.EventSource.WHO, |
| 1083 | + slug="test2", |
| 1084 | + parent_event=None, |
| 1085 | + ) |
| 1086 | + |
| 1087 | + self.event3 = EventFactory.create( |
| 1088 | + dtype=self.disaster_type, |
| 1089 | + source=models.Event.EventSource.APPEAL_ADMIN, |
| 1090 | + slug="test3", |
| 1091 | + parent_event=None, |
| 1092 | + ) |
| 1093 | + self.appeal2 = AppealFactory.create( |
| 1094 | + event=self.event3, |
| 1095 | + dtype=self.disaster_type, |
| 1096 | + num_beneficiaries=9000, |
| 1097 | + amount_requested=10000, |
| 1098 | + amount_funded=1899999, |
| 1099 | + ) |
| 1100 | + |
| 1101 | + self.url = "/api/v2/emergency/" |
| 1102 | + |
| 1103 | + def test_get_emergency_list(self): |
| 1104 | + response = self.client.get(self.url) |
| 1105 | + self.assert_200(response) |
| 1106 | + self.assertEqual(response.data["count"], 2) |
| 1107 | + |
| 1108 | + def test_retrive_emergency_detail(self): |
| 1109 | + url = f"/api/v2/emergency/{self.event1.id}/" |
| 1110 | + response = self.client.get(url) |
| 1111 | + self.assert_200(response) |
| 1112 | + self.assertEqual(response.data["id"], self.event1.id) |
| 1113 | + self.assertEqual(response.data["slug"], self.event1.slug) |
| 1114 | + self.assertEqual(response.data["name"], self.event1.name) |
| 1115 | + self.assertEqual(response.data["source"], models.Event.EventSource.GDACS) |
| 1116 | + |
| 1117 | + # first field report id check |
| 1118 | + self.assertEqual(response.data["first_field_report_id"], self.field_report2.id) |
| 1119 | + # latest check field report |
| 1120 | + self.assertEqual(response.data["latest_field_report_id"], self.field_report1.id) |
| 1121 | + |
| 1122 | + # Filter Tests |
| 1123 | + def test_filter_by_source(self): |
| 1124 | + url = f"{self.url}?source=120" |
| 1125 | + response = self.client.get(url) |
| 1126 | + self.assert_200(response) |
| 1127 | + self.assertEqual(response.data["count"], 1) |
| 1128 | + self.assertEqual(response.data["results"][0]["source"], models.Event.EventSource.WHO) |
| 1129 | + |
| 1130 | + def test_filter_by_appeal_source(self): |
| 1131 | + url = f"{self.url}?source=150" |
| 1132 | + response = self.client.get(url) |
| 1133 | + self.assert_200(response) |
| 1134 | + self.assertEqual(response.data["count"], 1) |
| 1135 | + self.assertEqual(response.data["results"][0]["source"], models.Event.EventSource.APPEAL_ADMIN) |
| 1136 | + |
| 1137 | + def test_filter_by_source_no_match(self): |
| 1138 | + url = f"{self.url}?source=500" |
| 1139 | + response = self.client.get(url) |
| 1140 | + self.assert_400(response) |
0 commit comments