/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package project.latex.balloon.writer;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import project.latex.balloon.DataFolderResource;
import project.latex.balloon.TestFileDeleteHelper;
/**
*
* @author dgorst
*/
public class CameraFileWriterTest {
private DataFolderResource mockDataFolderResource;
private CameraFileWriter writer;
public CameraFileWriterTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
this.mockDataFolderResource = mock(DataFolderResource.class);
}
@After
public void tearDown() throws IOException {
if (this.writer != null) {
File imagesFolder = this.writer.getSavedImagesDirectory();
if (imagesFolder.exists()) {
TestFileDeleteHelper.delete(imagesFolder);
}
this.writer = null;
}
}
@Test(expected = IllegalArgumentException.class)
public void testCreatingWriterThrowsIfGivenNullImagesDir() {
new CameraFileWriter(null);
}
@Test
public void testCreatingWriterCreatesDirectoryForSavedImages() {
File baseDirectory = new File(System.getProperty("user.dir"));
when(mockDataFolderResource.getDataFolder()).thenReturn(baseDirectory);
writer = new CameraFileWriter(mockDataFolderResource);
File savedImagesDirectory = writer.getSavedImagesDirectory();
assertTrue(savedImagesDirectory.exists());
assertEquals(CameraFileWriter.imagesDirectoryName, savedImagesDirectory.getName());
}
@Test(expected = IllegalArgumentException.class)
public void testWriterThrowsIfGivenNullDataObject() throws DataWriteFailedException {
File baseDirectory = new File(System.getProperty("user.dir"));
when(mockDataFolderResource.getDataFolder()).thenReturn(baseDirectory);
writer = new CameraFileWriter(mockDataFolderResource);
writer.writeImageFiles(null);
}
@Test
public void testWriterDoesNothingIfGivenDataObjectWithNoImages() throws DataWriteFailedException {
File baseDirectory = new File(System.getProperty("user.dir"));
when(mockDataFolderResource.getDataFolder()).thenReturn(baseDirectory);
writer = new CameraFileWriter(mockDataFolderResource);
writer.writeImageFiles(new ArrayList<File>());
File[] filesInImagesDir = writer.getSavedImagesDirectory().listFiles();
assertEquals(0, filesInImagesDir.length);
}
@Test
public void testWriterMovesFileIntoSavedImagesDirectory() {
try {
File baseDirectory = new File(System.getProperty("user.dir"));
when(mockDataFolderResource.getDataFolder()).thenReturn(baseDirectory);
writer = new CameraFileWriter(mockDataFolderResource);
File emptyImage = new File("test.jpg");
emptyImage.createNewFile();
List<File> imagePaths = new ArrayList<>();
imagePaths.add(emptyImage);
writer.writeImageFiles(imagePaths);
File expectedFile = new File(writer.getSavedImagesDirectory().getPath() + File.separator + "test.jpg");
assertTrue(expectedFile.exists());
assertFalse(emptyImage.exists());
} catch (IOException | DataWriteFailedException ex) {
fail(ex.getMessage());
}
}
}