package de.unioninvestment.eai.portal.portlet.crud.scripting.model;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import groovy.lang.Closure;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.ui.Field;
public class ScriptFieldValidatorTest {
private ScriptFieldValidator validator;
@Mock
private ScriptTable tableMock;
@Mock
private Closure<Object> closureMock;
@Mock
private Field<?> fieldMock;
@Captor
private ArgumentCaptor<ScriptValidator> scriptValidatorCaptor;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
validator = new ScriptFieldValidator(tableMock, closureMock, "Test");
validator.apply(fieldMock);
verify(fieldMock).addValidator(scriptValidatorCaptor.capture());
}
@Test
public void shouldAcceptBooleanTrueFromClosure() {
when(closureMock.call(tableMock, "Test")).thenReturn(true);
scriptValidatorCaptor.getValue().validate("Test");
verify(closureMock).call(tableMock, "Test");
}
@Test
public void shouldRejectBooleanFalseFromClosureUsingConfiguredMessage() {
thrown.expect(InvalidValueException.class);
thrown.expectMessage("Test");
when(closureMock.call(tableMock, "Test")).thenReturn(false);
scriptValidatorCaptor.getValue().validate("Test");
verify(closureMock).call("Test");
}
@Test
@SuppressWarnings("unchecked")
public void shouldRejectBooleanFalseFromClosureUsingDefaultMessage() {
reset(fieldMock);
validator = new ScriptFieldValidator(tableMock, closureMock, null);
validator.apply(fieldMock);
verify(fieldMock).addValidator(scriptValidatorCaptor.capture());
thrown.expect(InvalidValueException.class);
thrown.expectMessage("#portlet.crud.error.validation.defaultValidatorMessage");
when(closureMock.call(tableMock, "Test")).thenReturn(false);
scriptValidatorCaptor.getValue().validate("Test");
verify(closureMock).call(tableMock, "Test");
}
@Test
public void shouldTreatExceptionFromClosureAsValidationError() {
thrown.expect(InvalidValueException.class);
thrown.expectMessage("Bla");
when(closureMock.call(tableMock, "Test")).thenThrow(new IllegalArgumentException("Bla"));
scriptValidatorCaptor.getValue().validate("Test");
}
}