package com.constellio.app.modules.es.ui.pages; import static com.constellio.app.ui.i18n.i18n.$; 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.verify; import static org.mockito.Mockito.when; import com.constellio.app.modules.es.navigation.ESViews; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.sdk.tests.MockedNavigation; import org.joda.time.LocalDateTime; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.modules.es.model.connectors.ConnectorInstance; import com.constellio.app.modules.es.model.connectors.ConnectorType; import com.constellio.app.modules.es.navigation.ESViews; import com.constellio.app.modules.es.services.ConnectorManager; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.entities.RecordVO; import com.constellio.model.entities.records.Transaction; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.users.UserServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedNavigation; import com.constellio.sdk.tests.setups.Users; public class DisplayConnectorInstancePresenterAcceptTest extends ConstellioTest { @Mock DisplayConnectorInstanceView view; @Mock RecordVO recordVO; RMTestRecords records = new RMTestRecords(zeCollection); ConnectorManager connectorManager; RecordServices recordServices; ESSchemasRecordsServices es; UserServices userServices; MockedNavigation navigator; Users users = new Users(); ConnectorType connectorType; ConnectorInstance connectorInstance, anotherConnectorInstace; DisplayConnectorInstancePresenter presenter; @Before public void setUp() throws Exception { prepareSystem(withZeCollection().withConstellioESModule().withAllTestUsers()); ConstellioFactories constellioFactories = getConstellioFactories(); when(view.getSessionContext()).thenReturn(FakeSessionContext.adminInCollection(zeCollection)); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(constellioFactories); navigator = new MockedNavigation(); when(view.navigate()).thenReturn(navigator); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); userServices = getModelLayerFactory().newUserServices(); connectorManager = es.getConnectorManager(); users.setUp(userServices); connectorInstance = connectorManager .createConnector(es.newConnectorHttpInstance() .setCode("zeConnector") .setTitle("Ze Connector") .setTraversalCode("traversalCode").setEnabled(true) .setSeeds("http://constellio.com")); anotherConnectorInstace = connectorManager .createConnector(es.newConnectorHttpInstance() .setCode("anotherConnector") .setTitle("Another Connector") .setTraversalCode("anotherTraversalCode").setEnabled(true) .setSeeds("http://constellio.com")); presenter = new DisplayConnectorInstancePresenter(view); } @Test public void whenFormParamThenNewRecordVO() throws Exception { assertThat(presenter.getRecordVO()).isNull(); presenter.forParams(connectorInstance.getId()); assertThat(presenter.getRecordVO().getId()).isEqualTo(connectorInstance.getId()); } @Test public void givenUserWithoutManagerConnectorPermissionWhenHasPageAccessThenReturnFalse() throws Exception { assertThat(presenter.hasPageAccess("", users.chuckNorrisIn(zeCollection))).isFalse(); } @Test public void givenUserWithManagerConnectorPermissionWhenHasPageAccessThenReturnFalse() throws Exception { assertThat(presenter.hasPageAccess("", users.adminIn(zeCollection))).isTrue(); } @Test public void whenGetConnectorInstaceTitleThenOk() throws Exception { presenter.forParams(connectorInstance.getId()); assertThat(presenter.getTitle()).isEqualTo( $("DisplayConnectorInstanceView.viewTitle") + " Ze Connector"); } @Test public void whenEditButtonClickedThenNavigateToEdit() throws Exception { when(recordVO.getId()).thenReturn(connectorInstance.getId()); presenter.forParams(connectorInstance.getId()); presenter.editConnectorInstanceButtonClicked(); verify(view.navigate().to(ESViews.class)).editConnectorInstance(connectorInstance.getId()); } @Test public void whenGetRestrictedRecordIdsThenReturnConnectorId() throws Exception { presenter.forParams(connectorInstance.getId()); assertThat(presenter.getRestrictedRecordIds(connectorInstance.getId())).isEqualTo(asList(connectorInstance.getId())); } @Test public void whenGetLastDocumentsThenOk() throws Exception { addFetchedDocument(connectorInstance); presenter.forParams(connectorInstance.getId()); assertThat(presenter.getLastDocuments()).contains("http://constellio.com/document1"); assertThat(presenter.getLastDocuments()).contains("http://constellio.com/document2"); } @Test public void whenIsStartButtonVisibleThenStopButtonIsNot() throws Exception { connectorInstance = es.getConnectorInstance(connectorInstance.getId()); presenter.forParams(connectorInstance.getId()); assertThat(presenter.isStartButtonVisible()).isFalse(); assertThat(presenter.isStopButtonVisible()).isTrue(); } @Test public void whenStartButtonClickedThenStart() throws Exception { presenter.forParams(connectorInstance.getId()); presenter.start(); connectorInstance = es.getConnectorInstance(connectorInstance.getId()); presenter.forParams(connectorInstance.getId()); assertThat(connectorInstance.isEnabled()).isTrue(); assertThat(presenter.isStartButtonVisible()).isFalse(); assertThat(presenter.isStopButtonVisible()).isTrue(); } @Test public void givenConnectorInstanceStartedWhenStopButtonClickedThenStop() throws Exception { presenter.forParams(connectorInstance.getId()); presenter.start(); connectorInstance = es.getConnectorInstance(connectorInstance.getId()); presenter.forParams(connectorInstance.getId()); assertThat(connectorInstance.isEnabled()).isTrue(); assertThat(presenter.isStartButtonVisible()).isFalse(); assertThat(presenter.isStopButtonVisible()).isTrue(); presenter.forParams(connectorInstance.getId()); presenter.stop(); connectorInstance = es.getConnectorInstance(connectorInstance.getId()); presenter.forParams(connectorInstance.getId()); assertThat(connectorInstance.isEnabled()).isFalse(); assertThat(presenter.isStartButtonVisible()).isTrue(); assertThat(presenter.isStopButtonVisible()).isFalse(); } @Test public void whenEditSchemasButtonClickedThenNavigateToEdit() throws Exception { presenter.forParams(connectorInstance.getId()); presenter.editSchemasButtonClicked(); verify(view.navigate().to(ESViews.class)).displayConnectorMappings(connectorInstance.getId()); } private void addFetchedDocument(ConnectorInstance connectorInstance) throws Exception { Transaction transaction = new Transaction(); transaction.add(es.newConnectorHttpDocumentWithId("olderTraversalRecord", connectorInstance)) .setURL("http://constellio.com/document1").setTitle("Titre1").setFetched(true) .setModifiedOn(new LocalDateTime()).setTraversalCode(connectorInstance.getTraversalCode()); transaction.add(es.newConnectorHttpDocumentWithId("record2", connectorInstance)) .setModifiedOn(new LocalDateTime().plusSeconds(3)).setURL("http://constellio.com/document2").setTitle("Titre2") .setFetched(true).setTraversalCode(connectorInstance.getTraversalCode()); recordServices.execute(transaction); } }