diff --git a/src/main/java/com/zenfulcode/commercify/commercify/dto/OrderDTO.java b/src/main/java/com/zenfulcode/commercify/commercify/dto/OrderDTO.java index e5deb10..d45ab8c 100644 --- a/src/main/java/com/zenfulcode/commercify/commercify/dto/OrderDTO.java +++ b/src/main/java/com/zenfulcode/commercify/commercify/dto/OrderDTO.java @@ -11,11 +11,12 @@ @Builder @AllArgsConstructor public class OrderDTO { - private Long id; + private long id; private Long userId; private String currency; - private Double totalAmount; + private double totalAmount; private OrderStatus orderStatus; + private int orderLinesAmount; private Instant createdAt; private Instant updatedAt; } \ No newline at end of file diff --git a/src/main/java/com/zenfulcode/commercify/commercify/dto/mapper/OrderMapper.java b/src/main/java/com/zenfulcode/commercify/commercify/dto/mapper/OrderMapper.java index febc94a..d6d3f34 100644 --- a/src/main/java/com/zenfulcode/commercify/commercify/dto/mapper/OrderMapper.java +++ b/src/main/java/com/zenfulcode/commercify/commercify/dto/mapper/OrderMapper.java @@ -19,8 +19,9 @@ public OrderDTO apply(OrderEntity order) { .orderStatus(order.getStatus()) .createdAt(order.getCreatedAt()) .updatedAt(order.getUpdatedAt()) - .currency(order.getCurrency()) - .totalAmount(order.getTotalAmount()) + .currency(order.getCurrency() != null ? order.getCurrency() : null) + .totalAmount(order.getTotalAmount() != null ? order.getTotalAmount() : 0.0) + .orderLinesAmount(order.getOrderLines() != null ? order.getOrderLines().size() : 0) .build(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/zenfulcode/commercify/commercify/viewmodel/OrderViewModel.java b/src/main/java/com/zenfulcode/commercify/commercify/viewmodel/OrderViewModel.java index c73b992..7308826 100644 --- a/src/main/java/com/zenfulcode/commercify/commercify/viewmodel/OrderViewModel.java +++ b/src/main/java/com/zenfulcode/commercify/commercify/viewmodel/OrderViewModel.java @@ -6,9 +6,10 @@ import java.time.Instant; public record OrderViewModel( - Long id, + long id, Long userId, - Double totalPrice, + int orderLinesAmount, + double totalPrice, String currency, OrderStatus orderStatus, Instant createdAt @@ -17,6 +18,7 @@ public static OrderViewModel fromDTO(OrderDTO orderDTO) { return new OrderViewModel( orderDTO.getId(), orderDTO.getUserId(), + orderDTO.getOrderLinesAmount(), orderDTO.getTotalAmount(), orderDTO.getCurrency(), orderDTO.getOrderStatus(), diff --git a/src/test/java/com/zenfulcode/commercify/commercify/dto/mapper/OrderMapperTest.java b/src/test/java/com/zenfulcode/commercify/commercify/dto/mapper/OrderMapperTest.java new file mode 100644 index 0000000..6a88ad7 --- /dev/null +++ b/src/test/java/com/zenfulcode/commercify/commercify/dto/mapper/OrderMapperTest.java @@ -0,0 +1,108 @@ +package com.zenfulcode.commercify.commercify.dto.mapper; + +import com.zenfulcode.commercify.commercify.OrderStatus; +import com.zenfulcode.commercify.commercify.dto.OrderDTO; +import com.zenfulcode.commercify.commercify.entity.OrderEntity; +import com.zenfulcode.commercify.commercify.entity.OrderLineEntity; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.Instant; +import java.util.LinkedHashSet; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class OrderMapperTest { + + @InjectMocks + private OrderMapper orderMapper; + + private OrderEntity orderEntity; + + @BeforeEach + void setUp() { + Instant now = Instant.now(); + + Set orderLines = new LinkedHashSet<>(); + OrderLineEntity orderLine = OrderLineEntity.builder() + .id(1L) + .productId(1L) + .quantity(2) + .unitPrice(99.99) + .currency("USD") + .build(); + orderLines.add(orderLine); + + orderEntity = OrderEntity.builder() + .id(1L) + .userId(1L) + .orderLines(orderLines) + .status(OrderStatus.PENDING) + .currency("USD") + .totalAmount(199.98) + .createdAt(now) + .updatedAt(now) + .build(); + } + + @Test + @DisplayName("Should map OrderEntity to OrderDTO correctly") + void apply_Success() { + OrderDTO result = orderMapper.apply(orderEntity); + + assertNotNull(result); + assertEquals(orderEntity.getId(), result.getId()); + assertEquals(orderEntity.getUserId(), result.getUserId()); + assertEquals(orderEntity.getStatus(), result.getOrderStatus()); + assertEquals(orderEntity.getCurrency(), result.getCurrency()); + assertEquals(orderEntity.getTotalAmount(), result.getTotalAmount()); + assertEquals(orderEntity.getCreatedAt(), result.getCreatedAt()); + assertEquals(orderEntity.getUpdatedAt(), result.getUpdatedAt()); + assertEquals(orderEntity.getOrderLines().size(), result.getOrderLinesAmount()); + } + + @Test + @DisplayName("Should handle OrderEntity with null values") + void apply_HandlesNullValues() { + OrderEntity emptyOrder = OrderEntity.builder() + .id(1L) + .build(); + + OrderDTO result = orderMapper.apply(emptyOrder); + + assertNotNull(result); + assertEquals(1L, result.getId()); + assertEquals(0, result.getOrderLinesAmount()); + assertNull(result.getUserId()); + assertNull(result.getCurrency()); + assertEquals(0.0, result.getTotalAmount()); + } + + @Test + @DisplayName("Should handle null totalAmount correctly") + void apply_HandlesNullTotalAmount() { + orderEntity.setTotalAmount(null); + + OrderDTO result = orderMapper.apply(orderEntity); + + assertNotNull(result); + assertEquals(0.0, result.getTotalAmount()); + } + + @Test + @DisplayName("Should handle null orderLines correctly") + void apply_HandlesNullOrderLines() { + orderEntity.setOrderLines(null); + + OrderDTO result = orderMapper.apply(orderEntity); + + assertNotNull(result); + assertEquals(0, result.getOrderLinesAmount()); + } +} \ No newline at end of file