-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathCustomerRepositoryTest.java
More file actions
151 lines (111 loc) · 5.36 KB
/
Copy pathCustomerRepositoryTest.java
File metadata and controls
151 lines (111 loc) · 5.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.ainigma100.customerapi.repository;
import com.ainigma100.customerapi.dto.CustomerSearchCriteriaDTO;
import com.ainigma100.customerapi.entity.Customer;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.time.LocalDate;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
/*
* @DataJpaTest will automatically configure in-memory database for testing
* and, it will not load annotated beans into the Application Context.
* It will only load the repository class. Tests annotated with @DataJpaTest
* are by default transactional and roll back at the end of each test.
*/
@DataJpaTest
class CustomerRepositoryTest {
@Autowired
private CustomerRepository customerRepository;
private Customer customer;
/**
* This method will be executed before each and every test inside this class
*/
@BeforeEach
void setUp() {
customer = new Customer();
customer.setFirstName("John");
customer.setLastName("Wick");
customer.setEmail("jwick@tester.com");
customer.setPhoneNumber("0123456789");
customer.setDateOfBirth(LocalDate.now().minusYears(18));
}
@Test
void givenValidEmail_whenFindByEmail_thenReturnCustomer() {
// given - precondition or setup
String email = "jwick@tester.com";
customerRepository.save(customer);
// when - action or behaviour that we are going to test
Customer customerFromDB = customerRepository.findByEmail(email).orElse(null);
// then - verify the output
assertNotNull(customerFromDB);
assertEquals(customer.getFirstName(), customerFromDB.getFirstName());
assertEquals(customer.getLastName(), customerFromDB.getLastName());
assertEquals(customer.getEmail(), customerFromDB.getEmail());
assertEquals(customer.getPhoneNumber(), customerFromDB.getPhoneNumber());
assertEquals(customer.getDateOfBirth(), customerFromDB.getDateOfBirth());
}
@Test
void givenInvalidEmail_whenFindByEmail_thenReturnNothing() {
// given - precondition or setup
String email = "abc@tester.com";
customerRepository.save(customer);
// when - action or behaviour that we are going to test
Customer customerFromDB = customerRepository.findByEmail(email).orElse(null);
// then - verify the output
assertNull(customerFromDB);
}
@Test
void givenNullEmail_whenFindByEmail_thenReturnNothing() {
// given - precondition or setup
String email = null;
customerRepository.save(customer);
// when - action or behaviour that we are going to test
Customer customerFromDB = customerRepository.findByEmail(email).orElse(null);
// then - verify the output
assertNull(customerFromDB);
}
@Test
void givenEmptyEmail_whenFindByEmail_thenReturnNothing() {
// given - precondition or setup
String email = "";
customerRepository.save(customer);
// when - action or behaviour that we are going to test
Customer customerFromDB = customerRepository.findByEmail(email).orElse(null);
// then - verify the output
assertNull(customerFromDB);
}
@Test
void givenCustomerSearchCriteriaDTO_whenGetAllCustomersUsingPagination_thenReturnCustomerDTOPage() {
// given - precondition or setup
customerRepository.save(customer);
CustomerSearchCriteriaDTO searchCriteriaDTO = new CustomerSearchCriteriaDTO();
searchCriteriaDTO.setFirstName("John");
PageRequest pageRequest = PageRequest.of(0, 10);
// when - action or behaviour that we are going to test
Page<Customer> customerPage = customerRepository.getAllCustomersUsingPagination(searchCriteriaDTO, pageRequest);
// then - verify the output
assertThat(customerPage).isNotNull();
assertThat(customerPage.getContent()).hasSize(1);
assertThat(customerPage.getContent().get(0).getFirstName()).isEqualTo(customer.getFirstName());
assertThat(customerPage.getContent().get(0).getLastName()).isEqualTo(customer.getLastName());
assertThat(customerPage.getContent().get(0).getEmail()).isEqualTo(customer.getEmail());
assertThat(customerPage.getContent().get(0).getPhoneNumber()).isEqualTo(customer.getPhoneNumber());
assertThat(customerPage.getContent().get(0).getDateOfBirth()).isEqualTo(customer.getDateOfBirth());
}
@Test
void givenInvalidCustomerSearchCriteriaDTO_whenGetAllCustomersUsingPagination_thenReturnEmptyPage() {
// given - precondition or setup
customerRepository.save(customer);
CustomerSearchCriteriaDTO searchCriteriaDTO = new CustomerSearchCriteriaDTO();
searchCriteriaDTO.setFirstName("xxxxx");
PageRequest pageRequest = PageRequest.of(0, 10);
// when - action or behaviour that we are going to test
Page<Customer> customerPage = customerRepository.getAllCustomersUsingPagination(searchCriteriaDTO, pageRequest);
// then - verify the output
assertThat(customerPage.getContent()).isEmpty();
}
}