Skip to content

Commit 5988303

Browse files
authored
feat: add product tests (#4)
2 parents ae92275 + 3d00964 commit 5988303

File tree

4 files changed

+138
-9
lines changed

4 files changed

+138
-9
lines changed

src/main/java/br/com/grupo63/serviceorder/api/controller/order/dto/CreateOrderRequestDTO.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class CreateOrderRequestDTO {
1515

1616
@Setter
1717
@Getter
18+
@NoArgsConstructor
1819
@AllArgsConstructor
1920
public static class Item {
2021
private Long id;

src/main/java/br/com/grupo63/serviceorder/entity/order/Order.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.ArrayList;
1010
import java.util.List;
1111

12-
@AllArgsConstructor
1312
@NoArgsConstructor
1413
@Getter
1514
@Setter

src/test/java/br/com/grupo63/serviceorder/order/OrderIntegrationTest.java

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import br.com.grupo63.serviceorder.gateway.product.ProductJpaRepository;
1818
import br.com.grupo63.serviceorder.gateway.product.entity.ProductPersistenceEntity;
1919
import br.com.grupo63.serviceorder.usecase.order.OrderUseCase;
20+
import br.com.grupo63.techchallenge.common.api.controller.dto.DefaultResponseDTO;
2021
import jakarta.servlet.http.HttpServletRequest;
2122
import lombok.SneakyThrows;
2223
import org.junit.jupiter.api.BeforeEach;
@@ -30,8 +31,7 @@
3031

3132
import java.util.*;
3233

33-
import static org.junit.jupiter.api.Assertions.assertEquals;
34-
import static org.junit.jupiter.api.Assertions.assertNotNull;
34+
import static org.junit.jupiter.api.Assertions.*;
3535
import static org.mockito.ArgumentMatchers.any;
3636
import static org.mockito.Mockito.*;
3737
import static org.mockito.Mockito.times;
@@ -54,14 +54,12 @@ public class OrderIntegrationTest {
5454

5555
private final Category defaultCategory = new Category(1L, false, "category");
5656
private final Product defaultProduct = new Product(1L, false, "product", 10.0, defaultCategory);
57-
private final CreateOrderRequestDTO.Item defaultItem = new CreateOrderRequestDTO.Item(1L, 1L);
58-
private final Order defaultOrder = new Order(1L, false, 10.0, "hash", List.of());
57+
private final OrderItem orderItem = new OrderItem(1L, false, 1L, 10.0, null, defaultProduct);
58+
private final Order defaultOrder = new Order(1L, false, 10.0, "hash", List.of(orderItem));
5959

60-
private final OrderPersistenceEntity defaultOrderPersistenceEntity =
61-
new OrderPersistenceEntity(defaultOrder);
60+
private final OrderPersistenceEntity defaultOrderPersistenceEntity = new OrderPersistenceEntity(defaultOrder);
6261
private final ProductPersistenceEntity defaultProductPersistenceEntity = new ProductPersistenceEntity(defaultProduct);
6362

64-
private final CreateOrderRequestDTO defaultCreateOrderRequestDTO = new CreateOrderRequestDTO(List.of(defaultItem));
6563
private final ClientDTO defaultClientDTO = new ClientDTO();
6664

6765
@BeforeEach
@@ -102,11 +100,34 @@ void testCreate_EndToEnd() {
102100
when(productJpaRepository.findByIdAndDeletedFalse(1L)).thenReturn(Optional.of(defaultProductPersistenceEntity));
103101
when(orderJpaRepository.saveAndFlush(any())).thenReturn(defaultOrderPersistenceEntity);
104102

105-
ResponseEntity<OrderControllerDTO> response = orderAPIController.create(defaultCreateOrderRequestDTO, mockedRequest);
103+
CreateOrderRequestDTO.Item item = new CreateOrderRequestDTO.Item();
104+
item.setId(1L);
105+
item.setQuantity(1L);
106+
107+
CreateOrderRequestDTO.Item secondItem = new CreateOrderRequestDTO.Item(1L, 1L);
108+
109+
CreateOrderRequestDTO createOrderRequestDTO = new CreateOrderRequestDTO(List.of(item, secondItem));
110+
111+
ResponseEntity<OrderControllerDTO> response = orderAPIController.create(createOrderRequestDTO, mockedRequest);
106112
assertEquals(HttpStatus.OK, response.getStatusCode());
107113
assertNotNull(response.getBody());
108114
assertEquals(response.getBody().getId(), 1L);
109115
verify(orderJpaRepository, times(1)).saveAndFlush(any());
110116
}
111117

118+
@SneakyThrows
119+
@Test
120+
public void testDelete_EndToEnd() {
121+
when(orderJpaRepository.findByIdAndDeletedFalse(defaultOrderPersistenceEntity.getId())).thenReturn(Optional.of(defaultOrderPersistenceEntity));
122+
when(orderJpaRepository.saveAndFlush(any())).thenReturn(new OrderPersistenceEntity(defaultOrderPersistenceEntity.getTotalPrice(), defaultOrderPersistenceEntity.getClientId(),
123+
defaultOrderPersistenceEntity.getItems()));
124+
125+
ResponseEntity<DefaultResponseDTO> response = orderAPIController.delete(defaultOrderPersistenceEntity.getId());
126+
127+
assertEquals(HttpStatus.OK, response.getStatusCode());
128+
assertNull(response.getBody());
129+
verify(orderJpaRepository, times(1)).findByIdAndDeletedFalse(any());
130+
verify(orderJpaRepository, times(1)).saveAndFlush(any());
131+
}
132+
112133
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package br.com.grupo63.serviceorder.product;
2+
3+
import br.com.grupo63.serviceorder.api.controller.product.ProductAPIController;
4+
import br.com.grupo63.serviceorder.controller.ProductController;
5+
import br.com.grupo63.serviceorder.controller.dto.ProductControllerDTO;
6+
import br.com.grupo63.serviceorder.entity.product.Category;
7+
import br.com.grupo63.serviceorder.entity.product.Product;
8+
import br.com.grupo63.serviceorder.gateway.product.ProductJpaAdapter;
9+
import br.com.grupo63.serviceorder.gateway.product.ProductJpaRepository;
10+
import br.com.grupo63.serviceorder.gateway.product.entity.ProductPersistenceEntity;
11+
import br.com.grupo63.serviceorder.usecase.product.ProductUseCase;
12+
import br.com.grupo63.techchallenge.common.api.controller.dto.DefaultResponseDTO;
13+
import lombok.SneakyThrows;
14+
import org.junit.jupiter.api.BeforeEach;
15+
import org.junit.jupiter.api.Test;
16+
import org.mockito.InjectMocks;
17+
import org.mockito.Mock;
18+
import org.mockito.MockitoAnnotations;
19+
import org.springframework.http.HttpStatus;
20+
import org.springframework.http.ResponseEntity;
21+
22+
import java.util.*;
23+
24+
import static org.junit.jupiter.api.Assertions.*;
25+
import static org.mockito.ArgumentMatchers.any;
26+
import static org.mockito.Mockito.*;
27+
import static org.mockito.Mockito.times;
28+
29+
public class ProductIntegrationTest {
30+
31+
@Mock
32+
private ProductJpaRepository productJpaRepository;
33+
@InjectMocks
34+
private ProductJpaAdapter productJpaAdapter;
35+
private ProductUseCase productUseCase;
36+
private ProductController productController;
37+
private ProductAPIController productAPIController;
38+
39+
private final Category defaultCategory = new Category(1L, false, "category");
40+
private final Product defaultProduct = new Product(1L, false, "product", 10.0, defaultCategory);
41+
private final ProductPersistenceEntity defaultProductPersistenceEntity = new ProductPersistenceEntity(defaultProduct);
42+
private final ProductControllerDTO defaultProductControllerDTO = new ProductControllerDTO("product", 10.0, 1L);
43+
44+
@BeforeEach
45+
void setUp() {
46+
MockitoAnnotations.openMocks(this);
47+
productUseCase = new ProductUseCase();
48+
productController = new ProductController(productUseCase, productJpaAdapter);
49+
productAPIController = new ProductAPIController(productController);
50+
}
51+
52+
@SneakyThrows
53+
@Test
54+
void testRead_EndToEnd() {
55+
when(productJpaRepository.findByIdAndDeletedFalse(1L)).thenReturn(Optional.of(defaultProductPersistenceEntity));
56+
57+
ResponseEntity<ProductControllerDTO> response = productAPIController.read(1L);
58+
assertEquals(HttpStatus.OK, response.getStatusCode());
59+
assertEquals(Objects.requireNonNull(response.getBody()).getId(), 1L);
60+
}
61+
62+
@SneakyThrows
63+
@Test
64+
void testList_EndToEnd() {
65+
when(productJpaRepository.findByDeletedFalse()).thenReturn(List.of(defaultProductPersistenceEntity));
66+
67+
ResponseEntity<List<ProductControllerDTO>> response = productAPIController.list();
68+
assertEquals(HttpStatus.OK, response.getStatusCode());
69+
assertEquals(Objects.requireNonNull(response.getBody()).get(0).getId(), 1L);
70+
}
71+
72+
@SneakyThrows
73+
@Test
74+
void testListByCategory_EndToEnd() {
75+
when(productJpaRepository.findByDeletedFalseAndCategory_Name("category")).thenReturn(List.of(defaultProductPersistenceEntity));
76+
77+
ResponseEntity<List<ProductControllerDTO>> response = productAPIController.listByCategoryName("category");
78+
assertEquals(HttpStatus.OK, response.getStatusCode());
79+
assertEquals(Objects.requireNonNull(response.getBody()).get(0).getId(), 1L);
80+
}
81+
82+
@SneakyThrows
83+
@Test
84+
void testCreate_EndToEnd() {
85+
when(productJpaRepository.saveAndFlush(any())).thenReturn(defaultProductPersistenceEntity);
86+
87+
ResponseEntity<ProductControllerDTO> response = productAPIController.create(defaultProductControllerDTO);
88+
assertEquals(HttpStatus.OK, response.getStatusCode());
89+
assertNotNull(response.getBody());
90+
assertEquals(response.getBody().getId(), 1L);
91+
verify(productJpaRepository, times(1)).saveAndFlush(any());
92+
}
93+
94+
@SneakyThrows
95+
@Test
96+
public void testDelete_EndToEnd() {
97+
when(productJpaRepository.findByIdAndDeletedFalse(defaultProductPersistenceEntity.getId())).thenReturn(Optional.of(defaultProductPersistenceEntity));
98+
when(productJpaRepository.saveAndFlush(any())).thenReturn(new ProductPersistenceEntity(defaultProductPersistenceEntity.getName(), defaultProductPersistenceEntity.getPrice(), defaultProductPersistenceEntity.getCategory()));
99+
100+
ResponseEntity<DefaultResponseDTO> response = productAPIController.delete(defaultProductPersistenceEntity.getId());
101+
102+
assertEquals(HttpStatus.OK, response.getStatusCode());
103+
assertNull(response.getBody());
104+
verify(productJpaRepository, times(1)).findByIdAndDeletedFalse(any());
105+
verify(productJpaRepository, times(1)).saveAndFlush(any());
106+
}
107+
108+
}

0 commit comments

Comments
 (0)