package com.constellio.app.modules.es.connectors.ldap; import static com.constellio.sdk.tests.TestUtils.asList; import static org.assertj.core.api.Assertions.assertThat; import java.util.UUID; import javax.naming.ldap.LdapContext; import org.junit.Before; import org.junit.Test; 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.services.ESSchemasRecordsServices; import com.constellio.model.conf.LDAPTestConfig; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.InternetTest; @InternetTest public class ConnectorLDAPUserDocumentFactoryRealTest extends ConstellioTest { ESSchemasRecordsServices es; ConnectorLDAPServices connectorLDAPServices = new ConnectorLDAPServicesImpl(); private ConnectorLDAPInstance connectorInstance; private ConnectorLDAPUserDocument document; @Before public void setUp() throws Exception { prepareSystem(withZeCollection().withConstellioESModule().withAllTestUsers()); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); connectorInstance = newConnectorLDAPInstance(); document = es.newConnectorLDAPUserDocument(connectorInstance); } @Test public void whenPopulateUserThenOk() throws Exception { LdapContext ctx = getValidContext(); String id = "CN=username0,OU=Departement1,OU=doculibre,DC=test,DC=doculibre,DC=ca"; LDAPObjectAttributes attributes = connectorLDAPServices.getObjectAttributes(ctx, id); ConnectorLDAPUserDocument user = ConnectorLDAPUserDocumentFactory .populateUser(document, attributes, connectorInstance); assertThat(user.getFirstName()).isEqualTo("firstname0"); assertThat(user.getLastName()).isEqualTo("lastname0"); assertThat(user.getEmail()).isEqualTo("username0@doculibre.com"); assertThat(user.getWorkTitle()).isEqualTo("jobtitle0"); assertThat(user.getDistinguishedName()) .isEqualTo("CN=username0,OU=Departement1,OU=doculibre,DC=test,DC=doculibre,DC=ca"); assertThat(user.getDisplayName()).isEqualTo("username0"); assertThat(user.getUsername()).isEqualTo("username0"); assertThat(user.getAddress()).isEqualTo("office0 street0 city0 zip0 state0 Canada CA "); assertThat(user.getTelephone()).containsOnly("4184184180", "4184184185", "4184184182"); assertThat(user.getCompany()).isEqualTo("company0"); assertThat(user.getDepartment()).isEqualTo("dep0"); assertThat(user.getManager()).isEqualTo("CN=bfay,CN=Users,DC=test,DC=doculibre,DC=ca"); } @Test public void whenPopulateEnabledADUserThenEnsabled() throws Exception { LdapContext ctx = getValidContext(); String id = getActiveUserId(); LDAPObjectAttributes attributes = connectorLDAPServices.getObjectAttributes(ctx, id); ConnectorLDAPUserDocument user = ConnectorLDAPUserDocumentFactory .populateUser(document, attributes, connectorInstance); assertThat(user.getEnabled()).isTrue(); } private String getActiveUserId() { return "CN=bfay,CN=Users,DC=test,DC=doculibre,DC=ca"; } @Test public void whenPopulateDisabledADUserThenDisabled() throws Exception { LdapContext ctx = getValidContext(); String id = getInactiveUserId(); LDAPObjectAttributes attributes = connectorLDAPServices.getObjectAttributes(ctx, id); ConnectorLDAPUserDocument user = ConnectorLDAPUserDocumentFactory .populateUser(document, attributes, connectorInstance); assertThat(user.getEnabled()).isFalse(); } private String getInactiveUserId() { return "CN=krbtgt,CN=Users,DC=test,DC=doculibre,DC=ca"; } private LdapContext getValidContext() { String url = LDAPTestConfig.getUrls().get(0); String user = LDAPTestConfig.getUser() + "@" + LDAPTestConfig.getDomains().get(0); String password = LDAPTestConfig.getPassword(); Boolean followReferences = false; boolean activeDirectory = true; LdapContext ctx = connectorLDAPServices.connectToLDAP(url, user, password, followReferences, activeDirectory); return ctx; } private ConnectorLDAPInstance newConnectorLDAPInstance() { String newTraversalCode = UUID.randomUUID() .toString(); return (ConnectorLDAPInstance) es.newConnectorLDAPInstance().setPassword("pass").setUrls(asList("url")) .setConnectionUsername( "username").setTitle("title").setCode("code").setTraversalCode(newTraversalCode); } }