|
7 | 7 | from django.contrib.auth.models import Permission |
8 | 8 | from django.contrib.contenttypes.models import ContentType |
9 | 9 | from django.core import management |
10 | | -from django.test import TestCase |
11 | 10 | from rest_framework import status |
12 | 11 |
|
13 | 12 | from api.models import Country, DisasterType, District, Region, RegionName |
|
28 | 27 | DrefOperationalUpdate, |
29 | 28 | ProposedAction, |
30 | 29 | ) |
31 | | -from dref.tasks import send_dref_email, translate_fields_to_english |
| 30 | +from dref.tasks import send_dref_email |
32 | 31 | from main.test_case import APITestCase |
33 | 32 |
|
34 | 33 |
|
@@ -1076,6 +1075,105 @@ def test_dref_op_update_locking(self): |
1076 | 1075 | response = self.client.patch(url, data=data) |
1077 | 1076 | self.assertEqual(response.status_code, 400) |
1078 | 1077 |
|
| 1078 | + def test_create_and_update_operational_update(self): |
| 1079 | + self.country = Country.objects.create(name="test ops country") |
| 1080 | + self.district = District.objects.create(name="test ops dis", country=self.country) |
| 1081 | + |
| 1082 | + user1, user2 = UserFactory.create_batch(2) |
| 1083 | + dref = DrefFactory.create( |
| 1084 | + title="Test Title", created_by=user1, status=Dref.Status.APPROVED, translation_module_original_language="en" |
| 1085 | + ) |
| 1086 | + dref2 = DrefFactory.create( |
| 1087 | + title="Test Title", created_by=user1, status=Dref.Status.DRAFT, translation_module_original_language="ar" |
| 1088 | + ) |
| 1089 | + |
| 1090 | + ops_update_data = { |
| 1091 | + "dref": dref.id, |
| 1092 | + "country": self.country.id, |
| 1093 | + "district": [self.district.id], |
| 1094 | + } |
| 1095 | + ops_update_data2 = { |
| 1096 | + "dref": dref2.id, |
| 1097 | + "country": self.country.id, |
| 1098 | + "district": [self.district.id], |
| 1099 | + } |
| 1100 | + |
| 1101 | + self.authenticate(user1) |
| 1102 | + # Test create |
| 1103 | + |
| 1104 | + self.authenticate(user2) |
| 1105 | + url = "/api/v2/dref-op-update/" |
| 1106 | + response = self.client.post(url, data=ops_update_data2) |
| 1107 | + self.assert_400(response) |
| 1108 | + |
| 1109 | + url = "/api/v2/dref-op-update/" |
| 1110 | + response = self.client.post(url, data=ops_update_data, HTTP_ACCEPT_LANGUAGE="fr") |
| 1111 | + self.assert_201(response) |
| 1112 | + self.assertEqual(response.data["translation_module_original_language"], "fr") |
| 1113 | + ops_update_id = response.data["id"] |
| 1114 | + # Test Update |
| 1115 | + update_url = f"/api/v2/dref-op-update/{ops_update_id}/" |
| 1116 | + data_ar = {"title": "العنوان بالعربية", "modified_at": datetime.now()} |
| 1117 | + response = self.client.patch(update_url, data=data_ar, HTTP_ACCEPT_LANGUAGE="ar") |
| 1118 | + self.assert_400(response) |
| 1119 | + # Update in Spanish |
| 1120 | + data_es = {"title": "Título en español", "modified_at": datetime.now()} |
| 1121 | + response = self.client.patch(update_url, data=data_es, HTTP_ACCEPT_LANGUAGE="es") |
| 1122 | + self.assert_400(response) |
| 1123 | + |
| 1124 | + # Update in English |
| 1125 | + data_en = {"title": "Updated title in English", "modified_at": datetime.now()} |
| 1126 | + response = self.client.patch(update_url, data=data_en, HTTP_ACCEPT_LANGUAGE="en") |
| 1127 | + self.assert_400(response) |
| 1128 | + |
| 1129 | + # Update in French |
| 1130 | + data_fr = {"title": "Titre en français", "modified_at": datetime.now()} |
| 1131 | + response = self.client.patch(update_url, data=data_fr, HTTP_ACCEPT_LANGUAGE="fr") |
| 1132 | + self.assert_200(response) |
| 1133 | + self.assertEqual(response.data["title"], "Titre en français") |
| 1134 | + |
| 1135 | + @mock.patch("dref.tasks.translate_fields_to_english.delay") |
| 1136 | + def test_dref_operational_update_finalize(self, mock_translate): |
| 1137 | + # Create users |
| 1138 | + user1, user2 = UserFactory.create_batch(2) |
| 1139 | + dref = DrefFactory.create( |
| 1140 | + title="Test Title", |
| 1141 | + created_by=user1, |
| 1142 | + status=Dref.Status.APPROVED, |
| 1143 | + translation_module_original_language="en", |
| 1144 | + ) |
| 1145 | + dref.users.add(user1) |
| 1146 | + op_update = DrefOperationalUpdateFactory.create( |
| 1147 | + dref=dref, |
| 1148 | + status=Dref.Status.DRAFT, |
| 1149 | + operational_update_number=1, |
| 1150 | + modified_at=datetime.now(), |
| 1151 | + translation_module_original_language="ar", |
| 1152 | + ) |
| 1153 | + |
| 1154 | + url = f"/api/v2/dref-op-update/{op_update.id}/" |
| 1155 | + self.client.force_authenticate(user1) |
| 1156 | + |
| 1157 | + # Update in Arabic (original language) |
| 1158 | + data_ar = {"title": "العنوان بالعربية", "modified_at": datetime.now()} |
| 1159 | + response = self.client.patch(url, data=data_ar, HTTP_ACCEPT_LANGUAGE="ar") |
| 1160 | + self.assert_200(response) |
| 1161 | + self.assertEqual(response.data["title"], "العنوان بالعربية") |
| 1162 | + |
| 1163 | + # Update in English |
| 1164 | + data_en = {"title": "Updated title in English", "modified_at": datetime.now()} |
| 1165 | + response = self.client.patch(url, data=data_en, HTTP_ACCEPT_LANGUAGE="en") |
| 1166 | + self.assert_400(response) |
| 1167 | + |
| 1168 | + # Finalize Operational Update |
| 1169 | + with self.capture_on_commit_callbacks(execute=True): |
| 1170 | + finalize_url = f"/api/v2/dref-op-update/{op_update.id}/finalize/" |
| 1171 | + response = self.client.post(finalize_url) |
| 1172 | + |
| 1173 | + self.assert_200(response) |
| 1174 | + self.assertEqual(response.data["status"], Dref.Status.FINALIZING) |
| 1175 | + mock_translate.assert_called_once_with("dref.DrefOperationalUpdate", op_update.id) |
| 1176 | + |
1079 | 1177 | def test_optimistic_lock_in_final_report(self): |
1080 | 1178 | user1 = UserFactory.create() |
1081 | 1179 | dref = DrefFactory.create( |
@@ -2004,27 +2102,105 @@ def test_dref_imminent_v2_final_report(self): |
2004 | 2102 | }, |
2005 | 2103 | ) |
2006 | 2104 |
|
| 2105 | + def test_create_and_update_final_report(self): |
| 2106 | + user1, user2 = UserFactory.create_batch(2) |
| 2107 | + dref = DrefFactory.create( |
| 2108 | + title="Test Title", |
| 2109 | + created_by=self.user, |
| 2110 | + status=Dref.Status.APPROVED, |
| 2111 | + type_of_dref=Dref.DrefType.ASSESSMENT, |
| 2112 | + ) |
| 2113 | + dref2 = DrefFactory.create( |
| 2114 | + title="Test Title", |
| 2115 | + created_by=self.user, |
| 2116 | + status=Dref.Status.DRAFT, |
| 2117 | + type_of_dref=Dref.DrefType.IMMINENT, |
| 2118 | + ) |
| 2119 | + dref.users.add(user1) |
| 2120 | + url = "/api/v2/dref-final-report/" |
| 2121 | + data = { |
| 2122 | + "dref": dref2.id, |
| 2123 | + } |
| 2124 | + |
| 2125 | + self.authenticate(self.user) |
| 2126 | + response = self.client.post(url, data=data, HTTP_ACCEPT_LANGUAGE="es") |
| 2127 | + self.assert_400(response) |
| 2128 | + |
| 2129 | + url = "/api/v2/dref-final-report/" |
| 2130 | + data = { |
| 2131 | + "dref": dref.id, |
| 2132 | + } |
| 2133 | + response = self.client.post(url, data=data, HTTP_ACCEPT_LANGUAGE="es") |
| 2134 | + self.assert_201(response) |
| 2135 | + self.assertEqual(response.data["translation_module_original_language"], "es") |
| 2136 | + final_report_id = response.data["id"] |
| 2137 | + # Test Update |
| 2138 | + update_url = f"/api/v2/dref-final-report/{final_report_id}/" |
| 2139 | + data_ar = {"title": "العنوان بالعربية", "modified_at": datetime.now()} |
| 2140 | + response = self.client.patch(update_url, data=data_ar, HTTP_ACCEPT_LANGUAGE="ar") |
| 2141 | + self.assert_400(response) |
| 2142 | + |
| 2143 | + # Update in English |
| 2144 | + data_en = {"title": "Updated title in English", "modified_at": datetime.now()} |
| 2145 | + response = self.client.patch(update_url, data=data_en, HTTP_ACCEPT_LANGUAGE="en") |
| 2146 | + self.assert_400(response) |
| 2147 | + |
| 2148 | + # Update in French |
| 2149 | + data_fr = {"title": "Titre en français", "modified_at": datetime.now()} |
| 2150 | + response = self.client.patch(update_url, data=data_fr, HTTP_ACCEPT_LANGUAGE="fr") |
| 2151 | + self.assert_400(response) |
2007 | 2152 |
|
2008 | | -class TranslateFieldsToEnglishTaskTest(TestCase): |
| 2153 | + # Update in Spanish (original language) |
| 2154 | + data_es = {"title": "Título en español", "modified_at": datetime.now()} |
| 2155 | + response = self.client.patch(update_url, data=data_es, HTTP_ACCEPT_LANGUAGE="es") |
| 2156 | + self.assert_200(response) |
| 2157 | + self.assertEqual(response.data["translation_module_original_language"], "es") |
| 2158 | + self.assertEqual(response.data["title"], "Título en español") |
2009 | 2159 |
|
2010 | | - def test_translate_fields_to_english_task(self): |
| 2160 | + @mock.patch("dref.tasks.translate_fields_to_english.delay") |
| 2161 | + def test_dref_final_report_finalize(self, mock_translate): |
| 2162 | + region = Region.objects.create(name=RegionName.AFRICA) |
| 2163 | + country = Country.objects.create(name="Test country12", region=region) |
| 2164 | + # Create users |
| 2165 | + user1, user2 = UserFactory.create_batch(2) |
2011 | 2166 | dref = DrefFactory.create( |
2012 | | - title="Titre en français", |
2013 | | - type_of_dref=Dref.DrefType.IMMINENT, |
| 2167 | + title="Test Title", |
| 2168 | + created_by=user1, |
| 2169 | + status=Dref.Status.APPROVED, |
| 2170 | + translation_module_original_language="en", |
| 2171 | + ) |
| 2172 | + dref.users.add(user1) |
| 2173 | + final_report = DrefFinalReportFactory( |
| 2174 | + title="Título en español", |
| 2175 | + dref=dref, |
| 2176 | + country=country, |
| 2177 | + type_of_dref=Dref.DrefType.RESPONSE, |
2014 | 2178 | status=Dref.Status.DRAFT, |
2015 | | - translation_module_original_language="fr", |
| 2179 | + translation_module_original_language="es", |
2016 | 2180 | ) |
| 2181 | + self.client.force_authenticate(user1) |
| 2182 | + url = f"/api/v2/dref-final-report/{final_report.id}/" |
2017 | 2183 |
|
2018 | | - with mock.patch("dref.tasks.ModelTranslator.translate_model_fields_to_english") as mock_translate: |
2019 | | - mock_translate.return_value = None |
| 2184 | + # Update in Arabic |
| 2185 | + data_ar = {"title": "العنوان بالعربية", "modified_at": datetime.now()} |
| 2186 | + response = self.client.patch(url, data=data_ar, HTTP_ACCEPT_LANGUAGE="ar") |
| 2187 | + self.assert_400(response) |
2020 | 2188 |
|
2021 | | - # Call the task |
2022 | | - translate_fields_to_english("dref.Dref", dref.pk) |
2023 | | - # Reload object from DB |
2024 | | - dref.refresh_from_db() |
2025 | | - mock_translate.assert_called_once() |
2026 | | - self.assertEqual(dref.status, Dref.Status.FINALIZED) |
2027 | | - self.assertEqual(dref.translation_module_original_language, "en") |
| 2189 | + # Update in Spanish (original language) |
| 2190 | + data_es = {"title": "Título en español", "modified_at": datetime.now()} |
| 2191 | + response = self.client.patch(url, data=data_es, HTTP_ACCEPT_LANGUAGE="es") |
| 2192 | + self.assert_200(response) |
| 2193 | + self.assertEqual(response.data["title"], "Título en español") |
| 2194 | + self.assertEqual(response.data["translation_module_original_language"], "es") |
| 2195 | + |
| 2196 | + # Finalize final-report |
| 2197 | + with self.capture_on_commit_callbacks(execute=True): |
| 2198 | + finalize_url = f"/api/v2/dref-final-report/{final_report.id}/finalize/" |
| 2199 | + response = self.client.post(finalize_url) |
| 2200 | + |
| 2201 | + self.assert_200(response) |
| 2202 | + self.assertEqual(response.data["status"], Dref.Status.FINALIZING) |
| 2203 | + mock_translate.assert_called_once_with("dref.DrefFinalReport", final_report.id) |
2028 | 2204 |
|
2029 | 2205 |
|
2030 | 2206 | User = get_user_model() |
|
0 commit comments