package com.constellio.app.modules.es.ui.pages; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import com.constellio.app.modules.es.navigation.ESNavigationConfiguration; import com.constellio.sdk.tests.MockedNavigation; 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.smb.ConnectorSmbDocument; import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbFolder; import com.constellio.app.modules.es.services.ConnectorManager; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.application.CoreViews; import com.constellio.app.ui.entities.MetadataSchemaVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.framework.data.RecordVOWithDistinctSchemasDataProvider; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.params.ParamUtils; import com.constellio.model.entities.records.Transaction; import com.constellio.model.services.records.RecordServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; /** * Created by Patrick on 2015-12-01. */ public class ConnectorReportPresenterAcceptTest extends ConstellioTest { RecordToVOBuilder voBuilder = new RecordToVOBuilder(); @Mock ConnectorReportView view; MockedNavigation navigator; SessionContext sessionContext; RecordServices recordServices; ConnectorInstance connectorInstance; ConnectorManager connectorManager; ESSchemasRecordsServices es; ConnectorSmbDocument connectorSmbDocument1, connectorSmbDocument2; ConnectorSmbFolder connectorSmbFolder1, connectorSmbFolder2; ConnectorReportPresenter presenter; RecordVOWithDistinctSchemasDataProvider dataProvider; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioESModule().withAllTestUsers() ); ConstellioFactories constellioFactories = getConstellioFactories(); sessionContext = FakeSessionContext.adminInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); when(view.getSessionContext()).thenReturn(sessionContext); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(constellioFactories); when(view.navigate()).thenReturn(navigator); inCollection(zeCollection).setCollectionTitleTo("Collection de test"); recordServices = getModelLayerFactory().newRecordServices(); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); connectorManager = es.getConnectorManager(); connectorInstance = connectorManager.createConnector(es.newConnectorSmbInstance() .setTitle("zeConnectorSMB") .setCode("zeConnectorSMB") .setEnabled(false) .setSeeds(asList("share")).setUsername("username").setPassword("password").setDomain("domain") .setTraversalCode("zeTraversal")); connectorSmbDocument1 = es.newConnectorSmbDocumentWithId("doc1", connectorInstance).setUrl("1.txt") .setParsedContent("Document 1 content").setParent("folder1"); connectorSmbDocument2 = es.newConnectorSmbDocumentWithId("doc2", connectorInstance).setUrl("2.txt") .setParsedContent("Document 2 content").setParent("folder2"); connectorSmbFolder1 = es.newConnectorSmbFolderWithId("folder1", connectorInstance).setUrl("folder1"); connectorSmbFolder2 = es.newConnectorSmbFolderWithId("folder2", connectorInstance).setUrl("folder2"); Transaction transaction = new Transaction(); transaction.add(connectorSmbFolder1); transaction.add(connectorSmbFolder2); transaction.add(connectorSmbDocument1); transaction.add(connectorSmbDocument2); recordServices.execute(transaction); presenter = new ConnectorReportPresenter(view); Map<String, String> params = new HashMap<>(); params.put(ConnectorReportView.CONNECTOR_ID, connectorInstance.getId()); params.put(ConnectorReportView.REPORT_MODE, ConnectorReportView.INDEXING); String viewPath = ParamUtils.addParams(ESNavigationConfiguration.CONNECTOR_REPORT, params); presenter.forParams(viewPath); dataProvider = presenter.getDataProvider(); } @Test public void whenGetDataProviderThenOk() throws Exception { assertThat(presenter.getDataProvider().size()).isEqualTo(4); assertThat(presenter.getDataProvider().listRecordVOs(0, 4)).extracting("id") .contains("folder1", "folder2", "doc1", "doc2"); assertThat(presenter.getDataProvider().getRecordVO(0).getId()).isEqualTo("folder1"); } @Test public void whenGetFilteredDataProviderThenOk() throws Exception { assertThat(presenter.getFilteredDataProvider("1.txt").size()).isEqualTo(1); assertThat(presenter.getFilteredDataProvider("1").size()).isEqualTo(2); assertThat(presenter.getFilteredDataProvider("txt").listRecordVOs(0, 4)).extracting("id") .contains("doc1", "doc2"); assertThat(presenter.getFilteredDataProvider("1.txt").getRecordVO(0).getId()).isEqualTo("doc1"); } @Test public void givenDataProviderWhenSortThenOk() throws Exception { RecordVOWithDistinctSchemasDataProvider dataProvider = presenter.getDataProvider(); MetadataSchemaVO schemaVO = dataProvider.getSchemas().get(0); Object[] sortPropertyIds = new Object[1]; sortPropertyIds[0] = "url"; List<MetadataVO> sortMetadatas = new ArrayList<MetadataVO>(); String sortMetadataCode = (String) sortPropertyIds[0]; sortMetadatas.add(schemaVO.getMetadata(sortMetadataCode)); boolean[] sort = new boolean[1]; sort[0] = true; try { dataProvider.sort(sortMetadatas.toArray(new MetadataVO[0]), sort); } catch (Exception e) { fail("Cannot sort", e); } } @Test public void givenReportModeIndexationWhenGetReportMetadataListThenOk() throws Exception { assertThat(presenter.getReportMetadataList()) .isEqualTo(Arrays.asList(ConnectorSmbDocument.URL, ConnectorSmbDocument.FETCHED_DATETIME)); } @Test public void whenGetTotalDocumentsCountThenOk() throws Exception { assertThat(presenter.getTotalDocumentsCount()).isEqualTo(4); } @Test public void whenGetFetchedDocumentsCountThenOk() throws Exception { assertThat(presenter.getFetchedDocumentsCount()).isEqualTo(4); } @Test public void whenGetUnfetchedDocumentsCountThenOk() throws Exception { recordServices.update(connectorSmbDocument1.setFetched(false)); recordServices.update(connectorSmbFolder1.setFetched(false)); assertThat(presenter.getUnfetchedDocumentsCount()).isEqualTo(2); } }