Skip to content

Commit 1eefdd4

Browse files
committed
Improve test coverage
1 parent 7d0bf17 commit 1eefdd4

File tree

2 files changed

+62
-31
lines changed

2 files changed

+62
-31
lines changed

src/main/java/com/example/paul/services/AccountService.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,21 @@
44
import com.example.paul.repositories.AccountRepository;
55
import com.example.paul.repositories.TransactionRepository;
66
import com.example.paul.utils.CodeGenerator;
7-
import org.springframework.beans.factory.annotation.Autowired;
87
import org.springframework.stereotype.Service;
98

109
import java.util.Optional;
1110

1211
@Service
1312
public class AccountService {
1413

15-
@Autowired
16-
private AccountRepository accountRepository;
14+
private final AccountRepository accountRepository;
15+
private final TransactionRepository transactionRepository;
1716

18-
@Autowired
19-
private TransactionRepository transactionRepository;
17+
public AccountService(AccountRepository accountRepository,
18+
TransactionRepository transactionRepository) {
19+
this.accountRepository = accountRepository;
20+
this.transactionRepository = transactionRepository;
21+
}
2022

2123
public Account getAccount(String sortCode, String accountNumber) {
2224
Optional<Account> account = accountRepository
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,87 @@
11
package com.example.paul.unit;
22

33
import com.example.paul.models.Account;
4+
import com.example.paul.models.Transaction;
45
import com.example.paul.repositories.AccountRepository;
56
import com.example.paul.repositories.TransactionRepository;
67
import com.example.paul.services.AccountService;
78
import org.junit.jupiter.api.BeforeEach;
89
import org.junit.jupiter.api.Test;
910
import org.junit.jupiter.api.extension.ExtendWith;
10-
import org.springframework.beans.factory.annotation.Autowired;
11-
import org.springframework.boot.test.context.TestConfiguration;
12-
import org.springframework.boot.test.mock.mockito.MockBean;
13-
import org.springframework.context.annotation.Bean;
14-
import org.springframework.test.context.junit.jupiter.SpringExtension;
11+
import org.mockito.Mock;
12+
import org.mockito.junit.jupiter.MockitoExtension;
1513

14+
import java.util.List;
1615
import java.util.Optional;
1716

1817
import static org.assertj.core.api.Assertions.assertThat;
1918
import static org.mockito.Mockito.when;
2019

21-
@ExtendWith(SpringExtension.class)
20+
@ExtendWith(MockitoExtension.class)
2221
class AccountServiceTest {
2322

24-
@TestConfiguration
25-
static class AccountServiceTestContextConfiguration {
26-
27-
@Bean
28-
public AccountService accountService() {
29-
return new AccountService();
30-
}
31-
}
32-
33-
@Autowired
34-
private AccountService accountService;
35-
36-
@MockBean
23+
@Mock
3724
private AccountRepository accountRepository;
38-
39-
@MockBean
25+
@Mock
4026
private TransactionRepository transactionRepository;
4127

28+
public AccountService underTest;
29+
4230
@BeforeEach
4331
void setUp() {
32+
underTest = new AccountService(accountRepository, transactionRepository);
33+
}
34+
35+
@Test
36+
void shouldReturnAccountBySortCodeAndAccountNumberWhenPresent() {
4437
var account = new Account(1L, "53-68-92", "78901234", 10.1, "Some Bank", "John");
38+
when(accountRepository.findBySortCodeAndAccountNumber("53-68-92", "78901234"))
39+
.thenReturn(Optional.of(account));
40+
41+
var result = underTest.getAccount("53-68-92", "78901234");
4542

43+
assertThat(result.getOwnerName()).isEqualTo(account.getOwnerName());
44+
assertThat(result.getSortCode()).isEqualTo(account.getSortCode());
45+
assertThat(result.getAccountNumber()).isEqualTo(account.getAccountNumber());
46+
}
47+
48+
@Test
49+
void shouldReturnTransactionsForAccount() {
50+
var account = new Account(1L, "53-68-92", "78901234", 10.1, "Some Bank", "John");
4651
when(accountRepository.findBySortCodeAndAccountNumber("53-68-92", "78901234"))
4752
.thenReturn(Optional.of(account));
53+
var transaction1 = new Transaction();
54+
var transaction2 = new Transaction();
55+
transaction1.setReference("a");
56+
transaction2.setReference("b");
57+
when(transactionRepository.findBySourceAccountIdOrderByInitiationDate(account.getId()))
58+
.thenReturn(List.of(transaction1, transaction2));
59+
60+
var result = underTest.getAccount("53-68-92", "78901234");
61+
62+
assertThat(result.getTransactions()).hasSize(2);
63+
assertThat(result.getTransactions()).extracting("reference").containsExactly("a", "b");
64+
}
65+
66+
@Test
67+
void shouldReturnNullWhenAccountBySortCodeAndAccountNotFound() {
68+
when(accountRepository.findBySortCodeAndAccountNumber("53-68-92", "78901234"))
69+
.thenReturn(Optional.empty());
70+
71+
var result = underTest.getAccount("53-68-92", "78901234");
72+
73+
assertThat(result).isNull();
4874
}
4975

5076
@Test
51-
void whenAccountDetails_thenAccountShouldBeFound() {
52-
var account = accountService.getAccount("53-68-92", "78901234");
77+
void shouldReturnAccountByAccountNumberWhenPresent() {
78+
}
5379

54-
assertThat(account.getOwnerName()).isEqualTo("John");
55-
assertThat(account.getSortCode()).isEqualTo("53-68-92");
56-
assertThat(account.getAccountNumber()).isEqualTo("78901234");
80+
@Test
81+
void shouldReturnNullWhenAccountByAccountNotFound() {
82+
}
83+
84+
@Test
85+
void shouldCreateAccount() {
5786
}
5887
}

0 commit comments

Comments
 (0)