Skip to content

Commit 8b0c427

Browse files
authored
Merge pull request #36 from ArielMAJ/release/0.5.2
Release/0.5.2
2 parents ec77c3e + 7dc5f4c commit 8b0c427

5 files changed

Lines changed: 438 additions & 2 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</parent>
1212
<groupId>tech.artadevs</groupId>
1313
<artifactId>Finances</artifactId>
14-
<version>0.5.1-SNAPSHOT</version>
14+
<version>0.5.2-SNAPSHOT</version>
1515
<name>Finances</name>
1616
<description>A finance manager backend in Java - Springboot.</description>
1717
<url />
Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
package tech.artadevs.finances.controllers;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
import static org.junit.jupiter.api.Assertions.assertTrue;
6+
7+
import org.junit.jupiter.api.BeforeEach;
8+
import org.junit.jupiter.api.Test;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.test.context.SpringBootTest;
11+
import org.springframework.boot.test.web.client.TestRestTemplate;
12+
import org.springframework.http.HttpEntity;
13+
import org.springframework.http.HttpHeaders;
14+
import org.springframework.http.HttpMethod;
15+
import org.springframework.http.HttpStatus;
16+
import org.springframework.http.MediaType;
17+
import org.springframework.http.ResponseEntity;
18+
import org.springframework.test.annotation.DirtiesContext;
19+
20+
import tech.artadevs.finances.dtos.ApiErrorDto;
21+
import tech.artadevs.finances.dtos.FinancialTransactionRequestDto;
22+
import tech.artadevs.finances.dtos.FinancialTransactionResponseDto;
23+
import tech.artadevs.finances.dtos.UserLoginRequestDto;
24+
import tech.artadevs.finances.dtos.UserLoginResponseDto;
25+
import tech.artadevs.finances.dtos.UserRegisterRequestDto;
26+
import tech.artadevs.finances.dtos.UserResponseDto;
27+
28+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
29+
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
30+
class FinancialTransactionControllerTest {
31+
32+
@Autowired
33+
private TestRestTemplate restTemplate;
34+
35+
private String userEmail;
36+
private String userPassword;
37+
private String userName;
38+
private Long accountNumber;
39+
private Integer age;
40+
private HttpHeaders headers;
41+
42+
@BeforeEach
43+
void setUp() {
44+
userEmail = "user@example.com";
45+
userPassword = "password";
46+
userName = "Example User";
47+
accountNumber = 123456789L;
48+
age = 26;
49+
50+
UserRegisterRequestDto signupRequest = new UserRegisterRequestDto()
51+
.setEmail(userEmail)
52+
.setPassword(userPassword)
53+
.setName(userName)
54+
.setAccountNumber(accountNumber)
55+
.setAge(age);
56+
57+
restTemplate.postForEntity("/user/signup", signupRequest, UserResponseDto.class).getBody();
58+
59+
headers = new HttpHeaders();
60+
headers.set("Authorization", "Bearer " + loginAndGetToken(userEmail, userPassword));
61+
}
62+
63+
private String loginAndGetToken(String email, String password) {
64+
65+
HttpHeaders headers = new HttpHeaders();
66+
headers.setContentType(MediaType.APPLICATION_JSON);
67+
68+
UserLoginRequestDto loginPayload = new UserLoginRequestDto()
69+
.setEmail(email)
70+
.setPassword(password);
71+
72+
HttpEntity<UserLoginRequestDto> entity = new HttpEntity<>(loginPayload, headers);
73+
74+
ResponseEntity<UserLoginResponseDto> response = restTemplate.exchange("/auth/login", HttpMethod.POST, entity,
75+
UserLoginResponseDto.class);
76+
77+
@SuppressWarnings("null")
78+
String token = response.getBody().getToken();
79+
80+
return token;
81+
}
82+
83+
@Test
84+
void testCreateTransaction() {
85+
FinancialTransactionRequestDto request = new FinancialTransactionRequestDto()
86+
.setValue(100.0)
87+
.setDescription("Test Transaction");
88+
89+
HttpEntity<FinancialTransactionRequestDto> entity = new HttpEntity<>(request, headers);
90+
91+
ResponseEntity<FinancialTransactionResponseDto> response = restTemplate.postForEntity(
92+
"/user/me/transactions", entity, FinancialTransactionResponseDto.class);
93+
94+
assertEquals(HttpStatus.OK, response.getStatusCode());
95+
FinancialTransactionResponseDto transaction = response.getBody();
96+
assertNotNull(transaction);
97+
assertEquals(100.0, transaction.getValue());
98+
assertEquals("Test Transaction", transaction.getDescription());
99+
}
100+
101+
@Test
102+
void testUpdateTransaction() {
103+
104+
FinancialTransactionRequestDto createRequest = new FinancialTransactionRequestDto()
105+
.setValue(100.0)
106+
.setDescription("Initial Transaction");
107+
HttpEntity<FinancialTransactionRequestDto> createEntity = new HttpEntity<>(createRequest, headers);
108+
ResponseEntity<FinancialTransactionResponseDto> createResponse = restTemplate.postForEntity(
109+
"/user/me/transactions", createEntity, FinancialTransactionResponseDto.class);
110+
111+
FinancialTransactionResponseDto financialTransactionResponseDto = createResponse.getBody();
112+
assertNotNull(financialTransactionResponseDto);
113+
Long transactionId = financialTransactionResponseDto.getId();
114+
115+
FinancialTransactionRequestDto updateRequest = new FinancialTransactionRequestDto()
116+
.setValue(200.0)
117+
.setDescription("Updated Transaction");
118+
HttpEntity<FinancialTransactionRequestDto> updateEntity = new HttpEntity<>(updateRequest, headers);
119+
120+
ResponseEntity<Void> updateResponse = restTemplate.exchange(
121+
"/user/me/transactions/" + transactionId, HttpMethod.PUT, updateEntity, Void.class);
122+
123+
assertEquals(HttpStatus.ACCEPTED, updateResponse.getStatusCode());
124+
125+
ResponseEntity<FinancialTransactionResponseDto> getResponse = restTemplate.exchange(
126+
"/user/me/transactions/" + transactionId, HttpMethod.GET, new HttpEntity<>(headers),
127+
FinancialTransactionResponseDto.class);
128+
129+
assertEquals(HttpStatus.OK, getResponse.getStatusCode());
130+
FinancialTransactionResponseDto updatedTransaction = getResponse.getBody();
131+
assertNotNull(updatedTransaction);
132+
assertEquals(200.0, updatedTransaction.getValue());
133+
assertEquals("Updated Transaction", updatedTransaction.getDescription());
134+
}
135+
136+
@Test
137+
void testGetTransactionByIdWhenTransactionExists() {
138+
139+
FinancialTransactionRequestDto createRequest = new FinancialTransactionRequestDto()
140+
.setValue(50.0)
141+
.setDescription("Get Test Transaction");
142+
HttpEntity<FinancialTransactionRequestDto> createEntity = new HttpEntity<>(createRequest, headers);
143+
ResponseEntity<FinancialTransactionResponseDto> createResponse = restTemplate.postForEntity(
144+
"/user/me/transactions", createEntity, FinancialTransactionResponseDto.class);
145+
146+
FinancialTransactionResponseDto financialTransactionResponseDto = createResponse.getBody();
147+
assertNotNull(financialTransactionResponseDto);
148+
Long transactionId = financialTransactionResponseDto.getId();
149+
150+
ResponseEntity<FinancialTransactionResponseDto> getResponse = restTemplate.exchange(
151+
"/user/me/transactions/" + transactionId, HttpMethod.GET, new HttpEntity<>(headers),
152+
FinancialTransactionResponseDto.class);
153+
154+
assertEquals(HttpStatus.OK, getResponse.getStatusCode());
155+
FinancialTransactionResponseDto transaction = getResponse.getBody();
156+
assertNotNull(transaction);
157+
assertEquals(50.0, transaction.getValue());
158+
assertEquals("Get Test Transaction", transaction.getDescription());
159+
}
160+
161+
162+
@Test
163+
void testGetTransactionByIdWhenNoTransactionExists() {
164+
ResponseEntity<ApiErrorDto> getResponse = restTemplate.exchange(
165+
"/user/me/transactions/1", HttpMethod.GET, new HttpEntity<>(headers),
166+
ApiErrorDto.class);
167+
168+
assertEquals(HttpStatus.NOT_FOUND, getResponse.getStatusCode());
169+
ApiErrorDto apiError = getResponse.getBody();
170+
assertNotNull(apiError);
171+
assertEquals("Financial Transaction not found.", apiError.getDetail());
172+
}
173+
174+
@Test
175+
void testListAllTransactions() {
176+
177+
for (int i = 1; i <= 3; i++) {
178+
FinancialTransactionRequestDto request = new FinancialTransactionRequestDto()
179+
.setValue(10.0 * i)
180+
.setDescription("Transaction " + i);
181+
HttpEntity<FinancialTransactionRequestDto> entity = new HttpEntity<>(request, headers);
182+
ResponseEntity<FinancialTransactionResponseDto> createResponse = restTemplate.postForEntity(
183+
"/user/me/transactions", entity, FinancialTransactionResponseDto.class);
184+
185+
assertEquals(HttpStatus.OK, createResponse.getStatusCode(), "Transaction creation failed for index: " + i);
186+
assertNotNull(createResponse.getBody(), "Response body is null for transaction index: " + i);
187+
}
188+
189+
ResponseEntity<FinancialTransactionResponseDto[]> response = restTemplate.exchange(
190+
"/user/me/transactions", HttpMethod.GET, new HttpEntity<>(headers),
191+
FinancialTransactionResponseDto[].class);
192+
193+
assertEquals(HttpStatus.OK, response.getStatusCode(), "Failed to fetch transactions");
194+
FinancialTransactionResponseDto[] transactions = response.getBody();
195+
assertNotNull(transactions, "Transaction list is null");
196+
assertTrue(transactions.length >= 3, "Expected at least 3 transactions, found: " + transactions.length);
197+
}
198+
199+
@Test
200+
void testCalculateTotalTransactionsValue() {
201+
202+
for (int i = 1; i <= 3; i++) {
203+
FinancialTransactionRequestDto request = new FinancialTransactionRequestDto()
204+
.setValue(10.0 * i)
205+
.setDescription("Transaction " + i);
206+
HttpEntity<FinancialTransactionRequestDto> entity = new HttpEntity<>(request, headers);
207+
restTemplate.postForEntity("/user/me/transactions", entity, FinancialTransactionResponseDto.class);
208+
}
209+
210+
ResponseEntity<Double> response = restTemplate.exchange(
211+
"/user/me/transactions/total", HttpMethod.GET, new HttpEntity<>(headers), Double.class);
212+
213+
assertEquals(HttpStatus.OK, response.getStatusCode());
214+
Double totalValue = response.getBody();
215+
assertNotNull(totalValue);
216+
assertEquals(60.0, totalValue);
217+
}
218+
219+
@Test
220+
void testDeleteTransaction() {
221+
222+
FinancialTransactionRequestDto createRequest = new FinancialTransactionRequestDto()
223+
.setValue(100.0)
224+
.setDescription("Delete Test Transaction");
225+
HttpEntity<FinancialTransactionRequestDto> createEntity = new HttpEntity<>(createRequest, headers);
226+
ResponseEntity<FinancialTransactionResponseDto> createResponse = restTemplate.postForEntity(
227+
"/user/me/transactions", createEntity, FinancialTransactionResponseDto.class);
228+
229+
FinancialTransactionResponseDto financialTransactionResponseDto = createResponse.getBody();
230+
assertNotNull(financialTransactionResponseDto);
231+
Long transactionId = financialTransactionResponseDto.getId();
232+
233+
ResponseEntity<Void> deleteResponse = restTemplate.exchange(
234+
"/user/me/transactions/" + transactionId, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class);
235+
236+
assertEquals(HttpStatus.NO_CONTENT, deleteResponse.getStatusCode());
237+
238+
ResponseEntity<FinancialTransactionResponseDto[]> getResponse = restTemplate.exchange(
239+
"/user/me/transactions", HttpMethod.GET, new HttpEntity<>(headers),
240+
FinancialTransactionResponseDto[].class);
241+
242+
assertEquals(HttpStatus.OK, getResponse.getStatusCode());
243+
FinancialTransactionResponseDto[] transactions = getResponse.getBody();
244+
assertNotNull(transactions);
245+
assertTrue(transactions.length == 0);
246+
}
247+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package tech.artadevs.finances.models;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
6+
import tech.artadevs.finances.dtos.FinancialTransactionResponseDto;
7+
8+
import java.util.Date;
9+
10+
import static org.junit.jupiter.api.Assertions.*;
11+
12+
class FinancialTransactionTest {
13+
14+
private FinancialTransaction financialTransaction;
15+
private User user;
16+
17+
@BeforeEach
18+
void setUp() {
19+
user = new User()
20+
.setId(1L)
21+
.setName("Test User")
22+
.setEmail("test@example.com")
23+
.setPassword("password")
24+
.setEnabled(true);
25+
26+
financialTransaction = new FinancialTransaction()
27+
.setId(1L)
28+
.setValue(100.0)
29+
.setDescription("Test Transaction")
30+
.setUser(user)
31+
.setCreatedAt(new Date())
32+
.setUpdatedAt(new Date());
33+
}
34+
35+
@Test
36+
void testConstructor() {
37+
FinancialTransaction transaction = new FinancialTransaction(200.0, "Constructor Transaction", user);
38+
assertEquals(200.0, transaction.getValue());
39+
assertEquals("Constructor Transaction", transaction.getDescription());
40+
assertEquals(user, transaction.getUser());
41+
assertNull(transaction.getDeletedAt());
42+
}
43+
44+
@Test
45+
void testSetCreatedAt() {
46+
Date newDate = new Date();
47+
financialTransaction.setCreatedAt(newDate);
48+
assertEquals(newDate, financialTransaction.getCreatedAt());
49+
}
50+
51+
@Test
52+
void testSetUpdatedAt() {
53+
Date newDate = new Date();
54+
financialTransaction.setUpdatedAt(newDate);
55+
assertEquals(newDate, financialTransaction.getUpdatedAt());
56+
}
57+
58+
@Test
59+
void testGetUser() {
60+
assertEquals(user, financialTransaction.getUser());
61+
}
62+
63+
@Test
64+
void testGetCreatedAt() {
65+
Date createdAt = financialTransaction.getCreatedAt();
66+
assertNotNull(createdAt);
67+
}
68+
69+
@Test
70+
void testGetUpdatedAt() {
71+
Date updatedAt = financialTransaction.getUpdatedAt();
72+
assertNotNull(updatedAt);
73+
}
74+
75+
@Test
76+
void testSetDeletedAt() {
77+
Date deletedAt = new Date();
78+
financialTransaction.setDeletedAt(deletedAt);
79+
assertEquals(deletedAt, financialTransaction.getDeletedAt());
80+
}
81+
82+
@Test
83+
void testToFinancialTransactionResponseDto() {
84+
FinancialTransactionResponseDto dto = financialTransaction.toFinancialTransactionResponseDto();
85+
86+
assertNotNull(dto);
87+
assertEquals(financialTransaction.getId(), dto.getId());
88+
assertEquals(financialTransaction.getValue(), dto.getValue());
89+
assertEquals(financialTransaction.getDescription(), dto.getDescription());
90+
assertEquals(financialTransaction.getCreatedAt(), dto.getCreatedAt());
91+
assertEquals(financialTransaction.getUpdatedAt(), dto.getUpdatedAt());
92+
}
93+
}

0 commit comments

Comments
 (0)