package com.constellio.model.services.trash; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static org.assertj.core.api.Assertions.assertThat; import java.util.ArrayList; import java.util.List; import org.joda.time.LocalDateTime; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.tasks.model.wrappers.Task; import com.constellio.app.modules.tasks.services.TasksSchemasRecordsServices; import com.constellio.data.utils.TimeProvider; import com.constellio.model.entities.records.Record; import com.constellio.model.services.migrations.ConstellioEIMConfigs; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.sdk.tests.ConstellioTest; public class TrashQueueManagerAcceptanceTest extends ConstellioTest { String recordDeletedLogicallyBefore30DaysInZeCollection, recordDeletedLogicallyBefore29DaysInZeCollection, recordDeletedLogicallyNowInZeCollection, recordInZeCollection; String recordDeletedLogicallyBefore30DaysInBusinessCollection, recordDeletedLogicallyNowInBusinessCollection, recordInBusinessCollection; private RecordServices recordServices; private SearchServices searchServices; private TasksSchemasRecordsServices businessTaskSchemas, zeCollectionTaskSchemas; private TrashQueueManager trashManager; private LocalDateTime now, beforeNow30Days, beforeNow29Days; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withTasksModule(), withCollection(businessCollection).withTasksModule() ); recordServices = getModelLayerFactory().newRecordServices(); searchServices = getModelLayerFactory().newSearchServices(); businessTaskSchemas = new TasksSchemasRecordsServices(businessCollection, getAppLayerFactory()); zeCollectionTaskSchemas = new TasksSchemasRecordsServices(zeCollection, getAppLayerFactory()); trashManager = getModelLayerFactory().getTrashQueueManager(); now = TimeProvider.getLocalDateTime(); beforeNow29Days = now.minusDays(29); beforeNow30Days = now.minusDays(30); initTests(); } private void initTests() throws RecordServicesException { givenTimeIs(beforeNow30Days); Task task = zeCollectionTaskSchemas.newTask() .setTitle("recordDeletedLogicallyBefore30DaysInZeCollection"); recordServices.add(task); recordServices.logicallyDelete(task.getWrappedRecord(), null); recordDeletedLogicallyBefore30DaysInZeCollection = task.getId(); task = businessTaskSchemas.newTask() .setTitle("recordDeletedLogicallyBefore30DaysInBusinessCollection"); recordServices.add(task); recordServices.logicallyDelete(task.getWrappedRecord(), null); recordDeletedLogicallyBefore30DaysInBusinessCollection = task.getId(); givenTimeIs(beforeNow29Days); task = zeCollectionTaskSchemas.newTask() .setTitle("recordDeletedLogicallyBefore29DaysInZeCollection"); recordServices.add(task); recordServices.logicallyDelete(task.getWrappedRecord(), null); recordDeletedLogicallyBefore29DaysInZeCollection = task.getId(); givenTimeIs(now); task = zeCollectionTaskSchemas.newTask() .setTitle("recordDeletedLogicallyNowInZeCollection"); recordServices.add(task); recordServices.logicallyDelete(task.getWrappedRecord(), null); recordDeletedLogicallyNowInZeCollection = task.getId(); task = zeCollectionTaskSchemas.newTask() .setTitle("recordInZeCollection"); recordServices.add(task); recordInZeCollection = task.getId(); task = businessTaskSchemas.newTask() .setTitle("recordDeletedLogicallyNowInBusinessCollection"); recordServices.add(task); recordServices.logicallyDelete(task.getWrappedRecord(), null); recordDeletedLogicallyNowInBusinessCollection = task.getId(); task = businessTaskSchemas.newTask() .setTitle("recordInBusinessCollection"); recordServices.add(task); recordInBusinessCollection = task.getId(); } @Test public void givenTrashPurgeAfter31DaysWhenDeleteTrashRecordsThenOk() { givenTimeIs(now); givenConfig(ConstellioEIMConfigs.TRASH_PURGE_DELAI, 31); trashManager.deleteTrashRecords(); List<String> remainingRecords = getRemainingRecords(); assertThat(remainingRecords) .containsOnly(recordDeletedLogicallyBefore30DaysInZeCollection, recordDeletedLogicallyBefore29DaysInZeCollection, recordDeletedLogicallyNowInZeCollection, recordInZeCollection, recordDeletedLogicallyBefore30DaysInBusinessCollection, recordDeletedLogicallyNowInBusinessCollection, recordInBusinessCollection); } @Test public void givenTrashPurgeAfter30DaysWhenDeleteTrashRecordsThenOk() { givenTimeIs(now); givenConfig(ConstellioEIMConfigs.TRASH_PURGE_DELAI, 30); trashManager.deleteTrashRecords(); List<String> remainingRecords = getRemainingRecords(); assertThat(remainingRecords) .containsOnly(recordDeletedLogicallyBefore29DaysInZeCollection, recordDeletedLogicallyNowInZeCollection, recordInZeCollection, recordDeletedLogicallyNowInBusinessCollection, recordInBusinessCollection); } @Test public void givenTrashPurgeAfter29DaysWhenDeleteTrashRecordsThenOk() { givenTimeIs(now); givenConfig(ConstellioEIMConfigs.TRASH_PURGE_DELAI, 29); trashManager.deleteTrashRecords(); List<String> remainingRecords = getRemainingRecords(); assertThat(remainingRecords).containsOnly(recordDeletedLogicallyNowInZeCollection, recordInZeCollection, recordDeletedLogicallyNowInBusinessCollection, recordInBusinessCollection); } @Test public void givenTrashPurgeAfter0DaysWhenDeleteTrashRecordsThenOk() { givenTimeIs(now); givenConfig(ConstellioEIMConfigs.TRASH_PURGE_DELAI, 0); trashManager.deleteTrashRecords(); List<String> remainingRecords = getRemainingRecords(); assertThat(remainingRecords).containsOnly(recordInZeCollection, recordInBusinessCollection); } private List<String> getRemainingRecords() { List<String> returnList = new ArrayList<>(); List<Record> tasks = searchServices .search(new LogicalSearchQuery(from(businessTaskSchemas.taskSchemaType()).returnAll())); for (Record task : tasks) { returnList.add(task.getId()); } tasks = searchServices .search(new LogicalSearchQuery(from(zeCollectionTaskSchemas.taskSchemaType()).returnAll())); for (Record task : tasks) { returnList.add(task.getId()); } return returnList; } }