package de.is24.infrastructure.gridfs.http.gridfs; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBObject; import com.mongodb.gridfs.GridFS; import com.mongodb.gridfs.GridFSDBFile; import org.junit.Before; import org.junit.Test; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.gridfs.GridFsTemplate; import java.util.Arrays; import java.util.Date; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.greaterThanOrEqualTo; import static org.hamcrest.Matchers.is; import static org.mockito.Matchers.anyObject; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class GridFsFileStorageServiceTest { private GridFS gridFs; private GridFsTemplate gridFsTemplate; private GridFsFileStorageService service; private MongoTemplate mongoTemplate; private DBCollection filesCollection; @Before public void setUp() throws Exception { gridFs = mock(GridFS.class); gridFsTemplate = mock(GridFsTemplate.class); mongoTemplate = mock(MongoTemplate.class); filesCollection = mock(DBCollection.class); when(mongoTemplate.getCollection(eq("fs.files"))).thenReturn(filesCollection); service = new GridFsFileStorageService(gridFs, gridFsTemplate, mongoTemplate); } @Test public void createIndices() throws Exception { verify(filesCollection).createIndex(eq(new BasicDBObject("metadata.repo", 1))); verify(filesCollection).createIndex(eq(new BasicDBObject("metadata.arch", 1))); } @Test public void waitAfterDeletionOfLargeFile() throws Exception { GridFSDBFile file = mock(GridFSDBFile.class); when(file.getFilename()).thenReturn("theFilename"); when(file.getLength()).thenReturn(6 * 1024 * 1024L); when(gridFsTemplate.find((Query) anyObject())).thenReturn(Arrays.asList(file)); final long start = System.currentTimeMillis(); service.removeFilesMarkedAsDeletedBefore(new Date()); final long duration = System.currentTimeMillis() - start; assertThat(duration, is(greaterThanOrEqualTo(400L))); } @Test public void shouldSetRepo() throws Exception { DBObject dbObject = mock(DBObject.class); GridFSDBFile dbFile = mock(GridFSDBFile.class); when(dbFile.getFilename()).thenReturn("src-repo/arch/file.rpm"); when(dbFile.getMetaData()).thenReturn(dbObject); service.moveTo(new GridFsFileStorageItem(dbFile), "dest-repo"); verify(dbFile).put(eq("filename"), eq("dest-repo/arch/file.rpm")); verify(dbObject).put(eq("repo"), eq("dest-repo")); verify(dbFile).save(); } //TODO: @Test public void setCorrectContentType() throws Exception { } @Test public void overrideExistingFile() throws Exception { } }