package de.unigoettingen.sub.commons.ocr.web; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.startsWith; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.File; import org.junit.Before; import org.junit.Test; import de.unigoettingen.sub.ocr.controller.OcrEngineStarter; import de.unigoettingen.sub.ocr.controller.OcrParameters; import de.unigoettingen.sub.ocr.controller.Validator; public class OcrStarterTest { private OcrStarter ocrStarter; private LogSelector logSelectorMock; private OcrEngineStarter engineStarterMock; private Validator validatorMock; @Before public void before() throws Exception { engineStarterMock = mock(OcrEngineStarter.class); logSelectorMock = mock(LogSelector.class); validatorMock = mock(Validator.class); ocrStarter = new OcrStarter(); ocrStarter.setOcrEngineStarter(engineStarterMock); ocrStarter.setLogSelector(logSelectorMock); ocrStarter.setValidator(validatorMock); when(validatorMock.validateParameters(any(OcrParameters.class))).thenReturn("OK"); } @Test public void shouldStartEngineWithParams() throws InterruptedException { OcrParameters param = validParams(); ocrStarter.setParameters(param); ocrStarter.run(); verify(engineStarterMock).startOcrWithParams(param); } @Test public void checkingValidParams() { OcrParameters param = validParams(); ocrStarter.setParameters(param); String validation = ocrStarter.checkParameters(); assertEquals("validation message", "OK", validation); } @Test public void shouldKeepMessageFromValidator() { when(validatorMock.validateParameters(any(OcrParameters.class))).thenReturn("Unknown Error."); OcrParameters param = validParams(); ocrStarter.setParameters(param); String validation = ocrStarter.checkParameters(); assertThat(validation, containsString("Unknown Error.")); } @Test public void checkingParamsWithoutEmail() { OcrParameters param = validParams(); param.props.setProperty("email", ""); ocrStarter.setParameters(param); String validation = ocrStarter.checkParameters(); assertThat(validation, containsString("Keine Benachrichtigungsadresse")); } @Test public void checkingParamsInvalidEmail() { OcrParameters param = validParams(); param.props.setProperty("email", "invalid"); ocrStarter.setParameters(param); String validation = ocrStarter.checkParameters(); assertThat(validation, containsString("Inkorrekte Benachrichtigungsadresse")); } @Test public void shouldLogToFile() { OcrParameters param = validParams(); ocrStarter.setParameters(param); ocrStarter.run(); verify(logSelectorMock).logToFile(startsWith("/tmp/log-")); } private OcrParameters validParams() { OcrParameters param = new OcrParameters(); param.inputFolder = new File("src/test/resources/testInputs").getAbsolutePath(); param.ocrEngine = "abbyy"; param.inputLanguages = new String[]{"de"}; param.inputTextType = "NORMAL"; param.outputFormats = new String[]{"PDF"}; param.outputFolder = "/tmp"; param.inputFormats = new String[]{"tif"}; param.props.setProperty("email", "test@test.com"); return param; } }