package com.constellio.app.extensions.records; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.*; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; import java.util.Locale; import com.constellio.app.api.extensions.taxonomies.FolderDeletionEvent; import com.constellio.app.api.extensions.taxonomies.UserSearchEvent; import com.constellio.app.modules.rm.ui.components.breadcrumb.FolderDocumentBreadcrumbTrail; import com.constellio.app.modules.rm.ui.pages.folder.DisplayFolderPresenter; import com.constellio.app.modules.rm.ui.pages.folder.DisplayFolderView; import com.constellio.app.ui.pages.base.UIContext; import com.constellio.app.ui.pages.search.AdvancedSearchView; import com.constellio.app.ui.pages.search.SimpleSearchPresenter; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; import com.constellio.sdk.tests.MockedNavigation; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.extensions.records.params.GetIconPathParams; import com.constellio.app.modules.es.model.connectors.ConnectorInstance; import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpDocument; import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance; import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbDocument; 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.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.ui.pages.folder.AddEditFolderView; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.tasks.model.wrappers.Task; import com.constellio.app.modules.tasks.services.TasksSchemasRecordsServices; import com.constellio.app.ui.application.CoreViews; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.model.services.records.RecordServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import org.mockito.Mockito; import org.mockito.Spy; /** * Created by Patrick on 2015-11-19. */ public class RecordAppExtensionAcceptTest extends ConstellioTest { RecordToVOBuilder voBuilder = new RecordToVOBuilder(); @Mock AddEditFolderView view; @Mock CoreViews navigator; @Mock RecordAppExtension recordAppExtension1; @Mock RecordAppExtension recordAppExtension2; @Mock DisplayFolderView displayFolderView; RMTestRecords records = new RMTestRecords(zeCollection); SessionContext sessionContext; RMSchemasRecordsServices rmSchemasRecordsServices; RecordServices recordServices; ConnectorInstance connectorSmbInstance; ConnectorManager connectorManager; ESSchemasRecordsServices es; TasksSchemasRecordsServices tasksSchemas; ConnectorSmbDocument connectorSmbDocument; ConnectorHttpInstance connectorHttpInstance; ConnectorHttpDocument connectorHttpDocument; Task zeTask; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioESModule().withTasksModule().withConstellioRMModule().withAllTestUsers() .withRMTest(records) .withFoldersAndContainersOfEveryStatus().withEvents() ); inCollection(zeCollection).setCollectionTitleTo("Collection de test"); rmSchemasRecordsServices = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); connectorManager = es.getConnectorManager(); tasksSchemas = new TasksSchemasRecordsServices(zeCollection, getAppLayerFactory()); zeTask = tasksSchemas.newTask().setTitle("zeTask"); recordServices.add(zeTask.getWrappedRecord()); sessionContext = FakeSessionContext.chuckNorrisInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); connectorSmbInstance = connectorManager.createConnector(es.newConnectorSmbInstance() .setTitle("zeConnectorSMB") .setCode("zeConnectorSMB") .setEnabled(false) .setSeeds(asList("share")).setUsername("username").setPassword("password").setDomain("domain") .setTraversalCode("zeTraversal")); connectorSmbDocument = es.newConnectorSmbDocument(connectorSmbInstance); connectorHttpInstance = connectorManager.createConnector(es.newConnectorHttpInstance() .setTitle("zeConnectorHTTP") .setCode("zeConnectorHTTP") .setEnabled(false) .setSeeds("share").setUsername("username").setPassword("password").setDomain("domain") .setTraversalCode("zeTraversal")); connectorHttpDocument = es.newConnectorHttpDocument(connectorHttpInstance); } @Test public void givenActiveFolderToRecordVOWhenGetIconAndExtensionForRecordThenReturnGoodIcon() throws Exception { Folder folder = records.getFolder_A01().setDescription("niceTitle"); recordServices.update(folder); RecordVO recordVO = voBuilder.build(records.getFolder_A01().getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(records.getFolder_A01().getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/folder/folder.png") .isEqualTo(iconPath); assertThat(recordVO.getExtension()).isEqualTo("folder"); assertThat(recordVO.getNiceTitle()).isEqualTo("niceTitle"); } @Test public void givenSemiActiveFolderToRecordVOWhenGetIconAndExtensionForRecordThenReturnGoodIcon() throws Exception { RecordVO recordVO = voBuilder.build(records.getFolder_C30().getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(records.getFolder_C30().getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/folder/folder_orange.png") .isEqualTo(iconPath); assertThat(recordVO.getExtension()).isEqualTo("folder_orange"); } @Test public void givenDepositedFolderToRecordVOWhenGetIconAndExtensionForRecordThenReturnGoodIcon() throws Exception { RecordVO recordVO = voBuilder.build(records.getFolder_A79().getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(records.getFolder_A79().getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/folder/folder_purple.png") .isEqualTo(iconPath); assertThat(recordVO.getExtension()).isEqualTo("folder_purple"); } @Test public void givenDestroyedFolderToRecordVOWhenGetIconAndExtensionForRecordThenReturnGoodIcon() throws Exception { RecordVO recordVO = voBuilder.build(records.getFolder_A80().getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(records.getFolder_A80().getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/folder/folder_grey.png").isEqualTo(iconPath); assertThat(recordVO.getExtension()).isEqualTo("folder_grey"); } @Test public void givenContainerToRecordVOWhenGetIconForRecordAndExtensionThenReturnGoodIcon() throws Exception { RecordVO recordVO = voBuilder.build(records.getContainerBac01().getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(records.getContainerBac01().getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/container/box.png").isEqualTo(iconPath); assertThat(recordVO.getExtension()).isNull(); } @Test public void givenConnectorHttpInstanceToRecordVOWhenGetIconAndExtensionForRecordThenReturnGoodIcon() throws Exception { RecordVO recordVO = voBuilder.build(connectorSmbDocument.getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(connectorSmbDocument.getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/connectors/connectorSmbDocument.png").isEqualTo(iconPath); assertThat(recordVO.getExtension()).isNull(); } @Test public void givenConnectorSmbInstanceToRecordVOWhenGetIconAndExtensionForRecordThenReturnGoodIcon() throws Exception { RecordVO recordVO = voBuilder.build(connectorHttpDocument.getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(connectorHttpDocument.getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/connectors/connectorHttpDocument.png").isEqualTo(iconPath); assertThat(recordVO.getExtension()).isNull(); } @Test public void givenTaskToRecordVOWhenGetIconAndExtensionForRecordThenReturnGoodIcon() throws Exception { RecordVO recordVO = voBuilder.build(zeTask.getWrappedRecord(), VIEW_MODE.DISPLAY, sessionContext); String iconPath = getAppLayerFactory().getExtensions().forCollection(zeCollection) .getIconForRecord(new GetIconPathParams(zeTask.getWrappedRecord(), false)); assertThat(recordVO.getResourceKey()).isEqualTo("images/icons/task/task.png").isEqualTo(iconPath); assertThat(recordVO.getExtension()).isEqualTo("task"); } @Test public void givenAFolderIsDeletedThenIsNotified() { MockedNavigation navigator = new MockedNavigation(); UIContext uiContext = mock(UIContext.class); when(uiContext.getAttribute(FolderDocumentBreadcrumbTrail.TAXONOMY_CODE)).thenReturn(null); when(displayFolderView.getConstellioFactories()).thenReturn(getConstellioFactories()); when(displayFolderView.getSessionContext()).thenReturn(FakeSessionContext.gandalfInCollection(zeCollection)); when(displayFolderView.getUIContext()).thenReturn(uiContext); when(displayFolderView.getCollection()).thenReturn(zeCollection); when(displayFolderView.navigate()).thenReturn(navigator); Folder folder = rmSchemasRecordsServices.searchFolders(where(rmSchemasRecordsServices.folder.title()).isContainingText("Avocat")).get(0); getAppLayerFactory().getExtensions().forCollection(zeCollection).recordAppExtensions.add(recordAppExtension1); getAppLayerFactory().getExtensions().forCollection(zeCollection).recordAppExtensions.add(recordAppExtension2); DisplayFolderPresenter displayFolderPresenter = new DisplayFolderPresenter(displayFolderView); displayFolderPresenter.forParams(folder.getId()); displayFolderPresenter.deleteFolderButtonClicked("No reason"); verify(recordAppExtension1, times(1)).notifyFolderDeleted(any(FolderDeletionEvent.class)); verify(recordAppExtension2, times(1)).notifyFolderDeleted(any(FolderDeletionEvent.class)); } }