package com.constellio.app.modules.es.services;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.modules.es.connectors.spi.Connector;
import com.constellio.app.modules.es.model.connectors.ConnectorInstance;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpDocument;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.setups.Users;
public class ConnectorManagerAcceptanceTest extends ConstellioTest {
@Mock Connector connector1, connector2, connector3;
MetadataSchemasManager schemasManager;
ConnectorInstance instance1, instance2, instance3;
ESSchemasRecordsServices es;
ConnectorManager connectorManager;
Users users = new Users();
User dakota, edouard;
@Before
public void setUp()
throws Exception {
prepareSystem(withZeCollection().withConstellioESModule());
users.setUp(getModelLayerFactory().newUserServices());
es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory());
instance1 = es.newConnectorHttpInstanceWithId("instance1").setCode("connector1").setTitle("connector1").setEnabled(false)
.setSeeds("http://constellio.com");
instance2 = es.newConnectorHttpInstanceWithId("instance2").setCode("connector2").setTitle("connector2").setEnabled(false)
.setSeeds("http://doculibre.com");
instance3 = es.newConnectorHttpInstanceWithId("instance3").setCode("connector3").setTitle("connector3").setEnabled(false)
.setSeeds("http://perdu.com");
connectorManager = spy(es.getConnectorManager());
connectorManager.save(instance1);
connectorManager.save(instance2);
connectorManager.save(instance3);
doReturn(connector1).when(connectorManager).instanciate(instance1);
doReturn(connector2).when(connectorManager).instanciate(instance2);
doReturn(connector3).when(connectorManager).instanciate(instance3);
getModelLayerFactory().newUserServices().addUserToCollection(users.edouardLechat(), zeCollection);
getModelLayerFactory().newUserServices().addUserToCollection(users.dakotaLIndien(), zeCollection);
schemasManager = getModelLayerFactory().getMetadataSchemasManager();
dakota = users.dakotaLIndienIn(zeCollection);
edouard = users.edouardIn(zeCollection);
}
@Test
public void whenCreateOrUpdateConnectorInstanceThenUpdateSchemaTitle()
throws Exception {
ConnectorInstance zeInstance = es.newConnectorHttpInstanceWithId("zeConnector").setCode("zeConnector")
.setTitle("Ze connector").setEnabled(false).setSeeds("http://constellio.com");
connectorManager.createConnector(zeInstance);
String schemaCode = ConnectorHttpDocument.SCHEMA_TYPE + "_" + zeInstance.getId();
assertThat(schemasManager.getSchemaTypes(zeCollection).getSchema(schemaCode).getLabel(Language.French)).isEqualTo("Ze connector");
zeInstance.setTitle("Ze ultimate connector");
getModelLayerFactory().newRecordServices().update(zeInstance);
assertThat(schemasManager.getSchemaTypes(zeCollection).getSchema(schemaCode).getLabel(Language.French))
.isEqualTo("Ze ultimate connector");
}
@Test
public void whenGetUserTokensThenConnectToEveryConnectorToBuildAListOfTokens()
throws Exception {
assertThat(dakota.getManualTokens()).isEmpty();
when(connector1.fetchTokens("dakota")).thenReturn(asList("rinstance1_token1"));
when(connector1.fetchTokens("edouard")).thenReturn(asList("rinstance1_token1", "rinstance1_token2"));
when(connector2.fetchTokens("dakota")).thenReturn(asList("rinstance2_token1"));
when(connector2.fetchTokens("edouard")).thenReturn(asList("rinstance2_token1", "rinstance2_token2"));
when(connector3.fetchTokens("dakota")).thenReturn(asList("rinstance3_token1"));
when(connector3.fetchTokens("edouard")).thenReturn(asList("rinstance3_token1", "rinstance3_token2"));
connectorManager.updateUserTokens(dakota);
connectorManager.updateUserTokens(edouard);
assertThat(dakota.getManualTokens()).containsOnly("rinstance1_token1", "rinstance2_token1", "rinstance3_token1");
assertThat(edouard.getManualTokens()).containsOnly("rinstance1_token1", "rinstance1_token2", "rinstance2_token1",
"rinstance2_token2", "rinstance3_token1", "rinstance3_token2");
when(connector1.fetchTokens("dakota")).thenReturn(asList("rinstance1_token3"));
when(connector1.fetchTokens("edouard")).thenReturn(asList("rinstance1_token4", "rinstance1_token2"));
when(connector2.fetchTokens("dakota")).thenReturn(asList("rinstance2_token3"));
when(connector2.fetchTokens("edouard")).thenReturn(asList("rinstance2_token4", "rinstance2_token2"));
when(connector3.fetchTokens("dakota")).thenReturn(asList("rinstance3_token3"));
when(connector3.fetchTokens("edouard")).thenReturn(asList("rinstance3_token4", "rinstance3_token2"));
connectorManager.updateUserTokens(dakota);
connectorManager.updateUserTokens(edouard);
assertThat(dakota.getManualTokens()).containsOnly("rinstance1_token3", "rinstance2_token3", "rinstance3_token3");
assertThat(edouard.getManualTokens()).containsOnly("rinstance1_token4", "rinstance1_token2", "rinstance2_token4",
"rinstance2_token2", "rinstance3_token4", "rinstance3_token2");
connectorManager.delete(instance1);
connectorManager.updateUserTokens(dakota);
connectorManager.updateUserTokens(edouard);
assertThat(dakota.getManualTokens()).containsOnly("rinstance2_token3", "rinstance3_token3");
assertThat(edouard.getManualTokens()).containsOnly("rinstance2_token4",
"rinstance2_token2", "rinstance3_token4", "rinstance3_token2");
}
}