package com.aconex.scrutineer;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Arrays;
import java.util.List;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class DeletionVerifierTest {
@Mock
private IdAndVersionStreamVerifierListener listener;
@Mock
private IdAndVersionStream primaryDeletedStream, secondaryStream;
@Mock
private ExistenceChecker existenceChecker;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void shouldConfirmADeleteWasMissed() {
IdAndVersion expectedNotDeletedIdAndVersion = new LongIdAndVersion(2, 2);
IdAndVersion expectedDeletedIdAndVersion = new LongIdAndVersion(1, 1);
List<IdAndVersion> longIdAndVersions = Arrays.asList(expectedDeletedIdAndVersion, expectedNotDeletedIdAndVersion);
when(primaryDeletedStream.iterator()).thenReturn(longIdAndVersions.iterator());
when(existenceChecker.exists(expectedDeletedIdAndVersion)).thenReturn(false);
when(existenceChecker.exists(expectedNotDeletedIdAndVersion)).thenReturn(true);
DeletionVerifier deletionVerifier = new DeletionVerifier(primaryDeletedStream, existenceChecker, listener);
deletionVerifier.verify();
verify(existenceChecker, times(2)).exists(any(IdAndVersion.class));
verify(primaryDeletedStream).close();
verify(listener).onMissingInPrimaryStream(expectedNotDeletedIdAndVersion);
}
}