package com.constellio.app.modules.es.model;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.modules.es.connectors.spi.Connector;
import com.constellio.app.modules.es.connectors.spi.ConnectorJob;
import com.constellio.app.modules.es.connectors.spi.ConnectorLogger;
import com.constellio.app.modules.es.connectors.spi.ConsoleConnectorLogger;
import com.constellio.app.modules.es.model.connectors.ConnectorInstance;
import com.constellio.app.modules.es.model.connectors.ConnectorType;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance;
import com.constellio.app.modules.es.services.ConnectorManager;
import com.constellio.app.modules.es.services.ESSchemasRecordsServices;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
import com.constellio.sdk.tests.ConstellioTest;
public class ConnectorRecordsAcceptanceTest extends ConstellioTest {
LocalDateTime shishOClock = new LocalDateTime();
String testConnectorTypeId = "testConnectorTypeId";
ConnectorManager connectorManager;
RecordServices recordServices;
ESSchemasRecordsServices es;
ConnectorHttpInstance connectorInstance, connectorInstance2;
ConnectorLogger logger = new ConsoleConnectorLogger();
@Before
public void setUp()
throws Exception {
prepareSystem(withZeCollection().withConstellioESModule().withAllTestUsers());
es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory());
recordServices = getModelLayerFactory().newRecordServices();
connectorManager = es.getConnectorManager();
}
@Test
public void givenConnectorWithDocumentsThenOnlyDocumentsWithFetchedStatusAreInDocumentsCountAndLastDocuments()
throws Exception {
connectorInstance = connectorManager.createConnector(es.newConnectorHttpInstance().setCode("zeConnector")
.setTitle("ze connector").setEnabled(false).setSeeds("http://constellio.com"));
connectorInstance2 = connectorManager.createConnector(es.newConnectorHttpInstance().setCode("zeConnector2")
.setTitle("another connector").setEnabled(false).setSeeds("http://constellio.com"));
Transaction transaction = new Transaction();
transaction.add(connectorInstance.setTraversalCode("t2"));
transaction.add(connectorInstance2.setTraversalCode("t2"));
transaction.add(es.newConnectorHttpDocumentWithId("unsearchableDocument", connectorInstance))
.setURL("http://constellio.com/document1").setTitle("Titre1").setFetched(true).setSearchable(false)
.setModifiedOn(shishOClock).setTraversalCode("t1");
transaction.add(es.newConnectorHttpDocumentWithId("otherConnectorRecord", connectorInstance2))
.setModifiedOn(shishOClock.plusSeconds(1)).setURL("http://constellio.com/document2").setTitle("Titre2")
.setFetched(true).setTraversalCode("t2");
transaction.add(es.newConnectorHttpDocumentWithId("record1", connectorInstance))
.setModifiedOn(shishOClock.plusSeconds(2)).setURL("http://constellio.com/document1").setTitle("Titre1")
.setFetched(true).setTraversalCode("t2");
transaction.add(es.newConnectorHttpDocumentWithId("record2", connectorInstance))
.setModifiedOn(shishOClock.plusSeconds(3)).setURL("http://constellio.com/document2").setTitle("Titre2")
.setFetched(true).setTraversalCode("t2");
transaction.add(es.newConnectorHttpDocumentWithId("record3", connectorInstance))
.setModifiedOn(shishOClock.plusSeconds(4)).setURL("http://constellio.com/document3").setTitle("Titre3")
.setFetched(false).setTraversalCode("t2");
transaction.add(es.newConnectorHttpDocumentWithId("record4", connectorInstance))
.setModifiedOn(shishOClock.plusSeconds(5)).setURL("http://constellio.com/document4").setTitle("Titre4")
.setFetched(true).setTraversalCode("t2");
transaction.add(es.newConnectorHttpDocumentWithId("record5", connectorInstance))
.setModifiedOn(shishOClock.plusSeconds(6)).setURL("http://constellio.com/document5").setTitle("Titre5")
.setFetched(false).setTraversalCode("t2");
recordServices.execute(transaction);
assertThat(connectorManager.getLastFetchedDocuments(connectorInstance.getId(), 1)).extracting("id")
.isEqualTo(asList("record4"));
assertThat(connectorManager.getLastFetchedDocuments(connectorInstance.getId(), 10)).extracting("id")
.isEqualTo(asList("record4", "record2", "record1"));
assertThat(connectorManager.getFetchedDocumentsCount(connectorInstance.getId())).isEqualTo(3);
}
private void givenDummyConnectorType()
throws Exception {
MetadataSchemasManager schemasManager = getModelLayerFactory().getMetadataSchemasManager();
MetadataSchemaTypesBuilder typesBuilder = schemasManager.modify(zeCollection);
typesBuilder.getSchemaType(ConnectorInstance.SCHEMA_TYPE).createCustomSchema("test");
schemasManager.saveUpdateSchemaTypes(typesBuilder);
ConnectorType type = es.newConnectorTypeWithId(testConnectorTypeId).setCode("test").setTitle("test")
.setConnectorClassName(ConnectorTest.class.getName()).setLinkedSchema(ConnectorInstance.SCHEMA_TYPE + "_test");
recordServices.add(type);
}
public static class ConnectorTest extends Connector {
String code;
AtomicInteger atomicInteger = new AtomicInteger();
@Override
public List<ConnectorJob> getJobs() {
return new ArrayList<>();
}
@Override
protected void initialize(Record instance) {
}
@Override
public List<String> fetchTokens(String username) {
return new ArrayList<>();
}
@Override
public List<String> getConnectorDocumentTypes() {
return new ArrayList<>();
}
@Override
public void start() {
}
@Override
public void stop() {
}
@Override
public void afterJobs(List<ConnectorJob> jobs) {
}
@Override
public void resume() {
}
@Override
public List<String> getReportMetadatas(String reportMode) {
return null;
}
@Override
public String getMainConnectorDocumentType() {
return null;
}
@Override
public void onAllDocumentsDeleted() {
}
}
}