package com.constellio.app.modules.rm.extensions;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.model.enums.DecommissioningListType;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.services.decommissioning.DecommissioningService;
import com.constellio.app.modules.rm.services.logging.DecommissioningLoggingService;
import com.constellio.app.modules.rm.wrappers.DecommissioningList;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.Event;
import com.constellio.model.entities.records.wrappers.EventType;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.records.wrappers.UserFolder;
import com.constellio.model.entities.schemas.Schemas;
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;
import com.constellio.sdk.tests.setups.Users;
import org.junit.Before;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
/**
* Created by constellios on 2017-04-11.
*/
public class RMEventRecordExtensionAcceptanceTest extends ConstellioTest {
DecommissioningLoggingService decommisioningLoggingService;
RMSchemasRecordsServices rm;
RMTestRecords records = new RMTestRecords(zeCollection);
RecordServices recordServices;
SearchServices searchServices;
public static final String DECOMMISSIONING_LIST = "DECOMMISSIONING_LIST";
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records)
.withFoldersAndContainersOfEveryStatus().withAllTestUsers()
);
rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
recordServices = getModelLayerFactory().newRecordServices();
searchServices = getModelLayerFactory().newSearchServices();
decommisioningLoggingService = new DecommissioningLoggingService(getModelLayerFactory());
}
@Test
public void givenEventFolderDestructionAdministrativeUnitInPath() throws RecordServicesException, InterruptedException {
DecommissioningList decommissioningList = getDecommissioningList(DecommissioningListType.FOLDERS_TO_DESTROY);
assertLastEvent(decommissioningList, EventType.FOLDER_DESTRUCTION);
}
@Test
public void givenEventFolderDepositAdministrativeUnitInPath() throws RecordServicesException, InterruptedException {
DecommissioningList decommissioningList = getDecommissioningList(DecommissioningListType.FOLDERS_TO_DEPOSIT);
assertLastEvent(decommissioningList, EventType.FOLDER_DEPOSIT);
}
@Test
public void givenEventFolderToTransferAdministrativeUnitInPath() throws RecordServicesException, InterruptedException {
DecommissioningList decommissioningList = getDecommissioningList(DecommissioningListType.FOLDERS_TO_TRANSFER);
assertLastEvent(decommissioningList, EventType.FOLDER_RELOCATION);
}
private void assertLastEvent(DecommissioningList decommissioningList, String decomissioningListType)
{
LogicalSearchQuery query = new LogicalSearchQuery(from(rm.event.schemaType()).returnAll()).sortDesc(Schemas.CREATED_ON);
List<Record> listRecord = searchServices.search(query);
Event event = rm.wrapEvent(listRecord.get(0));
assertThat(event.getRecordId()).isEqualTo(decommissioningList.getId());
assertThat(event.getEventPrincipalPath()).isEqualTo("/admUnits/unitId_10/" + event.getId());
assertThat(event.getType()).isEqualTo(decomissioningListType);
}
private DecommissioningList getDecommissioningList(DecommissioningListType decomissioningListType) throws RecordServicesException, InterruptedException {
DecommissioningList decommissioningList = rm.newDecommissioningList();
decommissioningList.setTitle(DECOMMISSIONING_LIST);
decommissioningList.setAdministrativeUnit(records.unitId_10);
decommissioningList.setDecommissioningListType(decomissioningListType);
recordServices.add(decommissioningList.getWrappedRecord());
decommisioningLoggingService.logDecommissioning(decommissioningList, records.getAdmin());
waitForBatchProcess();
return decommissioningList;
}
}