package com.constellio.sdk.tests;
import static com.constellio.sdk.tests.SDKConstellioFactoriesInstanceProvider.DEFAULT_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import com.constellio.model.entities.batchprocess.BatchProcess;
import com.constellio.model.entities.batchprocess.BatchProcessStatus;
import com.constellio.model.services.batch.manager.BatchProcessesManager;
public class BatchProcessTestFeature {
public boolean waitForBatchProcessAfterTest = true;
private static int totalTime = 0;
boolean started = false;
FactoriesTestFeatures factoriesTestFeatures;
public BatchProcessTestFeature(FactoriesTestFeatures factoriesTestFeatures) {
this.factoriesTestFeatures = factoriesTestFeatures;
}
public void waitForAllBatchProcessesAcceptingErrors(Runnable batchProcessRuntimeAction) {
waitForAllBatchProcesses(batchProcessRuntimeAction, true);
}
public void waitForAllBatchProcessesAndEnsureNoErrors(Runnable batchProcessRuntimeAction) {
waitForAllBatchProcesses(batchProcessRuntimeAction, false);
}
public void waitForAllBatchProcesses(Runnable batchProcessRuntimeAction, boolean acceptErrors) {
BatchProcessesManager batchProcessesManager = factoriesTestFeatures.newModelServicesFactory(DEFAULT_NAME)
.getBatchProcessesManager();
boolean batchProcessRuntimeActionExecuted = false;
List<BatchProcess> batchProcesses = batchProcessesManager.getAllNonFinishedBatchProcesses();
// batchProcessesManager.waitUntilAllFinished();
for (BatchProcess batchProcess : batchProcesses) {
if (batchProcess != null) {
while (batchProcessesManager.get(batchProcess.getId()).getStatus() != BatchProcessStatus.FINISHED) {
if (batchProcessRuntimeActionExecuted == false) {
batchProcessRuntimeActionExecuted = true;
if (batchProcessRuntimeAction != null) {
batchProcessRuntimeAction.run();
}
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
assertThat(batchProcessesManager.get(batchProcess.getId()).getErrors()).isEqualTo(0);
}
}
if (!acceptErrors) {
for (BatchProcess batchProcess : batchProcessesManager.getFinishedBatchProcesses()) {
// assertThat(batchProcess.getErrors()).isZero()
// .describedAs("Errors during batch process '" + batchProcess.getId() + "'");
}
}
factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newRecordServices().flush();
}
public void afterTest() {
if (waitForBatchProcessAfterTest && factoriesTestFeatures.isInitialized()) {
waitForAllBatchProcesses(null, false);
}
// if (started) {
//
// BatchProcessController controller = factoriesTestFeatures.getModelLayerFactory().getBatchProcessesController();
// controller.close();
// started = false;
// }
}
}