package com.bitmonlab.osiris.api.map.dao.impl;
import java.io.InputStream;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.data.mongodb.core.MongoTemplate;
import com.bitmonlab.osiris.api.core.map.dao.impl.MapFileRepositoryCustomImpl;
import com.bitmonlab.osiris.api.core.map.exceptions.MapFileNotExistsException;
import com.mongodb.DB;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
@RunWith(PowerMockRunner.class)
@PrepareForTest({MapFileRepositoryCustomImpl.class,GridFS.class})
public class MapFileRepositoryCustoImplTest {
private String collectionNameMap = "files_map";
@InjectMocks
private MapFileRepositoryCustomImpl mapFileRepositoryCustomImpl;
@Mock
private MongoTemplate mongoTemplate;
private String idApp = "appIDTest";
@Mock
private DB db;
@Mock
private GridFS gridFS;
@Mock
private GridFSDBFile gridFSFile;
@Mock
private InputStream inputStream;
@Test
public void getFileMapByAppId() throws Exception{
//Fixture
Mockito.when(mongoTemplate.getDb()).thenReturn(db);
PowerMockito.whenNew(GridFS.class).withArguments(db,collectionNameMap).thenReturn(gridFS);
Mockito.when(gridFS.findOne(idApp)).thenReturn(gridFSFile);
Mockito.when(gridFSFile.getInputStream()).thenReturn(inputStream);
// Experimentations
InputStream response=mapFileRepositoryCustomImpl.getMapFileByAppId(idApp);
// Expectations
Mockito.verify(gridFS).findOne(idApp);
Mockito.verify(gridFSFile).getInputStream();
Assert.assertEquals("File .map must be the same",inputStream,response);
}
@Test(expected=MapFileNotExistsException.class)
public void getFileMapByAppIdWithoutMapFile() throws Exception{
//Fixture
Mockito.when(mongoTemplate.getDb()).thenReturn(db);
PowerMockito.whenNew(GridFS.class).withArguments(db,collectionNameMap).thenReturn(gridFS);
Mockito.when(gridFS.findOne(idApp)).thenReturn(null);
// Experimentations
mapFileRepositoryCustomImpl.getMapFileByAppId(idApp);
// Expectations
Mockito.verify(gridFS).findOne(idApp);
}
}