Skip to content

Commit 8410c50

Browse files
Tests for Transactions
1 parent a73d413 commit 8410c50

2 files changed

Lines changed: 57 additions & 32 deletions

File tree

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/transactions/Account.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,19 @@
1717

1818
import java.math.BigDecimal;
1919

20-
import jakarta.persistence.GeneratedValue;
21-
import jakarta.persistence.GenerationType;
2220
import jakarta.persistence.Id;
2321

2422

2523
public class Account
2624
{
2725
@Id
28-
@GeneratedValue(strategy = GenerationType.AUTO)
2926
private int id;
3027

3128
private BigDecimal balance;
3229

33-
public Account(final BigDecimal balance)
30+
public Account(final int id, final BigDecimal balance)
3431
{
32+
this.id = id;
3533
this.balance = balance;
3634
}
3735

spring-data-eclipse-store/src/test/java/software/xdev/spring/data/eclipse/store/integration/isolated/tests/transactions/TransactionsTest.java

Lines changed: 55 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
import java.util.List;
2020

2121
import org.junit.jupiter.api.Assertions;
22+
import org.junit.jupiter.api.BeforeEach;
2223
import org.junit.jupiter.api.Test;
2324
import org.springframework.beans.factory.annotation.Autowired;
2425
import org.springframework.test.context.ContextConfiguration;
2526
import org.springframework.transaction.PlatformTransactionManager;
27+
import org.springframework.transaction.annotation.Transactional;
2628
import org.springframework.transaction.support.TransactionTemplate;
2729

2830
import software.xdev.spring.data.eclipse.store.integration.isolated.IsolatedTestAnnotations;
@@ -33,59 +35,84 @@
3335
class TransactionsTest
3436
{
3537
private final TransactionsTestConfiguration configuration;
36-
// single TransactionTemplate shared amongst all methods in this instance
37-
private final TransactionTemplate transactionTemplate;
38+
private final AccountRepository repository;
39+
private Account account1;
40+
private Account account2;
3841

3942
@Autowired
40-
public TransactionsTest(
41-
final TransactionsTestConfiguration configuration,
42-
final PlatformTransactionManager transactionManager)
43+
public TransactionsTest(final TransactionsTestConfiguration configuration, final AccountRepository repository)
4344
{
4445
this.configuration = configuration;
45-
this.transactionTemplate = new TransactionTemplate(transactionManager);
46+
this.repository = repository;
47+
}
48+
49+
@BeforeEach
50+
void initData()
51+
{
52+
this.account1 = new Account(1, BigDecimal.TEN);
53+
this.account2 = new Account(2, BigDecimal.ZERO);
54+
this.repository.saveAll(List.of(this.account1, this.account2));
4655
}
4756

4857
@Test
49-
void accountTransaction_Working(final AccountRepository repository)
58+
void accountTransaction_Working(final PlatformTransactionManager transactionManager)
5059
{
51-
final Account account1 = new Account(BigDecimal.TEN);
52-
final Account account2 = new Account(BigDecimal.ZERO);
53-
repository.saveAll(List.of(account1, account2));
54-
55-
this.transactionTemplate.execute(
60+
new TransactionTemplate(transactionManager).execute(
5661
status ->
5762
{
58-
account1.setBalance(account1.getBalance().subtract(BigDecimal.ONE));
59-
repository.save(account1);
63+
this.account1.setBalance(this.account1.getBalance().subtract(BigDecimal.ONE));
64+
this.repository.save(this.account1);
6065

61-
account2.setBalance(account2.getBalance().subtract(BigDecimal.ONE));
62-
repository.save(account2);
66+
this.account2.setBalance(this.account2.getBalance().subtract(BigDecimal.ONE));
67+
this.repository.save(this.account2);
6368
return null;
6469
}
6570
);
6671

67-
Assertions.assertEquals(BigDecimal.valueOf(9.0), repository.findById(account1.getId()).get().getBalance());
68-
Assertions.assertEquals(BigDecimal.ONE, repository.findById(account2.getId()).get().getBalance());
72+
Assertions.assertEquals(
73+
BigDecimal.valueOf(9.0),
74+
this.repository.findById(this.account1.getId()).get().getBalance());
75+
Assertions.assertEquals(BigDecimal.ONE, this.repository.findById(this.account2.getId()).get().getBalance());
6976
}
7077

7178
@Test
72-
void accountTransaction_UnexpectedError(final AccountRepository repository)
79+
void accountTransaction_UnexpectedError(final PlatformTransactionManager transactionManager)
7380
{
74-
final Account account1 = new Account(BigDecimal.TEN);
75-
final Account account2 = new Account(BigDecimal.ZERO);
76-
repository.saveAll(List.of(account1, account2));
77-
78-
this.transactionTemplate.execute(
81+
new TransactionTemplate(transactionManager).execute(
7982
status ->
8083
{
81-
account1.setBalance(account1.getBalance().subtract(BigDecimal.ONE));
82-
repository.save(account1);
84+
this.account1.setBalance(this.account1.getBalance().subtract(BigDecimal.ONE));
85+
this.repository.save(this.account1);
8386

8487
throw new RuntimeException("Unexpected error");
8588
}
8689
);
8790

88-
Assertions.assertEquals(BigDecimal.TEN, repository.findById(account1.getId()).get().getBalance());
89-
Assertions.assertEquals(BigDecimal.ZERO, repository.findById(account2.getId()).get().getBalance());
91+
Assertions.assertEquals(BigDecimal.TEN, this.repository.findById(this.account1.getId()).get().getBalance());
92+
Assertions.assertEquals(BigDecimal.ZERO, this.repository.findById(this.account2.getId()).get().getBalance());
93+
}
94+
95+
@Test
96+
void accountTransaction_UnexpectedError_Annotation()
97+
{
98+
try
99+
{
100+
this.makeSingleChangeAndThenThrowException();
101+
Assertions.fail("Somehow no exception was raised!");
102+
}
103+
catch(final RuntimeException e)
104+
{
105+
}
106+
Assertions.assertEquals(BigDecimal.TEN, this.repository.findById(this.account1.getId()).get().getBalance());
107+
Assertions.assertEquals(BigDecimal.ZERO, this.repository.findById(this.account2.getId()).get().getBalance());
108+
}
109+
110+
@Transactional
111+
void makeSingleChangeAndThenThrowException()
112+
{
113+
this.account1.setBalance(this.account1.getBalance().subtract(BigDecimal.ONE));
114+
this.repository.save(this.account1);
115+
116+
throw new RuntimeException("Unexpected error");
90117
}
91118
}

0 commit comments

Comments
 (0)