| 
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