package de.unigoettingen.sub.ocr.controller;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.hamcrest.Matchers.containsString;
import java.util.Properties;
import org.junit.Before;
import org.junit.Test;
import de.unigoettingen.sub.commons.ocr.util.BeanProvider;
import de.unigoettingen.sub.commons.ocr.util.FileAccess;
public class ValidatorTest {
private BeanProvider beanProviderMock;
private FileAccess fileAccessMock;
private Validator validatorSut;
@Before
public void beforeEachTest() {
beanProviderMock = mock(BeanProvider.class);
fileAccessMock = mock(FileAccess.class);
when(beanProviderMock.getFileAccess()).thenReturn(fileAccessMock);
validatorSut = new Validator();
validatorSut.setBeanProvider(beanProviderMock);
}
@Test
public void happyPath() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
String validation = validatorSut.validateParameters(params);
verify(fileAccessMock).isReadableFolder("/tmp/input");
assertEquals("OK", validation);
}
@Test
public void shouldNotFindInputFolder() {
when(fileAccessMock.isReadableFolder("/tmp/input")).thenReturn(false);
when(fileAccessMock.isWritableFolder("/tmp/output")).thenReturn(true);
OcrParameters params = validParams();
String validation = validatorSut.validateParameters(params);
assertThat(validation, containsString("Input folder not found"));
}
@Test
public void shouldNotFindOutputFolder() {
when(fileAccessMock.isReadableFolder("/tmp/input")).thenReturn(true);
when(fileAccessMock.isWritableFolder("/tmp/output")).thenReturn(false);
OcrParameters params = validParams();
String validation = validatorSut.validateParameters(params);
assertThat(validation, containsString("Output folder not found or it is not writable"));
}
@Test
public void shouldDetectMissingInputFormats() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
params.inputFormats = new String[]{};
String validation = validatorSut.validateParameters(params);
assertEquals("No input formats. ", validation);
}
@Test
public void shouldDetectMissingInputTextType() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
params.inputTextType = " ";
String validation = validatorSut.validateParameters(params);
assertEquals("No input text type. ", validation);
}
@Test
public void shouldDetectMissingLanguages() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
params.inputLanguages = null;
String validation = validatorSut.validateParameters(params);
assertEquals("No input languages. ", validation);
}
@Test
public void shouldDetectMissingOutputFormats() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
params.outputFormats = null;
String validation = validatorSut.validateParameters(params);
assertEquals("No output formats. ", validation);
}
@Test
public void shouldDetectMissingPriority() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
params.priority = "";
String validation = validatorSut.validateParameters(params);
assertEquals("No priority. ", validation);
}
@Test
public void shouldDetectMissingOcrEngine() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
params.ocrEngine = null;
String validation = validatorSut.validateParameters(params);
assertEquals("No OCR engine. ", validation);
}
@Test
public void shouldDetectNullOptions() {
whenAskedThenFindFolders();
OcrParameters params = validParams();
params.props = null;
String validation = validatorSut.validateParameters(params);
assertEquals("Properties may not be null. ", validation);
}
private void whenAskedThenFindFolders() {
when(fileAccessMock.isReadableFolder("/tmp/input")).thenReturn(true);
when(fileAccessMock.isWritableFolder("/tmp/output")).thenReturn(true);
}
private OcrParameters validParams() {
OcrParameters params = new OcrParameters();
params.inputFolder = "/tmp/input";
params.outputFolder = "/tmp/output";
params.inputFormats = new String[]{"tif", "gif"};
params.inputTextType = "normal";
params.inputLanguages = new String[]{"de", "en"};
params.outputFormats = new String[]{"pdf", "xml"};
params.priority = "0";
params.ocrEngine = "abbyy";
params.props = new Properties();
return params;
}
}