package de.unioninvestment.eai.portal.support.scripting;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
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 de.unioninvestment.eai.portal.portlet.crud.domain.model.ContainerRow;
import de.unioninvestment.eai.portal.portlet.crud.scripting.model.ScriptRow;
public class ScriptCustomFilterMatcherTest {
@Mock
private Closure<Object> closureMock;
@Mock
private ContainerRow rowMock;
@Captor
private ArgumentCaptor<ScriptRow> scriptRowCaptor;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test(expected = IllegalArgumentException.class)
public void shouldThrowExceptionOnMissingClosure() {
new ScriptCustomFilterMatcher(null);
}
@Test
public void shouldDelegateMatchingToClosure() {
ScriptCustomFilterMatcher matcher = new ScriptCustomFilterMatcher(
closureMock);
when(closureMock.call(scriptRowCaptor.capture())).thenReturn(true);
assertThat(matcher.matches(rowMock), is(true));
}
@Test
public void shouldWriteHelpfulMessagOnNPE() {
ScriptCustomFilterMatcher matcher = new ScriptCustomFilterMatcher(
closureMock);
when(closureMock.call(scriptRowCaptor.capture())).thenReturn(null);
thrown.expect(NullPointerException.class);
thrown.expectMessage("CustomFilter Closure has to return true or false, not null");
matcher.matches(rowMock);
}
}