package com.constellio.app.modules.rm.services.logging;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import com.constellio.app.modules.rm.wrappers.Document;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
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.events.RMEventsSearchServices;
import com.constellio.app.modules.rm.wrappers.DecommissioningList;
import com.constellio.model.entities.Taxonomy;
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.services.records.RecordServices;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators;
import com.constellio.model.services.users.UserServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.schemas.TestsSchemasSetup;
import com.constellio.sdk.tests.schemas.TestsSchemasSetup.ZeSchemaMetadatas;
import com.constellio.sdk.tests.setups.Users;
public class DecommissioningLoggingServiceAcceptanceTest extends ConstellioTest {
LocalDateTime shishOClock = new LocalDateTime().minusHours(3);
LocalDateTime tockOClock = new LocalDateTime().minusHours(2);
LocalDateTime teaOClock = new LocalDateTime().minusHours(1);
TestsSchemasSetup zeCollectionSetup = new TestsSchemasSetup(zeCollection);
ZeSchemaMetadatas zeSchema = zeCollectionSetup.new ZeSchemaMetadatas();
Users users = new Users();
RecordServices recordServices;
DecommissioningLoggingService loggingServices;
RMSchemasRecordsServices rm;
private RMTestRecords records = new RMTestRecords(zeCollection);
RMEventsSearchServices rmEventsSearchServices;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTest(users).withRMTest(records)
.withFoldersAndContainersOfEveryStatus()
);
inCollection(zeCollection).giveReadAccessTo(admin);
recordServices = getModelLayerFactory().newRecordServices();
loggingServices = new DecommissioningLoggingService(getModelLayerFactory());
defineSchemasManager().using(zeCollectionSetup);
Taxonomy taxonomy = Taxonomy.createPublic("taxo", "taxo", zeCollection, asList("zeSchemaType"));
getModelLayerFactory().getTaxonomiesManager().addTaxonomy(taxonomy,
getModelLayerFactory().getMetadataSchemasManager());
rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
rmEventsSearchServices = new RMEventsSearchServices(getModelLayerFactory(), zeCollection);
UserServices userServices = getModelLayerFactory().newUserServices();
users.setUp(userServices);
userServices.addUserToCollection(users.alice(), zeCollection);
recordServices.add(users.aliceIn(zeCollection).setCollectionWriteAccess(true).setCollectionDeleteAccess(true)
.getWrappedRecord());
userServices.addUserToCollection(users.bob(), zeCollection);
users = records.getUsers();
}
@Test
public void whenFolderDepositThenEventsCreated()
throws Exception {
whenDecommissioningEventThenAdequateEventCreated(DecommissioningListType.FOLDERS_TO_DEPOSIT, EventType.FOLDER_DEPOSIT);
}
@Test
public void whenFolderDestroyThenEventsCreated()
throws Exception {
whenDecommissioningEventThenAdequateEventCreated(DecommissioningListType.FOLDERS_TO_DESTROY,
EventType.FOLDER_DESTRUCTION);
}
@Test
public void whenFolderTransferThenEventsCreated()
throws Exception {
whenDecommissioningEventThenAdequateEventCreated(DecommissioningListType.FOLDERS_TO_TRANSFER,
EventType.FOLDER_RELOCATION);
}
@Test
public void whenDocumentTransferToPdfAThenEventCreated()
throws Exception {
SearchServices searchServices = getModelLayerFactory().newSearchServices();
User bob = users.bobIn(zeCollection);
LogicalSearchQuery findDocument = new LogicalSearchQuery(new LogicalSearchQuery(LogicalSearchQueryOperators.from(rm.documentSchemaType())
.returnAll()).setNumberOfRows(1));
Document document = rm.wrapDocument(searchServices.search(findDocument).get(0));
loggingServices.logPdfAGeneration(document, bob);
recordServices.flush();
LogicalSearchQuery query = new LogicalSearchQuery();
query.setCondition(
LogicalSearchQueryOperators.from(rm.eventSchema()).where(
rm.eventSchema().getMetadata(Event.TYPE)).isEqualTo(EventType.PDF_A_GENERATION));
List<Record> events = searchServices.search(query);
assertThat(events).hasSize(1);
Event event = rm.wrapEvent(events.get(0));
event.getUsername().contains(bob.getUsername());
event.getRecordId().contains(document.getId());
}
private void whenDecommissioningEventThenAdequateEventCreated(DecommissioningListType decommissioningListType,
String eventType) {
DecommissioningList decommissioningList = rm.newDecommissioningList()
.setDecommissioningListType(decommissioningListType);
User bob = users.bobIn(zeCollection);
loggingServices.logDecommissioning(decommissioningList, bob);
recordServices.flush();
LogicalSearchQuery query = new LogicalSearchQuery();
query.setCondition(
LogicalSearchQueryOperators.from(rm.eventSchema()).where(
rm.eventSchema().getMetadata(Event.TYPE)).isEqualTo(eventType));
SearchServices searchServices = getModelLayerFactory().newSearchServices();
List<Record> events = searchServices.search(query);
assertThat(events).hasSize(1);
Event event = rm.wrapEvent(events.get(0));
event.getUsername().contains(bob.getUsername());
}
}