package dbfit.diff; import dbfit.util.MatchResult; import dbfit.util.DataCell; import dbfit.util.DiffListenerAdapter; import dbfit.util.DiffHandler; import static dbfit.util.MatchStatus.*; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.assertThat; import static org.hamcrest.Matchers.*; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.Mock; import org.mockito.ArgumentCaptor; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class DataCellDiffTest { @Mock private DiffHandler handler; @Mock private DataCell c1; @Mock private DataCell c2; private ArgumentCaptor<MatchResult> captor = ArgumentCaptor.forClass(MatchResult.class); private MatchResult getResult() { return captor.getValue(); } @SuppressWarnings("unchecked") private void runDiff() { DataCellDiff diff = new DataCellDiff(); diff.addListener(new DiffListenerAdapter(handler)); diff.diff(c1, c2); verify(handler).endCell(captor.capture()); } @Test public void diffOfDifferentCellsShouldEmitWrongEvent() { when(c1.equalTo(c2)).thenReturn(false); runDiff(); assertThat(getResult().getStatus(), is(WRONG)); } @Test public void diffOfEqualCellsShouldEmitSuccessEvent() { when(c1.equalTo(c2)).thenReturn(true); runDiff(); assertThat(getResult().getStatus(), is(SUCCESS)); } @Test public void diffWithNullSecondShouldEmitMissingEvent() { c2 = null; runDiff(); assertThat(getResult().getStatus(), is(MISSING)); } @Test public void diffWithNullFirstShouldEmitSurplusEvent() { c1 = null; runDiff(); assertThat(getResult().getStatus(), is(SURPLUS)); } @Test public void diffWithBothNullsShouldEmitExceptionEvent() { c1 = null; c2 = null; runDiff(); assertThat(getResult().getStatus(), is(EXCEPTION)); assertThat(getResult().getException(), instanceOf(IllegalArgumentException.class)); } @Test public void exceptionOnComparisonShouldBeEmittedAsExceptionEvent() { Exception ex = new RuntimeException("Cruel World!"); when(c1.equalTo(c2)).thenThrow(ex); runDiff(); assertThat(getResult().getStatus(), is(EXCEPTION)); assertThat(captor.getValue().getException(), is(ex)); } }