package com.aconex.scrutineer; import com.aconex.scrutineer.javautil.ControlledTimeSource; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class CoincidentFilteredStreamVerifierListenerTest { @Mock private IdAndVersionStreamVerifierListener otherListener; @Mock private IdAndVersion idAndVersion, primaryIdAndVersion, secondaryIdAndVersion; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void testShouldDelegateOnMissingInPrimaryStream() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(otherListener); coincidentFilteredStreamVerifierListener.onMissingInPrimaryStream(idAndVersion); verify(otherListener).onMissingInPrimaryStream(idAndVersion); verify(otherListener, never()).onMissingInSecondaryStream(idAndVersion); } @Test public void testShouldDelegateOnMissingInSecondaryStream() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(otherListener); coincidentFilteredStreamVerifierListener.onMissingInSecondaryStream(idAndVersion); verify(otherListener).onMissingInSecondaryStream(idAndVersion); verify(otherListener, never()).onMissingInPrimaryStream(idAndVersion); } @Test public void shouldDelegateOnMismatchIfPrimaryTimestampIsBeforeStartOfRun() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(new ControlledTimeSource(30), otherListener); when(primaryIdAndVersion.getVersion()).thenReturn(10L); when(secondaryIdAndVersion.getVersion()).thenReturn(20L); coincidentFilteredStreamVerifierListener.onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); verify(otherListener).onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); } @Test public void shouldNotDelegateOnMismatchIfPrimaryTimestampIsAfterRunStarted() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(new ControlledTimeSource(5), otherListener); when(primaryIdAndVersion.getVersion()).thenReturn(10L); when(secondaryIdAndVersion.getVersion()).thenReturn(20L); coincidentFilteredStreamVerifierListener.onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); verify(otherListener, never()).onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); } @Test public void shouldNotDelegateOnMismatchIfSecondaryTimestampIsAfterRunStarted() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(new ControlledTimeSource(5), otherListener); when(primaryIdAndVersion.getVersion()).thenReturn(1L); when(secondaryIdAndVersion.getVersion()).thenReturn(20L); coincidentFilteredStreamVerifierListener.onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); verify(otherListener, never()).onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); } @Test public void shouldNotDelegateOnMismatchIfBothItemsTimestampsAreAfterRunStarted() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(new ControlledTimeSource(5), otherListener); when(primaryIdAndVersion.getVersion()).thenReturn(10L); when(secondaryIdAndVersion.getVersion()).thenReturn(20L); coincidentFilteredStreamVerifierListener.onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); verify(otherListener, never()).onVersionMisMatch(primaryIdAndVersion, secondaryIdAndVersion); } @Test public void shouldNotDelegateOnMissingInSecondaryIfItemIsAfterRunStarted() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(new ControlledTimeSource(5), otherListener); when(primaryIdAndVersion.getVersion()).thenReturn(10L); coincidentFilteredStreamVerifierListener.onMissingInSecondaryStream(primaryIdAndVersion); verify(otherListener, never()).onMissingInSecondaryStream(primaryIdAndVersion); } @Test public void shouldNotDelegateOnMissingInPrimaryIfItemIsAfterRunStarted() { CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(new ControlledTimeSource(5), otherListener); when(secondaryIdAndVersion.getVersion()).thenReturn(20L); coincidentFilteredStreamVerifierListener.onMissingInPrimaryStream(secondaryIdAndVersion); verify(otherListener, never()).onMissingInPrimaryStream(secondaryIdAndVersion); } @Test public void shouldNotDelegateWhenTimeMoves(){ ControlledTimeSource timeSource = new ControlledTimeSource(5); CoincidentFilteredStreamVerifierListener coincidentFilteredStreamVerifierListener = new CoincidentFilteredStreamVerifierListener(timeSource, otherListener); timeSource.setCurrentTime(25); when(secondaryIdAndVersion.getVersion()).thenReturn(20L); coincidentFilteredStreamVerifierListener.onMissingInPrimaryStream(secondaryIdAndVersion); verify(otherListener, never()).onMissingInPrimaryStream(secondaryIdAndVersion); } }