package com.constellio.app.modules.es.connectors.smb.jobs; import com.constellio.app.modules.es.connectors.smb.ConnectorSmb; import com.constellio.app.modules.es.connectors.smb.cache.SmbConnectorContext; import com.constellio.app.modules.es.connectors.smb.cache.SmbConnectorContextServices; import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbDocumentOrFolderUpdater; import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbJobFactory; import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbJobFactoryImpl; import com.constellio.app.modules.es.connectors.smb.service.SmbFileDTO; import com.constellio.app.modules.es.connectors.smb.service.SmbFileDTO.SmbFileDTOStatus; import com.constellio.app.modules.es.connectors.smb.service.SmbRecordService; import com.constellio.app.modules.es.connectors.smb.service.SmbShareService; import com.constellio.app.modules.es.connectors.smb.testutils.FakeSmbService; import com.constellio.app.modules.es.connectors.smb.testutils.SmbTestParams; import com.constellio.app.modules.es.connectors.smb.utils.ConnectorSmbUtils; import com.constellio.app.modules.es.connectors.spi.ConnectorLogger; import com.constellio.app.modules.es.connectors.spi.ConsoleConnectorLogger; import com.constellio.app.modules.es.model.connectors.ConnectorDocument; import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbInstance; import com.constellio.app.modules.es.sdk.TestConnectorEventObserver; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.app.modules.es.services.crawler.DefaultConnectorEventObserver; import com.constellio.model.services.records.RecordServicesException; import com.constellio.sdk.tests.ConstellioTest; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import static com.constellio.app.modules.es.sdk.ESTestUtils.assertThatEventsObservedBy; import static com.constellio.app.modules.es.sdk.TestConnectorEvent.addEvent; import static java.util.Arrays.asList; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; public class SmbNewFolderRetrievalJobAcceptanceTest extends ConstellioTest { @Mock private ConnectorSmb connector; private ESSchemasRecordsServices es; private ConnectorSmbInstance connectorInstance; private SmbShareService smbService; private ConnectorLogger logger; private TestConnectorEventObserver eventObserver; private SmbRecordService smbRecordService; private SmbDocumentOrFolderUpdater updater; private SmbNewFolderRetrievalJob retrievalJob; private ConnectorSmbUtils smbUtils; private SmbJobFactory jobFactory; @Mock private SmbConnectorContext context; private String SHARE_URL = SmbTestParams.EXISTING_SHARE; @Before public void setup() { MockitoAnnotations.initMocks(this); prepareSystem(withZeCollection().withConstellioESModule() .withAllTestUsers()); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); connectorInstance = es.newConnectorSmbInstance() .setDomain(SmbTestParams.DOMAIN) .setUsername(SmbTestParams.USERNAME) .setPassword(SmbTestParams.PASSWORD) .setSeeds(asList(SmbTestParams.EXISTING_SHARE)) .setCode(SmbTestParams.INSTANCE_CODE) .setTraversalCode(SmbTestParams.TRAVERSAL_CODE) .setInclusions(asList(SmbTestParams.EXISTING_SHARE)) .setExclusions(asList("")) .setTitle(SmbTestParams.CONNECTOR_TITLE); es.getConnectorManager() .createConnector(connectorInstance); logger = new ConsoleConnectorLogger(); when(connector.getLogger()).thenReturn(logger); eventObserver = new TestConnectorEventObserver(es, new DefaultConnectorEventObserver(es, logger, SmbTestParams.CONNECTOR_OBSERVER)); smbRecordService = Mockito.spy(new SmbRecordService(es, connectorInstance)); updater = Mockito.spy(new SmbDocumentOrFolderUpdater(connectorInstance, smbRecordService)); smbUtils = new ConnectorSmbUtils() ; SmbConnectorContextServices contextServices = new SmbConnectorContextServices(es); context = contextServices.createContext(connectorInstance.getId()); when(connector.getContext()).thenReturn(context); jobFactory = new SmbJobFactoryImpl(connector, connectorInstance, eventObserver, smbService, smbUtils, smbRecordService, updater); } @Test public void givenFullDTOWhenExecutingThenSendFullFolderToObserver() { SmbFileDTO smbFileDTO = new SmbFileDTO(); smbFileDTO.setUrl(SHARE_URL); smbFileDTO.setIsDirectory(true); smbFileDTO.setStatus(SmbFileDTOStatus.FULL_DTO); smbService = new FakeSmbService(smbFileDTO); JobParams jobParams = new JobParams(connector, eventObserver,smbUtils, connectorInstance, smbService,smbRecordService, updater, jobFactory, SHARE_URL, null); retrievalJob = new SmbNewFolderRetrievalJob(jobParams); retrievalJob.execute(connector); assertThatEventsObservedBy(eventObserver).comparingRecordsUsing(es.connectorSmbFolder.url()) .containsOnly(addEvent(es.newConnectorSmbFolder(connectorInstance) .setUrl(SHARE_URL))); verify(updater, times(1)).updateDocumentOrFolder(any(SmbFileDTO.class), any(ConnectorDocument.class), anyString()); verify(smbRecordService, times(1)).getFolder(SHARE_URL); verify(smbRecordService, times(1)).updateResumeUrl(SHARE_URL); } @Test public void givenFailedDTOWhenExecutingThenSendFailedFolderToObserver() { SmbFileDTO smbFileDTO = new SmbFileDTO(); smbFileDTO.setUrl(SHARE_URL); smbFileDTO.setIsDirectory(true); smbFileDTO.setStatus(SmbFileDTOStatus.FAILED_DTO); smbService = new FakeSmbService(smbFileDTO); JobParams jobParams = new JobParams(connector, eventObserver,smbUtils, connectorInstance, smbService,smbRecordService, updater, jobFactory, SHARE_URL, null); retrievalJob = new SmbNewFolderRetrievalJob(jobParams); retrievalJob.execute(connector); assertThatEventsObservedBy(eventObserver).comparingRecordsUsing(es.connectorSmbFolder.url()) .containsOnly(addEvent(es.newConnectorSmbFolder(connectorInstance) .setUrl(SHARE_URL))); verify(updater, times(1)).updateFailedDocumentOrFolder(any(SmbFileDTO.class), any(ConnectorDocument.class), anyString()); verify(smbRecordService, times(1)).getFolder(anyString()); } @Test public void givenDeleteDTOWhenExecutingThenQueueDeleteJob() throws RecordServicesException { SmbFileDTO smbFileDTO = new SmbFileDTO(); smbFileDTO.setUrl(SHARE_URL); smbFileDTO.setStatus(SmbFileDTOStatus.DELETE_DTO); smbService = new FakeSmbService(smbFileDTO); JobParams jobParams = new JobParams(connector, eventObserver,smbUtils, connectorInstance, smbService,smbRecordService, updater, jobFactory, SHARE_URL, null); retrievalJob = new SmbNewFolderRetrievalJob(jobParams); retrievalJob.execute(connector); verify(connector, times(1)).queueJob(any(SmbDeleteJob.class)); } @After public void after() { eventObserver.close(); } }