package org.neo4j.smack.pipeline.core;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Test;
import org.neo4j.smack.pipeline.core.WorkTransactionPreparer;
import org.neo4j.smack.pipeline.core.event.TransactionWork;
import org.neo4j.smack.pipeline.event.WorkTransactionMode;
public class TestWorkTransactionPreparer
{
@Test
public void shouldSetNoTransactionIfNoTxIdAndNotTransactional()
{
WorkTransactionPreparer prepper = new WorkTransactionPreparer();
TransactionWork txWork = mock(TransactionWork.class);
when(txWork.getTransactionId()).thenReturn(-1l);
when(txWork.isTransactional()).thenReturn(false);
prepper.prepare(txWork);
verify(txWork).setTransactionMode(WorkTransactionMode.NO_TRANSACTION);
// TODO: Is it necessary that it generates a tx id for non-transactional work?
verify(txWork).setTransactionId(0l);
}
@Test
public void shouldSetOpenTransactionToTransactionalWorkWithTxId()
{
WorkTransactionPreparer prepper = new WorkTransactionPreparer();
TransactionWork txWork = mock(TransactionWork.class);
when(txWork.getTransactionId()).thenReturn(1l);
when(txWork.isTransactional()).thenReturn(true);
prepper.prepare(txWork);
verify(txWork).setTransactionMode(WorkTransactionMode.OPEN_TRANSACTION);
verify(txWork, never()).setTransactionId(anyLong());
}
@Test
public void shouldSetSingleTransactionToTransactionalWorkWithNoTxId()
{
WorkTransactionPreparer prepper = new WorkTransactionPreparer();
TransactionWork txWork = mock(TransactionWork.class);
when(txWork.getTransactionId()).thenReturn(-1l);
when(txWork.isTransactional()).thenReturn(true);
prepper.prepare(txWork);
verify(txWork).setTransactionMode(WorkTransactionMode.SINGLE_TRANSACTION);
verify(txWork).setTransactionId(anyLong());
}
}