package org.molgenis.file.ingest; import org.molgenis.data.FileRepositoryCollectionFactory; import org.molgenis.data.importer.EntityImportReport; import org.molgenis.data.importer.ImportService; import org.molgenis.data.importer.ImportServiceFactory; import org.molgenis.data.jobs.Progress; import org.molgenis.data.meta.model.EntityType; import org.molgenis.data.support.FileRepositoryCollection; import org.molgenis.file.ingest.execution.FileIngester; import org.molgenis.file.ingest.execution.FileStoreDownload; import org.molgenis.file.ingest.meta.FileIngest; import org.molgenis.file.ingest.meta.FileIngestFactory; import org.molgenis.file.ingest.meta.FileIngestMetaData; import org.molgenis.file.model.FileMeta; import org.molgenis.file.model.FileMetaFactory; import org.molgenis.test.data.AbstractMolgenisSpringTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.molgenis.data.DatabaseAction.ADD_UPDATE_EXISTING; import static org.molgenis.data.meta.DefaultPackage.PACKAGE_DEFAULT; @ContextConfiguration(classes = { FileIngesterTest.Config.class }) public class FileIngesterTest extends AbstractMolgenisSpringTest { @Autowired private FileIngester fileIngester; @Autowired private FileStoreDownload fileStoreDownloadMock; @Autowired private ImportServiceFactory importServiceFactoryMock; @Autowired private FileRepositoryCollectionFactory fileRepositoryCollectionFactoryMock; @Autowired private FileIngestFactory fileIngestFactory; private ImportService importServiceMock; private FileRepositoryCollection fileRepositoryCollectionMock; private static final String entityName = "test"; private static final String url = "http://www.test.nl/test"; private static final String identifier = "identifier"; private final File f = new File(""); private final EntityImportReport report = new EntityImportReport(); private Progress progress; @BeforeMethod public void setUp() { fileRepositoryCollectionMock = mock(FileRepositoryCollection.class); importServiceMock = mock(ImportService.class); progress = mock(Progress.class); EntityType entityType = when(mock(EntityType.class).getName()).thenReturn("target").getMock(); FileIngest fileIngest = fileIngestFactory.create(); fileIngest.set(FileIngestMetaData.ENTITY_META_DATA, entityType); fileIngest.set(FileIngestMetaData.URL, url); fileIngest.set(FileIngestMetaData.LOADER, "CSV"); } @Test public void ingest() { when(fileStoreDownloadMock.downloadFile(url, identifier, entityName + ".csv")).thenReturn(f); when(fileRepositoryCollectionFactoryMock.createFileRepositoryCollection(f)) .thenReturn(fileRepositoryCollectionMock); when(importServiceFactoryMock.getImportService(f, fileRepositoryCollectionMock)).thenReturn(importServiceMock); when(importServiceMock.doImport(fileRepositoryCollectionMock, ADD_UPDATE_EXISTING, PACKAGE_DEFAULT)) .thenReturn(report); fileIngester.ingest(entityName, url, "CSV", identifier, progress, "a@b.com,x@y.com"); } @Test(expectedExceptions = RuntimeException.class) public void ingestError() { Exception e = new RuntimeException(); when(fileStoreDownloadMock.downloadFile(url, identifier, entityName + ".csv")).thenThrow(e); fileIngester.ingest(entityName, url, "CSV", identifier, progress, "a@b.com,x@y.com"); } @Configuration @ComponentScan({ "org.molgenis.file.ingest.meta", "org.molgenis.security.owned", "org.molgenis.file.model", "org.molgenis.data.jobs.model", "org.molgenis.auth" }) public static class Config { @Bean public FileIngester fileIngester() { return new FileIngester(fileStoreDownload(), importServiceFactory(), fileRepositoryCollectionFactory(), fileMetaFactory()); } @Bean public FileStoreDownload fileStoreDownload() { return mock(FileStoreDownload.class); } @Bean public ImportServiceFactory importServiceFactory() { return mock(ImportServiceFactory.class); } @Bean public FileRepositoryCollectionFactory fileRepositoryCollectionFactory() { return mock(FileRepositoryCollectionFactory.class); } @Bean public FileMetaFactory fileMetaFactory() { FileMetaFactory fileMetaFactory = mock(FileMetaFactory.class); when(fileMetaFactory.create(anyString())).thenReturn(mock(FileMeta.class)); return fileMetaFactory; } } }