/* * Copyright (c) 2010-2016. Axon Framework * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.axonframework.spring.messaging.unitofwork; import org.axonframework.common.transaction.Transaction; import org.junit.Before; import org.junit.Test; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import static org.mockito.Mockito.*; /** * @author Allard Buijze */ public class SpringTransactionManagerTest { private SpringTransactionManager testSubject; private PlatformTransactionManager transactionManager; private TransactionStatus underlyingTransactionStatus; @Before public void setUp() { underlyingTransactionStatus = mock(TransactionStatus.class); transactionManager = mock(PlatformTransactionManager.class); testSubject = new SpringTransactionManager(transactionManager); when(transactionManager.getTransaction(isA(TransactionDefinition.class))) .thenReturn(underlyingTransactionStatus); when(underlyingTransactionStatus.isNewTransaction()).thenReturn(true); } @Test public void testManageTransaction_CustomTransactionStatus() { testSubject = new SpringTransactionManager(transactionManager, mock(TransactionDefinition.class)); testSubject.startTransaction().commit(); verify(transactionManager).getTransaction(any()); verify(transactionManager).commit(underlyingTransactionStatus); } @Test public void testManageTransaction_DefaultTransactionStatus() { testSubject.startTransaction().commit(); verify(transactionManager).getTransaction(isA(DefaultTransactionDefinition.class)); verify(transactionManager).commit(underlyingTransactionStatus); } @Test public void testCommitTransaction_NoCommitOnInactiveTransaction() { Transaction transaction = testSubject.startTransaction(); when(underlyingTransactionStatus.isCompleted()).thenReturn(true); transaction.commit(); verify(transactionManager, never()).commit(underlyingTransactionStatus); } @Test public void testCommitTransaction_NoRollbackOnInactiveTransaction() { Transaction transaction = testSubject.startTransaction(); when(underlyingTransactionStatus.isCompleted()).thenReturn(true); transaction.rollback(); verify(transactionManager, never()).rollback(underlyingTransactionStatus); } @Test public void testCommitTransaction_NoCommitOnNestedTransaction() { Transaction transaction = testSubject.startTransaction(); when(underlyingTransactionStatus.isNewTransaction()).thenReturn(false); transaction.commit(); verify(transactionManager, never()).commit(underlyingTransactionStatus); } @Test public void testCommitTransaction_NoRollbackOnNestedTransaction() { Transaction transaction = testSubject.startTransaction(); when(underlyingTransactionStatus.isNewTransaction()).thenReturn(false); transaction.rollback(); verify(transactionManager, never()).rollback(underlyingTransactionStatus); } }