package com.constellio.app.modules.es.connectors.ldap; import static com.constellio.app.modules.es.connectors.ldap.ConnectorLDAPDocumentType.USER; import static com.constellio.app.modules.es.model.connectors.ldap.ConnectorLDAPUserDocument.EMAIL; import static com.constellio.app.modules.es.model.connectors.ldap.ConnectorLDAPUserDocument.WORK_TITLE; import static com.constellio.model.entities.schemas.Schemas.IDENTIFIER; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.where; import static com.constellio.sdk.tests.TestUtils.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.groups.Tuple.tuple; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.eclipse.jetty.server.Server; import org.joda.time.DateTime; import org.joda.time.LocalDateTime; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.modules.es.connectors.ldap.ConnectorLDAP.InvalidDocumentsBatchRuntimeException; import com.constellio.app.modules.es.connectors.ldap.ConnectorLDAP.InvalidJobsBatchRuntimeException; import com.constellio.app.modules.es.model.connectors.ldap.ConnectorLDAPInstance; import com.constellio.app.modules.es.model.connectors.ldap.ConnectorLDAPUserDocument; import com.constellio.app.modules.es.sdk.TestConnectorEventObserver; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.structures.MapStringListStringStructure; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.sdk.tests.ConstellioTest; public class ConnectorLDAPCrawlerJobAcceptanceTest extends ConstellioTest { Server server; LocalDateTime TIME1 = new LocalDateTime(); LocalDateTime TWO_WEEKS_AFTER_TIME1 = TIME1.plusDays(14); RecordServices recordServices; ESSchemasRecordsServices es; ConnectorLDAPInstance connectorInstance; ConnectorLDAP connectorLDAP; ConnectorLDAPCrawlerJob crawler; private List<String> recordsIds; @Mock TestConnectorEventObserver eventObserver; @Before public void setUp() throws Exception { prepareSystem(withZeCollection().withConstellioESModule().withAllTestUsers()); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); givenTimeIs(TIME1); connectorInstance = newConnectorLDAPInstance("code"); Map<String, List<String>> values = new HashMap<>(); values.put(ConnectorLDAPUserDocument.DEFAULT_SCHEMA + "_" + ConnectorLDAPUserDocument.FIRST_NAME, asList("firstName")); values.put(ConnectorLDAPUserDocument.DEFAULT_SCHEMA + "_" + EMAIL, asList("email")); MapStringListStringStructure propertiesMapping = new MapStringListStringStructure(values); recordServices.add(connectorInstance.setPropertiesMapping(propertiesMapping)); connectorLDAP = new ConnectorLDAP(new TestLDAPServices(TIME1.toLocalDate())); connectorLDAP.initialize(null, connectorInstance.getWrappedRecord(), eventObserver, es); recordsIds = initTestRecords(); crawler = new ConnectorLDAPCrawlerJob(connectorLDAP, connectorInstance, USER, "url", recordsIds); } private ConnectorLDAPInstance newConnectorLDAPInstance(String code) { String newTraversalCode = UUID.randomUUID() .toString(); return (ConnectorLDAPInstance) es.newConnectorLDAPInstance().setPassword("pass").setUrls(asList("url")) .setUsersBaseContextList(asList("url")) .setConnectionUsername("username").setTitle("title").setCode(code).setTraversalCode(newTraversalCode); } private List<String> initTestRecords() throws RecordServicesException { Transaction transaction = new Transaction(); transaction .add(es.newConnectorLDAPUserDocumentWithId("id1", connectorInstance).setURL("url").setDistinguishedName("id1")); transaction .add(es.newConnectorLDAPUserDocumentWithId("id2", connectorInstance).setURL("url").setDistinguishedName("id2")); transaction .add(es.newConnectorLDAPUserDocumentWithId("id3", connectorInstance).setURL("url").setDistinguishedName("id3")); recordServices.execute(transaction); return asList("id1", "id2", "id3"); } private List<ConnectorLDAPUserDocument> getConnectorDocuments() { return es.searchConnectorLDAPUserDocuments(where(IDENTIFIER).isNotNull()); } }