Skip to content

Commit a6b9462

Browse files
committed
#80 more tests
1 parent adb59da commit a6b9462

File tree

2 files changed

+71
-5
lines changed

2 files changed

+71
-5
lines changed

src/test/java/com/arangodb/springframework/transaction/ArangoTransactionManagerRepositoryTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import com.arangodb.springframework.ArangoTransactionalTestConfiguration;
55
import com.arangodb.springframework.repository.HumanBeingRepository;
66
import com.arangodb.springframework.testdata.HumanBeing;
7+
import org.junit.Before;
78
import org.junit.Test;
89
import org.springframework.beans.factory.annotation.Autowired;
910
import org.springframework.test.context.ContextConfiguration;
1011
import org.springframework.test.context.transaction.TestTransaction;
1112
import org.springframework.transaction.annotation.Transactional;
1213

1314
import static org.assertj.core.api.Assertions.assertThat;
14-
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1515

1616
@ContextConfiguration(classes = { ArangoTransactionalTestConfiguration.class })
1717
public class ArangoTransactionManagerRepositoryTest extends AbstractArangoTest {
@@ -21,16 +21,37 @@ public class ArangoTransactionManagerRepositoryTest extends AbstractArangoTest {
2121
@Autowired
2222
private HumanBeingRepository humanBeingRepository;
2323

24+
@Before
25+
public void setUp() {
26+
humanBeingRepository.deleteAll();
27+
}
28+
2429
@Test
2530
public void shouldWorkWithoutTransaction() {
26-
assertDoesNotThrow(() -> humanBeingRepository.save(anakin));
31+
humanBeingRepository.save(anakin);
32+
33+
assertThat(humanBeingRepository.findByNameAndSurname(anakin.getName(), anakin.getSurname())).isPresent();
2734
}
2835

2936
@Test
3037
@Transactional
3138
public void shouldWorkWithinTransaction() {
39+
humanBeingRepository.save(anakin);
40+
41+
assertThat(humanBeingRepository.findByNameAndSurname(anakin.getName(), anakin.getSurname())).isPresent();
42+
}
43+
44+
@Test
45+
@Transactional
46+
public void shouldWorkAfterTransaction() {
3247
TestTransaction.flagForCommit();
33-
assertDoesNotThrow(() -> humanBeingRepository.save(anakin));
48+
49+
humanBeingRepository.save(anakin);
50+
51+
assertThat(TestTransaction.isFlaggedForRollback()).isFalse();
52+
TestTransaction.end();
53+
54+
assertThat(humanBeingRepository.findByNameAndSurname(anakin.getName(), anakin.getSurname())).isPresent();
3455
}
3556

3657
@Test

src/test/java/com/arangodb/springframework/transaction/ArangoTransactionManagerTest.java

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.arangodb.DbName;
66
import com.arangodb.entity.StreamTransactionEntity;
77
import com.arangodb.model.StreamTransactionOptions;
8+
import com.arangodb.model.TransactionCollectionOptions;
89
import com.arangodb.springframework.core.ArangoOperations;
910
import com.arangodb.springframework.repository.query.QueryTransactionBridge;
1011
import org.junit.Before;
@@ -15,6 +16,7 @@
1516
import org.mockito.InjectMocks;
1617
import org.mockito.Mock;
1718
import org.mockito.junit.MockitoJUnitRunner;
19+
import org.springframework.transaction.IllegalTransactionStateException;
1820
import org.springframework.transaction.InvalidIsolationLevelException;
1921
import org.springframework.transaction.TransactionDefinition;
2022
import org.springframework.transaction.TransactionStatus;
@@ -26,9 +28,10 @@
2628
import java.util.function.Function;
2729

2830
import static org.hamcrest.MatcherAssert.assertThat;
29-
import static org.hamcrest.Matchers.is;
31+
import static org.hamcrest.Matchers.*;
3032
import static org.mockito.ArgumentMatchers.any;
3133
import static org.mockito.Mockito.*;
34+
import static org.springframework.beans.PropertyAccessorFactory.forDirectFieldAccess;
3235

3336
@RunWith(MockitoJUnitRunner.class)
3437
public class ArangoTransactionManagerTest {
@@ -72,7 +75,7 @@ public void getTransactionReturnsNewTransactionWithoutStreamTransaction() {
7275
}
7376

7477
@Test
75-
public void getTransactionReturnsTransactionCreatesStreamTransactionOnBridgeBeginCall() {
78+
public void getTransactionReturnsTransactionCreatesStreamTransactionWithAllCollectionsOnBridgeBeginCall() {
7679
DefaultTransactionAttribute definition = new DefaultTransactionAttribute();
7780
definition.setLabels(Collections.singleton("baz"));
7881
definition.setTimeout(20);
@@ -83,9 +86,47 @@ public void getTransactionReturnsTransactionCreatesStreamTransactionOnBridgeBegi
8386
.thenReturn(streamTransaction);
8487
verify(bridge).setCurrentTransaction(beginPassed.capture());
8588
beginPassed.getValue().apply(Arrays.asList("foo", "bar"));
89+
assertThat(transaction.isCompleted(), is(false));
8690
verify(database).beginStreamTransaction(optionsPassed.capture());
8791
assertThat(optionsPassed.getValue().getAllowImplicit(), is(true));
8892
assertThat(optionsPassed.getValue().getLockTimeout(), is(20));
93+
TransactionCollectionOptions collections = getCollections(optionsPassed.getValue());
94+
assertThat(collections.getRead(), nullValue());
95+
assertThat(collections.getExclusive(), nullValue());
96+
assertThat(collections.getWrite(), hasItems("baz", "foo", "bar"));
97+
}
98+
99+
@Test
100+
public void getTransactionWithMultipleBridgeCallsWorksForKnownCollections() {
101+
DefaultTransactionAttribute definition = new DefaultTransactionAttribute();
102+
definition.setLabels(Collections.singleton("baz"));
103+
definition.setTimeout(20);
104+
underTest.getTransaction(definition);
105+
when(streamTransaction.getId())
106+
.thenReturn("123");
107+
when(database.beginStreamTransaction(any()))
108+
.thenReturn(streamTransaction);
109+
verify(bridge).setCurrentTransaction(beginPassed.capture());
110+
beginPassed.getValue().apply(Collections.singletonList("foo"));
111+
beginPassed.getValue().apply(Arrays.asList("foo", "baz"));
112+
verify(database).beginStreamTransaction(optionsPassed.capture());
113+
TransactionCollectionOptions collections = getCollections(optionsPassed.getValue());
114+
assertThat(collections.getWrite(), hasItems("baz", "foo"));
115+
}
116+
117+
@Test(expected = IllegalTransactionStateException.class)
118+
public void getTransactionWithMultipleBridgeCallsFailsForAdditionalCollection() {
119+
DefaultTransactionAttribute definition = new DefaultTransactionAttribute();
120+
definition.setLabels(Collections.singleton("baz"));
121+
definition.setTimeout(20);
122+
underTest.getTransaction(definition);
123+
when(streamTransaction.getId())
124+
.thenReturn("123");
125+
when(database.beginStreamTransaction(any()))
126+
.thenReturn(streamTransaction);
127+
verify(bridge).setCurrentTransaction(beginPassed.capture());
128+
beginPassed.getValue().apply(Collections.singletonList("foo"));
129+
beginPassed.getValue().apply(Collections.singletonList("bar"));
89130
}
90131

91132
@Test(expected = InvalidIsolationLevelException.class)
@@ -94,4 +135,8 @@ public void getTransactionThrowsInvalidIsolationLevelExceptionForIsolationSerial
94135
definition.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE);
95136
underTest.getTransaction(definition);
96137
}
138+
139+
private TransactionCollectionOptions getCollections(StreamTransactionOptions options) {
140+
return (TransactionCollectionOptions) forDirectFieldAccess(options).getPropertyValue("collections");
141+
}
97142
}

0 commit comments

Comments
 (0)