From 1cb8e0a8c7cc502d12bcb21c20fe85dc5da714c7 Mon Sep 17 00:00:00 2001 From: Jean Aurambault Date: Tue, 1 Oct 2024 09:56:34 -0700 Subject: [PATCH] Refactor integrity checks in TextUnitBatchImporterService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is preparatory work to implement the new mode: KEEP_STATUS_IF_SAME_TARGET. That mode will be similar to the legacy KEEP_STATUS_IF_REJECTED_AND_SAME_TARGET, but it will also retain the status when the integrity checker does not fail. This is an extension of the legacy behavior to allow marking a translation as invalid when the integrity check didn’t catch the issue, eventually breaking a build. --- .../l10n/mojito/rest/textunit/TextUnitWS.java | 8 +- .../service/asset/ImportTextUnitJob.java | 9 +- .../service/asset/ImportTextUnitJobInput.java | 23 ++--- .../service/asset/VirtualAssetService.java | 4 +- .../RepositoryMachineTranslationService.java | 4 +- .../thirdparty/ThirdPartyTMSPhrase.java | 5 +- .../ThirdPartyTMSSmartlingWithJson.java | 5 +- .../quartz/SmartlingPullLocaleFileJob.java | 4 +- .../TextUnitBatchImporterService.java | 99 ++++++++++++++----- .../BranchNotificationServiceTest.java | 7 +- .../ThirdPartyTMSSmartlingTest.java | 4 +- .../ThirdPartyTMSSmartlingWithJsonTest.java | 9 +- .../SmartlingPullLocaleFileJobTest.java | 15 +-- .../TextUnitBatchImporterServiceTest.java | 29 ++++-- 14 files changed, 148 insertions(+), 77 deletions(-) diff --git a/webapp/src/main/java/com/box/l10n/mojito/rest/textunit/TextUnitWS.java b/webapp/src/main/java/com/box/l10n/mojito/rest/textunit/TextUnitWS.java index aa9aeb6407..00f2da199c 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/rest/textunit/TextUnitWS.java +++ b/webapp/src/main/java/com/box/l10n/mojito/rest/textunit/TextUnitWS.java @@ -1,5 +1,7 @@ package com.box.l10n.mojito.rest.textunit; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; + import com.box.l10n.mojito.entity.Asset; import com.box.l10n.mojito.entity.AssetTextUnit; import com.box.l10n.mojito.entity.Locale; @@ -296,9 +298,9 @@ public PollableTask importTextUnitBatch(@RequestBody String string) { PollableFuture pollableFuture = textUnitBatchImporterService.asyncImportTextUnits( importTextUnitsBatch.getTextUnits(), - importTextUnitsBatch.isIntegrityCheckSkipped(), - importTextUnitsBatch.isIntegrityCheckKeepStatusIfFailedAndSameTarget()); - + fromLegacy( + importTextUnitsBatch.isIntegrityCheckSkipped(), + importTextUnitsBatch.isIntegrityCheckKeepStatusIfFailedAndSameTarget())); return pollableFuture.getPollableTask(); } diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJob.java b/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJob.java index 0d0b914d26..152605adf3 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJob.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJob.java @@ -3,6 +3,8 @@ import com.box.l10n.mojito.quartz.QuartzPollableJob; import com.box.l10n.mojito.service.pollableTask.PollableTaskService; import com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService; +import com.box.l10n.mojito.service.tm.search.TextUnitDTO; +import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,10 +26,9 @@ public class ImportTextUnitJob extends QuartzPollableJob textUnitDTOs = input.getTextUnitDTOs(); + + textUnitBatchImporterService.importTextUnits(textUnitDTOs, input.getIntegrityChecksType()); return null; } } diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJobInput.java b/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJobInput.java index 901c0aaf67..ea84d95fee 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJobInput.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/asset/ImportTextUnitJobInput.java @@ -1,5 +1,6 @@ package com.box.l10n.mojito.service.asset; +import com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService; import com.box.l10n.mojito.service.tm.search.TextUnitDTO; import java.util.List; @@ -8,26 +9,16 @@ */ public class ImportTextUnitJobInput { - boolean integrityCheckSkipped; - boolean integrityCheckKeepStatusIfFailedAndSameTarget; List textUnitDTOs; + TextUnitBatchImporterService.IntegrityChecksType integrityChecksType; - public boolean isIntegrityCheckSkipped() { - return integrityCheckSkipped; + public TextUnitBatchImporterService.IntegrityChecksType getIntegrityChecksType() { + return integrityChecksType; } - public void setIntegrityCheckSkipped(boolean integrityCheckSkipped) { - this.integrityCheckSkipped = integrityCheckSkipped; - } - - public boolean isIntegrityCheckKeepStatusIfFailedAndSameTarget() { - return integrityCheckKeepStatusIfFailedAndSameTarget; - } - - public void setIntegrityCheckKeepStatusIfFailedAndSameTarget( - boolean integrityCheckKeepStatusIfFailedAndSameTarget) { - this.integrityCheckKeepStatusIfFailedAndSameTarget = - integrityCheckKeepStatusIfFailedAndSameTarget; + public void setIntegrityChecksType( + TextUnitBatchImporterService.IntegrityChecksType integrityChecksType) { + this.integrityChecksType = integrityChecksType; } public List getTextUnitDTOs() { diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/asset/VirtualAssetService.java b/webapp/src/main/java/com/box/l10n/mojito/service/asset/VirtualAssetService.java index b939f6a967..37e27ddbd9 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/asset/VirtualAssetService.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/asset/VirtualAssetService.java @@ -2,6 +2,7 @@ import static com.box.l10n.mojito.entity.TMTextUnitVariant.Status.APPROVED; import static com.box.l10n.mojito.quartz.QuartzSchedulerManager.DEFAULT_SCHEDULER_NAME; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; import static org.slf4j.LoggerFactory.getLogger; import com.box.l10n.mojito.entity.Asset; @@ -341,7 +342,8 @@ public PollableFuture importLocalizedTextUnits( textUnitDTOs.add(textUnitDTO); } - return textUnitBatchImporterService.asyncImportTextUnits(textUnitDTOs, false, false); + return textUnitBatchImporterService.asyncImportTextUnits( + textUnitDTOs, fromLegacy(false, false)); } @Transactional diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/machinetranslation/RepositoryMachineTranslationService.java b/webapp/src/main/java/com/box/l10n/mojito/service/machinetranslation/RepositoryMachineTranslationService.java index 155c1d260a..dedb5ec65d 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/machinetranslation/RepositoryMachineTranslationService.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/machinetranslation/RepositoryMachineTranslationService.java @@ -1,5 +1,7 @@ package com.box.l10n.mojito.service.machinetranslation; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; + import com.box.l10n.mojito.entity.Repository; import com.box.l10n.mojito.service.pollableTask.Pollable; import com.box.l10n.mojito.service.pollableTask.PollableFuture; @@ -127,7 +129,7 @@ public PollableFuture translateRepository( .collect(Collectors.toList()); textUnitBatchImporterService.importTextUnits( - machineTranslatedTextUnitDTOs, false, true); + machineTranslatedTextUnitDTOs, fromLegacy(false, true)); }); } diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java index 59d9064ea6..bccaea6194 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSPhrase.java @@ -1,5 +1,7 @@ package com.box.l10n.mojito.service.thirdparty; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; + import com.box.l10n.mojito.JSR310Migration; import com.box.l10n.mojito.android.strings.AndroidStringDocument; import com.box.l10n.mojito.android.strings.AndroidStringDocumentMapper; @@ -426,8 +428,9 @@ private void pullLocale( textUnitDTOS.forEach(t -> t.setComment(null)); Stopwatch importStopWatch = Stopwatch.createStarted(); + textUnitBatchImporterService.importTextUnits( - textUnitDTOS, false, integrityCheckKeepStatusIfFailedAndSameTarget); + textUnitDTOS, fromLegacy(false, integrityCheckKeepStatusIfFailedAndSameTarget)); logger.info("Time importing text units: {}", importStopWatch.elapsed()); } diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJson.java b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJson.java index 4343368218..682479d36f 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJson.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJson.java @@ -2,6 +2,7 @@ import static com.box.l10n.mojito.service.thirdparty.ThirdPartyTMSUtils.isFileEqualToPreviousRun; import static com.box.l10n.mojito.service.thirdparty.smartling.SmartlingFileUtils.isPluralFile; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; import com.box.l10n.mojito.entity.Repository; import com.box.l10n.mojito.entity.RepositoryLocale; @@ -250,7 +251,9 @@ && isFileEqualToPreviousRun( t.setRepositoryName(repository.getName()); t.setTargetLocale(repositoryLocale.getLocale().getBcp47Tag()); }); - textUnitBatchImporterService.importTextUnits(textUnitDTOS, false, true); + + textUnitBatchImporterService.importTextUnits( + textUnitDTOS, fromLegacy(false, true)); }); }); } diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJob.java b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJob.java index 0f6d733b03..024bb802f0 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJob.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJob.java @@ -1,6 +1,7 @@ package com.box.l10n.mojito.service.thirdparty.smartling.quartz; import static com.box.l10n.mojito.service.thirdparty.ThirdPartyTMSUtils.isFileEqualToPreviousRun; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; import com.box.l10n.mojito.LocaleMappingHelper; import com.box.l10n.mojito.android.strings.AndroidStringDocumentMapper; @@ -111,7 +112,8 @@ && matchesChecksumFromPreviousSync(input, localeTag, fileName, fileContent)) { if (!input.isDryRun()) { logger.debug("Importing text units for locale: {}", smartlingLocale); - textUnitBatchImporterService.importTextUnits(textUnits, false, true); + + textUnitBatchImporterService.importTextUnits(textUnits, fromLegacy(false, true)); } } return null; diff --git a/webapp/src/main/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterService.java b/webapp/src/main/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterService.java index 6a185f45c0..3c8b2dafaa 100644 --- a/webapp/src/main/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterService.java +++ b/webapp/src/main/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterService.java @@ -96,6 +96,40 @@ public class TextUnitBatchImporterService { @Value("${l10n.textUnitBatchImporterService.quartz.schedulerName:" + DEFAULT_SCHEDULER_NAME + "}") String schedulerName; + public enum IntegrityChecksType { + /** Don't run integrity checks */ + SKIP, + /** Always use the status from the integrity checker (legacy behavior 1) */ + ALWAYS, + /** + * Run integrity checks. If it fails and the target is the same, keep the current status; + * otherwise, reject (legacy behavior 2). + */ + KEEP_STATUS_IF_REJECTED_AND_SAME_TARGET, + /** + * Run integrity checks. If the target is the same, keep the current status. + * + *

This is an extension of the legacy behavior that allows marking a translation as invalid + * when the integrity check did not catch the issue, eventually causing a build failure. + */ + KEEP_STATUS_IF_SAME_TARGET; + + public static IntegrityChecksType fromLegacy( + boolean integrityCheckSkipped, boolean integrityCheckKeepStatusIfFailedAndSameTarget) { + IntegrityChecksType legacy = IntegrityChecksType.SKIP; + + if (!integrityCheckSkipped) { + if (!integrityCheckKeepStatusIfFailedAndSameTarget) { + legacy = ALWAYS; + } else { + legacy = KEEP_STATUS_IF_REJECTED_AND_SAME_TARGET; + } + } + + return legacy; + } + } + /** * Imports a batch of text units. * @@ -115,15 +149,11 @@ public class TextUnitBatchImporterService { * @return */ public PollableFuture asyncImportTextUnits( - List textUnitDTOs, - boolean integrityCheckSkipped, - boolean integrityCheckKeepStatusIfFailedAndSameTarget) { + List textUnitDTOs, IntegrityChecksType integrityChecksType) { ImportTextUnitJobInput importTextUnitJobInput = new ImportTextUnitJobInput(); importTextUnitJobInput.setTextUnitDTOs(textUnitDTOs); - importTextUnitJobInput.setIntegrityCheckSkipped(integrityCheckSkipped); - importTextUnitJobInput.setIntegrityCheckKeepStatusIfFailedAndSameTarget( - integrityCheckKeepStatusIfFailedAndSameTarget); + importTextUnitJobInput.setIntegrityChecksType(integrityChecksType); return quartzPollableTaskScheduler.scheduleJob( ImportTextUnitJob.class, importTextUnitJobInput, schedulerName); @@ -131,9 +161,7 @@ public PollableFuture asyncImportTextUnits( @StopWatch public PollableFuture importTextUnits( - List textUnitDTOs, - boolean integrityCheckSkipped, - boolean integrityCheckKeepStatusIfFailedAndSameTarget) { + List textUnitDTOs, IntegrityChecksType integrityChecksType) { return meterRegistry .timer("TextUnitBatchImporterService.importTextUnits") @@ -164,7 +192,7 @@ public PollableFuture importTextUnits( mapTextUnitsToImportWithExistingTextUnits( locale, asset, textUnitsForBatchImport); - if (!integrityCheckSkipped) { + if (!IntegrityChecksType.SKIP.equals(integrityChecksType)) { try (var timer2 = Timer.resource( meterRegistry, @@ -173,9 +201,7 @@ public PollableFuture importTextUnits( .tag("asset", asset.getPath())) { applyIntegrityChecks( - asset, - textUnitsForBatchImport, - integrityCheckKeepStatusIfFailedAndSameTarget); + asset, textUnitsForBatchImport, integrityChecksType); } } importTextUnitsOfLocaleAndAsset(locale, asset, textUnitsForBatchImport); @@ -294,16 +320,39 @@ boolean isUpdateNeeded(TextUnitForBatchMatcherImport textUnitForBatchImport) { TextUnitDTO currentTextUnit = textUnitForBatchImport.getCurrentTextUnit(); - return currentTextUnit.getTarget() == null - || tmService.isUpdateNeededForTmTextUnitVariant( - currentTextUnit.getStatus(), - DigestUtils.md5Hex(currentTextUnit.getTarget()), - currentTextUnit.isIncludedInLocalizedFile(), - currentTextUnit.getTargetComment(), - textUnitForBatchImport.getStatus(), - DigestUtils.md5Hex(textUnitForBatchImport.getContent()), - textUnitForBatchImport.isIncludedInLocalizedFile(), - textUnitForBatchImport.getTargetComment()); + boolean result; + if (currentTextUnit.getTarget() == null) { + result = true; + } else { + result = + tmService.isUpdateNeededForTmTextUnitVariant( + currentTextUnit.getStatus(), + DigestUtils.md5Hex(currentTextUnit.getTarget()), + currentTextUnit.isIncludedInLocalizedFile(), + currentTextUnit.getTargetComment(), + textUnitForBatchImport.getStatus(), + DigestUtils.md5Hex(textUnitForBatchImport.getContent()), + textUnitForBatchImport.isIncludedInLocalizedFile(), + textUnitForBatchImport.getTargetComment()); + + // we don't want to override the "rejected" field, if it was set manually. This would happen + // when a build is + // broken and a string needs to be excluded. Right now, on the next sync the string would be + // re-included + // Of course that means now that if a string was wrongly marked as rejected, eg by a faulty + // integrity check + // re-running the check won't fix the issue. + // I thought I added an option to handle that though. + // Maybe I could have a re-apply checks ... the problem with that is .. + // we can make that an option too + if (result + && !currentTextUnit.isIncludedInLocalizedFile() + && currentTextUnit.getTarget().equals(textUnitForBatchImport.getContent())) { + result = false; + } + } + + return result; } List getTextUnitTDOsForLocaleAndAsset(Locale locale, Asset asset) { @@ -314,7 +363,7 @@ List getTextUnitTDOsForLocaleAndAsset(Locale locale, Asset asset) { void applyIntegrityChecks( Asset asset, List textUnitsForBatchImport, - boolean keepStatusIfCheckFailedAndSameTarget) { + IntegrityChecksType integrityChecksType) { Set textUnitCheckers = integrityCheckerFactory.getTextUnitCheckers(asset); @@ -338,7 +387,7 @@ void applyIntegrityChecks( boolean hasSameTarget = textUnitForBatchImport.getContent().equals(currentTextUnit.getTarget()); - if (hasSameTarget && keepStatusIfCheckFailedAndSameTarget) { + if (hasSameTarget && !IntegrityChecksType.ALWAYS.equals(integrityChecksType)) { textUnitForBatchImport.setIncludedInLocalizedFile( currentTextUnit.isIncludedInLocalizedFile()); textUnitForBatchImport.setStatus(currentTextUnit.getStatus()); diff --git a/webapp/src/test/java/com/box/l10n/mojito/service/branch/notification/BranchNotificationServiceTest.java b/webapp/src/test/java/com/box/l10n/mojito/service/branch/notification/BranchNotificationServiceTest.java index 98dd0c1e62..feec95d81b 100644 --- a/webapp/src/test/java/com/box/l10n/mojito/service/branch/notification/BranchNotificationServiceTest.java +++ b/webapp/src/test/java/com/box/l10n/mojito/service/branch/notification/BranchNotificationServiceTest.java @@ -1,5 +1,7 @@ package com.box.l10n.mojito.service.branch.notification; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; + import com.box.l10n.mojito.entity.AssetContent; import com.box.l10n.mojito.entity.Branch; import com.box.l10n.mojito.entity.BranchNotification; @@ -152,8 +154,9 @@ void translateBranch(Branch branch) throws ExecutionException, InterruptedExcept textUnitBatchImporterService .asyncImportTextUnits( importTextUnitsBatch.getTextUnits(), - importTextUnitsBatch.isIntegrityCheckSkipped(), - importTextUnitsBatch.isIntegrityCheckKeepStatusIfFailedAndSameTarget()) + fromLegacy( + importTextUnitsBatch.isIntegrityCheckSkipped(), + importTextUnitsBatch.isIntegrityCheckKeepStatusIfFailedAndSameTarget())) .get(); // make sure the stats are ready for whatever is done next in notificaiton diff --git a/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingTest.java b/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingTest.java index 6986de05eb..eeaa00ef98 100644 --- a/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingTest.java +++ b/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingTest.java @@ -2,6 +2,7 @@ import static com.box.l10n.mojito.android.strings.AndroidStringDocumentReader.fromText; import static com.box.l10n.mojito.quartz.QuartzSchedulerManager.DEFAULT_SCHEDULER_NAME; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; @@ -199,8 +200,7 @@ public void setUp() throws SchedulerException { anyString()); doReturn(null) .when(mockTextUnitBatchImporterService) - .importTextUnits(any(), eq(false), eq(true)); - + .importTextUnits(any(), eq(fromLegacy(false, true))); resultProcessor = new StubSmartlingResultProcessor(); tmsSmartling = new ThirdPartyTMSSmartling( diff --git a/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJsonTest.java b/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJsonTest.java index 636f45b2bb..f32b77e2e2 100644 --- a/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJsonTest.java +++ b/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/ThirdPartyTMSSmartlingWithJsonTest.java @@ -1,5 +1,6 @@ package com.box.l10n.mojito.service.thirdparty; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.mockito.ArgumentMatchers.*; @@ -147,7 +148,9 @@ public void testJsonWithICUMessagFormats() throws Exception { return textUnitDTO; }) .collect(ImmutableList.toImmutableList()); - textUnitBatchImporterService.importTextUnits(localizedTextUnitDTOs, false, false); + + textUnitBatchImporterService.importTextUnits( + localizedTextUnitDTOs, fromLegacy(false, false)); }); SmartlingOptions smartlingOptions = SmartlingOptions.parseList(ImmutableList.of()); @@ -386,7 +389,7 @@ public void testPullWithUntranslatedUnits() throws Exception { ArgumentCaptor> dtoListCaptor = ArgumentCaptor.forClass(ImmutableList.class); Mockito.verify(textUnitBatchImporterServiceMock, times(1)) - .importTextUnits(dtoListCaptor.capture(), anyBoolean(), anyBoolean()); + .importTextUnits(dtoListCaptor.capture(), any()); ImmutableList translatedUnits = dtoListCaptor.getValue(); // Expecting two fully translated units @@ -409,7 +412,7 @@ public void testPullWithUntranslatedUnits() throws Exception { dtoListCaptor = ArgumentCaptor.forClass(ImmutableList.class); Mockito.verify(textUnitBatchImporterServiceMock, times(2)) - .importTextUnits(dtoListCaptor.capture(), anyBoolean(), anyBoolean()); + .importTextUnits(dtoListCaptor.capture(), any()); translatedUnits = dtoListCaptor.getValue(); // Expecting two fully translated units diff --git a/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJobTest.java b/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJobTest.java index 95b99bfafd..99b7524108 100644 --- a/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJobTest.java +++ b/webapp/src/test/java/com/box/l10n/mojito/service/thirdparty/smartling/quartz/SmartlingPullLocaleFileJobTest.java @@ -1,6 +1,7 @@ package com.box.l10n.mojito.service.thirdparty.smartling.quartz; import static com.box.l10n.mojito.quartz.QuartzSchedulerManager.DEFAULT_SCHEDULER_NAME; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.groups.Tuple.tuple; import static org.mockito.ArgumentMatchers.any; @@ -85,7 +86,7 @@ public void setup() { anyString()); doReturn(null) .when(textUnitBatchImporterServiceMock) - .importTextUnits(any(), eq(false), eq(true)); + .importTextUnits(any(), eq(fromLegacy(false, true))); RetryBackoffSpec retryConfiguration = Retry.backoff(10, Duration.ofMillis(1)).maxBackoff(Duration.ofMillis(10)); @@ -132,7 +133,7 @@ public void testPullSingular() throws Exception { smartlingPullLocaleFileJob.call(smartlingPullLocaleFileJobInput); verify(textUnitBatchImporterServiceMock, times(1)) - .importTextUnits(textUnitListCaptor.capture(), eq(false), eq(true)); + .importTextUnits(textUnitListCaptor.capture(), eq(fromLegacy(false, true))); List captured = textUnitListCaptor.getValue(); @@ -186,7 +187,7 @@ public void testPullPlural() throws Exception { smartlingPullLocaleFileJob.call(smartlingPullLocaleFileJobInput); verify(textUnitBatchImporterServiceMock, times(1)) - .importTextUnits(textUnitListCaptor.capture(), eq(false), eq(true)); + .importTextUnits(textUnitListCaptor.capture(), eq(fromLegacy(false, true))); List captured = textUnitListCaptor.getValue(); @@ -251,7 +252,7 @@ public void testPullPluralsFix() throws Exception { smartlingPullLocaleFileJob.call(smartlingPullLocaleFileJobInput); verify(textUnitBatchImporterServiceMock, times(1)) - .importTextUnits(textUnitListCaptor.capture(), eq(false), eq(true)); + .importTextUnits(textUnitListCaptor.capture(), eq(fromLegacy(false, true))); List captured = textUnitListCaptor.getValue(); @@ -319,7 +320,7 @@ public void testPullDryRun() throws Exception { smartlingPullLocaleFileJob.call(smartlingPullLocaleFileJobInput); verify(textUnitBatchImporterServiceMock, times(0)) - .importTextUnits(textUnitListCaptor.capture(), eq(false), eq(true)); + .importTextUnits(textUnitListCaptor.capture(), eq(fromLegacy(false, true))); } @Test(expected = SmartlingClientException.class) @@ -370,7 +371,7 @@ public void testPullShortCircuitIfNoChanges() throws Exception { smartlingPullLocaleFileJob.call(smartlingPullLocaleFileJobInput); verify(textUnitBatchImporterServiceMock, times(0)) - .importTextUnits(textUnitListCaptor.capture(), eq(false), eq(true)); + .importTextUnits(textUnitListCaptor.capture(), eq(fromLegacy(false, true))); verify(thirdPartyFileChecksumRepositoryMock, times(0)).save(any(ThirdPartyFileChecksum.class)); } @@ -412,7 +413,7 @@ public void testPullShortCircuitIfChanges() throws Exception { smartlingPullLocaleFileJob.call(smartlingPullLocaleFileJobInput); verify(textUnitBatchImporterServiceMock, times(1)) - .importTextUnits(textUnitListCaptor.capture(), eq(false), eq(true)); + .importTextUnits(textUnitListCaptor.capture(), eq(fromLegacy(false, true))); verify(thirdPartyFileChecksumRepositoryMock, times(1)).save(any(ThirdPartyFileChecksum.class)); } diff --git a/webapp/src/test/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterServiceTest.java b/webapp/src/test/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterServiceTest.java index 8f0e16aaf7..3566f5b61d 100644 --- a/webapp/src/test/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterServiceTest.java +++ b/webapp/src/test/java/com/box/l10n/mojito/service/tm/importer/TextUnitBatchImporterServiceTest.java @@ -1,5 +1,6 @@ package com.box.l10n.mojito.service.tm.importer; +import static com.box.l10n.mojito.service.tm.importer.TextUnitBatchImporterService.IntegrityChecksType.fromLegacy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; @@ -103,7 +104,8 @@ public void testAsyncImportTextUnitsNameOnly() throws InterruptedException { Arrays.asList(textUnitDTO, textUnitDTO2, textUnitDTO3); PollableFuture asyncImportTextUnits = - textUnitBatchImporterService.asyncImportTextUnits(textUnitDTOsForImport, false, false); + textUnitBatchImporterService.asyncImportTextUnits( + textUnitDTOsForImport, fromLegacy(false, false)); pollableTaskService.waitForPollableTask(asyncImportTextUnits.getPollableTask().getId()); @@ -150,7 +152,8 @@ public void testAsyncImportTextUnitsFromSearch() throws InterruptedException { } PollableFuture asyncImportTextUnits = - textUnitBatchImporterService.asyncImportTextUnits(textUnitDTOsForImport, false, false); + textUnitBatchImporterService.asyncImportTextUnits( + textUnitDTOsForImport, fromLegacy(false, false)); pollableTaskService.waitForPollableTask(asyncImportTextUnits.getPollableTask().getId()); List textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters); @@ -200,7 +203,8 @@ public void testAsyncImportTextUnitsDuplicatedNames() throws InterruptedExceptio } PollableFuture asyncImportTextUnits = - textUnitBatchImporterService.asyncImportTextUnits(textUnitDTOsForImport, false, false); + textUnitBatchImporterService.asyncImportTextUnits( + textUnitDTOsForImport, fromLegacy(false, false)); pollableTaskService.waitForPollableTask(asyncImportTextUnits.getPollableTask().getId()); List textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters); @@ -254,7 +258,8 @@ public void testAsyncImportTextUnitsDuplicatedEntries() throws InterruptedExcept textUnitDTOsForImport.add(duplicatedEntry); PollableFuture asyncImportTextUnits = - textUnitBatchImporterService.asyncImportTextUnits(textUnitDTOsForImport, false, false); + textUnitBatchImporterService.asyncImportTextUnits( + textUnitDTOsForImport, fromLegacy(false, false)); pollableTaskService.waitForPollableTask(asyncImportTextUnits.getPollableTask().getId()); List textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters); @@ -326,7 +331,9 @@ public void testImportMulipleRepositoryAssetAndLocale() throws Exception { + textUnitDTO.getName()); } - textUnitBatchImporterService.asyncImportTextUnits(textUnitDTOsForImport, false, false).get(); + textUnitBatchImporterService + .asyncImportTextUnits(textUnitDTOsForImport, fromLegacy(false, false)) + .get(); List textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters); assertFalse(textUnitDTOs.isEmpty()); @@ -385,7 +392,7 @@ public void testUnused() textUnitDTO.setTarget("v1"); textUnitBatchImporterService - .asyncImportTextUnits(Arrays.asList(textUnitDTO), false, false) + .asyncImportTextUnits(Arrays.asList(textUnitDTO), fromLegacy(false, false)) .get(); List textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters); @@ -417,7 +424,7 @@ public void testUnused() textUnitDTO.setTarget("v2"); textUnitBatchImporterService - .asyncImportTextUnits(Arrays.asList(textUnitDTO), false, false) + .asyncImportTextUnits(Arrays.asList(textUnitDTO), fromLegacy(false, false)) .get(); textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters); @@ -432,7 +439,7 @@ public void testUnused() .addTextUnits(virtualAsset1.getId(), Arrays.asList(virtualAssetTextUnit)) .get(); textUnitBatchImporterService - .asyncImportTextUnits(Arrays.asList(textUnitDTO), false, false) + .asyncImportTextUnits(Arrays.asList(textUnitDTO), fromLegacy(false, false)) .get(); textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters); @@ -477,7 +484,8 @@ public void testIntegirtyChecker() throws Exception { textUnitDTO.setTarget("with some broken {placeholder"); PollableFuture asyncImportTextUnits = - textUnitBatchImporterService.asyncImportTextUnits(Arrays.asList(textUnitDTO), false, false); + textUnitBatchImporterService.asyncImportTextUnits( + Arrays.asList(textUnitDTO), fromLegacy(false, false)); pollableTaskService.waitForPollableTask(asyncImportTextUnits.getPollableTask().getId()); TextUnitSearcherParameters textUnitSearcherParameters = @@ -495,7 +503,8 @@ public void testIntegirtyChecker() throws Exception { textUnitDTO.setTarget("with fixed {placeholder}"); asyncImportTextUnits = - textUnitBatchImporterService.asyncImportTextUnits(Arrays.asList(textUnitDTO), false, false); + textUnitBatchImporterService.asyncImportTextUnits( + Arrays.asList(textUnitDTO), fromLegacy(false, false)); pollableTaskService.waitForPollableTask(asyncImportTextUnits.getPollableTask().getId()); textUnitDTOs = textUnitSearcher.search(textUnitSearcherParameters);