77 PreTranslationApplyMethod ,
88 PreTranslationAutoApproveOption ,
99 PreTranslationEditOperation ,
10+ PreTranslationReplaceTranslationsOption ,
11+ PreTranslationScope ,
1012)
1113from crowdin_api .api_resources .translations .resource import TranslationsResource
1214from crowdin_api .requester import APIRequester
@@ -67,6 +69,10 @@ def test_list_pre_translations(self, m_request, base_absolut_url):
6769 "duplicateTranslations" : None ,
6870 "skipApprovedTranslations" : None ,
6971 "translateUntranslatedOnly" : None ,
72+ "scope" : None ,
73+ "translationModifiedBefore" : None ,
74+ "replaceTranslationsOption" : None ,
75+ "resetApprovalStatus" : None ,
7076 "translateWithPerfectMatchOnly" : None ,
7177 "fallbackLanguages" : [],
7278 "labelIds" : [],
@@ -85,6 +91,10 @@ def test_list_pre_translations(self, m_request, base_absolut_url):
8591 "duplicateTranslations" : False ,
8692 "skipApprovedTranslations" : False ,
8793 "translateUntranslatedOnly" : False ,
94+ "scope" : PreTranslationScope .TRANSLATED ,
95+ "translationModifiedBefore" : "2026-01-01T00:00:00+00:00" ,
96+ "replaceTranslationsOption" : PreTranslationReplaceTranslationsOption .AUTO_TRANSLATED ,
97+ "resetApprovalStatus" : True ,
8898 "translateWithPerfectMatchOnly" : False ,
8999 "fallbackLanguages" : ["lang" ],
90100 "labelIds" : [1 ],
@@ -100,6 +110,10 @@ def test_list_pre_translations(self, m_request, base_absolut_url):
100110 "duplicateTranslations" : False ,
101111 "skipApprovedTranslations" : False ,
102112 "translateUntranslatedOnly" : False ,
113+ "scope" : PreTranslationScope .TRANSLATED ,
114+ "translationModifiedBefore" : "2026-01-01T00:00:00+00:00" ,
115+ "replaceTranslationsOption" : PreTranslationReplaceTranslationsOption .AUTO_TRANSLATED ,
116+ "resetApprovalStatus" : True ,
103117 "translateWithPerfectMatchOnly" : False ,
104118 "fallbackLanguages" : ["lang" ],
105119 "labelIds" : [1 ],
@@ -147,6 +161,10 @@ def test_apply_pre_translation_with_branchids(self, m_request, base_absolut_url)
147161 "duplicateTranslations" : None ,
148162 "skipApprovedTranslations" : None ,
149163 "translateUntranslatedOnly" : None ,
164+ "scope" : None ,
165+ "translationModifiedBefore" : None ,
166+ "replaceTranslationsOption" : None ,
167+ "resetApprovalStatus" : None ,
150168 "translateWithPerfectMatchOnly" : None ,
151169 "fallbackLanguages" : [],
152170 "labelIds" : [],
@@ -186,6 +204,10 @@ def test_apply_pre_translation_edge_cases(self, m_request, base_absolut_url):
186204 "duplicateTranslations" : None ,
187205 "skipApprovedTranslations" : None ,
188206 "translateUntranslatedOnly" : None ,
207+ "scope" : None ,
208+ "translationModifiedBefore" : None ,
209+ "replaceTranslationsOption" : None ,
210+ "resetApprovalStatus" : None ,
189211 "translateWithPerfectMatchOnly" : None ,
190212 "fallbackLanguages" : [],
191213 "labelIds" : [],
@@ -237,6 +259,10 @@ def test_apply_pre_translation_with_all_optional_params(self, m_request, base_ab
237259 "duplicateTranslations" : True ,
238260 "skipApprovedTranslations" : False ,
239261 "translateUntranslatedOnly" : True ,
262+ "scope" : None ,
263+ "translationModifiedBefore" : None ,
264+ "replaceTranslationsOption" : None ,
265+ "resetApprovalStatus" : None ,
240266 "translateWithPerfectMatchOnly" : False ,
241267 "fallbackLanguages" : [{"languageId" : "fr" , "userId" : 789 }],
242268 "labelIds" : [1 , 2 , 3 ],
@@ -246,6 +272,51 @@ def test_apply_pre_translation_with_all_optional_params(self, m_request, base_ab
246272 path = "projects/1/pre-translations" ,
247273 )
248274
275+ @mock .patch ("crowdin_api.requester.APIRequester.request" )
276+ def test_apply_pre_translation_with_scope_and_retranslation_options (
277+ self , m_request , base_absolut_url
278+ ):
279+ """Test that scope, translationModifiedBefore, replaceTranslationsOption
280+ and resetApprovalStatus are properly handled."""
281+ m_request .return_value = "response"
282+
283+ resource = self .get_resource (base_absolut_url )
284+ response = resource .apply_pre_translation (
285+ projectId = 1 ,
286+ languageIds = ["en" ],
287+ fileIds = [1 ],
288+ scope = PreTranslationScope .ALL ,
289+ translationModifiedBefore = "2026-01-01T00:00:00+00:00" ,
290+ replaceTranslationsOption = PreTranslationReplaceTranslationsOption .ALL ,
291+ resetApprovalStatus = True ,
292+ )
293+
294+ assert response == "response"
295+ m_request .assert_called_once_with (
296+ method = "post" ,
297+ request_data = {
298+ "languageIds" : ["en" ],
299+ "fileIds" : [1 ],
300+ "method" : None ,
301+ "engineId" : None ,
302+ "aiPromptId" : None ,
303+ "autoApproveOption" : None ,
304+ "duplicateTranslations" : None ,
305+ "skipApprovedTranslations" : None ,
306+ "translateUntranslatedOnly" : None ,
307+ "scope" : PreTranslationScope .ALL ,
308+ "translationModifiedBefore" : "2026-01-01T00:00:00+00:00" ,
309+ "replaceTranslationsOption" : PreTranslationReplaceTranslationsOption .ALL ,
310+ "resetApprovalStatus" : True ,
311+ "translateWithPerfectMatchOnly" : None ,
312+ "fallbackLanguages" : [],
313+ "labelIds" : [],
314+ "excludeLabelIds" : [],
315+ "branchIds" : [],
316+ },
317+ path = "projects/1/pre-translations" ,
318+ )
319+
249320 @mock .patch ("crowdin_api.requester.APIRequester.request" )
250321 def test_pre_translation_report (self , m_request , base_absolut_url ):
251322 m_request .return_value = "response"
0 commit comments