/*
* 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.ssdv;
import java.io.File;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
*
* @author will
*/
public class LastModifiedSsdvEncoderControllerTest {
private SsdvImageSource mockPiCamImageSource;
private DirectorySsdvImageSource mockEncodedImageSource;
private DefaultSsdvEncoder mockSsdvEncoder;
private File mockLastModifiedImage;
private File mockEncodedImage;
File mockEncodedImagesDirectory;
private LastModifiedSsdvEncoderController ssdvEncoderController;
@Before
public void setUp() {
this.mockPiCamImageSource = mock(SsdvImageSource.class);
this.mockEncodedImageSource = mock(DirectorySsdvImageSource.class);
this.mockSsdvEncoder = mock(DefaultSsdvEncoder.class);
ssdvEncoderController = new LastModifiedSsdvEncoderController(
mockPiCamImageSource, mockEncodedImageSource, mockSsdvEncoder);
// Mock encoded image directory.
File[] mockEncodedImageDirectoryContents = new File[1];
mockEncodedImage = mock(File.class);
mockEncodedImageDirectoryContents[0] = mockEncodedImage;
mockEncodedImagesDirectory = mock(File.class);
when(mockEncodedImagesDirectory.getPath()).thenReturn("path");
when(mockEncodedImagesDirectory.listFiles()).thenReturn(mockEncodedImageDirectoryContents);
when(mockEncodedImageSource.getImagesDirectory()).thenReturn(mockEncodedImagesDirectory);
// Mock last modified image.
mockLastModifiedImage = mock(File.class);
when(mockLastModifiedImage.getName()).thenReturn("name");
when(mockPiCamImageSource.getLastModifiedImage()).thenReturn(mockLastModifiedImage);
}
@Test
public void getEncodedImageFile_shouldCallSsdvEncoderWithCorrectArguments() {
ssdvEncoderController.getEncodedImageFile();
verify(mockSsdvEncoder).encode(anyString(), eq(0), eq(mockLastModifiedImage), eq("path/name"));
}
@Test
public void getEncodedImageFile_eachCallToSsdvEncoderShouldIncrementImageId() {
ssdvEncoderController.getEncodedImageFile();
verify(mockSsdvEncoder).encode(anyString(), eq(0), any(File.class), anyString());
ssdvEncoderController.getEncodedImageFile();
verify(mockSsdvEncoder).encode(anyString(), eq(1), any(File.class), anyString());
ssdvEncoderController.getEncodedImageFile();
verify(mockSsdvEncoder).encode(anyString(), eq(2), any(File.class), anyString());
}
@Test
public void getEncodedImageFile_shouldReturnImageFileIfSingleEncodedImageFound() {
File encodedImage = ssdvEncoderController.getEncodedImageFile();
assertEquals(mockEncodedImage, encodedImage);
}
@Test
public void getEncodedImageFile_shouldReturnNullIfMultipleEncodedImagesFound() {
when(mockEncodedImagesDirectory.listFiles()).thenReturn(new File[2]);
File encodedImage = ssdvEncoderController.getEncodedImageFile();
assertNull(encodedImage);
}
@Test
public void getEncodedImageFile_shouldReturnNullIfNoEncodedImagesFound() {
when(mockEncodedImagesDirectory.listFiles()).thenReturn(new File[0]);
File encodedImage = ssdvEncoderController.getEncodedImageFile();
assertNull(encodedImage);
}
}