Commit d023b1e8 authored by Vladimir Trubachoff's avatar Vladimir Trubachoff

Added OrderLineRepositoryTest, OrderLineServiceTest, OrderLineControllerTest

parent 371f77f3
...@@ -3,7 +3,10 @@ package com.example.testj.domain; ...@@ -3,7 +3,10 @@ package com.example.testj.domain;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*; import jakarta.persistence.*;
import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Min;
import lombok.*; import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.springframework.format.annotation.NumberFormat; import org.springframework.format.annotation.NumberFormat;
@Getter @Getter
...@@ -20,10 +23,12 @@ public class OrderLine { ...@@ -20,10 +23,12 @@ public class OrderLine {
@JsonIgnore @JsonIgnore
@ManyToOne @ManyToOne
@JoinColumn(name = "order_id") @JoinColumn(name = "order_id")
@NotNull
private Order order; private Order order;
@ManyToOne @ManyToOne
@JoinColumn(name = "goods_id") @JoinColumn(name = "goods_id")
@NotNull
private Goods goods; private Goods goods;
@Column(name = "count") @Column(name = "count")
......
...@@ -10,7 +10,7 @@ public interface OrderLineService { ...@@ -10,7 +10,7 @@ public interface OrderLineService {
OrderLineDto createOrderLine(OrderLineRequestDto orderLineRequest); OrderLineDto createOrderLine(OrderLineRequestDto orderLineRequest);
OrderLineDto updateOrderLine(OrderLine orderLine, Long id); OrderLineDto updateOrderLine(OrderLine orderLine);
void deleteOrderLine(Long id); void deleteOrderLine(Long id);
} }
...@@ -3,6 +3,7 @@ package com.example.testj.service.dto; ...@@ -3,6 +3,7 @@ package com.example.testj.service.dto;
import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.Positive;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import java.io.Serializable; import java.io.Serializable;
...@@ -11,13 +12,17 @@ import java.io.Serializable; ...@@ -11,13 +12,17 @@ import java.io.Serializable;
* DTO for {@link com.example.testj.domain.OrderLine} * DTO for {@link com.example.testj.domain.OrderLine}
*/ */
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
@Getter @Getter
@Setter @Setter
public class OrderLineDto implements Serializable { public class OrderLineDto implements Serializable {
private final Long id; private Long id;
private final GoodsDto goods; private GoodsDto goods;
// @JsonIgnore
// private OrderDto order;
@Positive @Positive
private final int count; private int count;
} }
package com.example.testj.service.dto; package com.example.testj.service.dto;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class OrderLineRequestDto { public class OrderLineRequestDto {
@NotNull
private Long orderId; private Long orderId;
@NotNull
private Long goodsId; private Long goodsId;
@Positive
private int count; private int count;
} }
...@@ -31,6 +31,7 @@ public class OrderLineServiceImpl implements OrderLineService { ...@@ -31,6 +31,7 @@ public class OrderLineServiceImpl implements OrderLineService {
public OrderLineDto createOrderLine(OrderLineRequestDto orderLineRequest) { public OrderLineDto createOrderLine(OrderLineRequestDto orderLineRequest) {
OrderDto order = orderService.getOrder(orderLineRequest.getOrderId()); OrderDto order = orderService.getOrder(orderLineRequest.getOrderId());
GoodsDto goods = goodsService.getGoods(orderLineRequest.getGoodsId()); GoodsDto goods = goodsService.getGoods(orderLineRequest.getGoodsId());
OrderLine orderLine = new OrderLine(); OrderLine orderLine = new OrderLine();
orderLine.setOrder(orderMapper.toEntity(order)); orderLine.setOrder(orderMapper.toEntity(order));
orderLine.setGoods(goodsMapper.toEntity(goods)); orderLine.setGoods(goodsMapper.toEntity(goods));
...@@ -40,8 +41,8 @@ public class OrderLineServiceImpl implements OrderLineService { ...@@ -40,8 +41,8 @@ public class OrderLineServiceImpl implements OrderLineService {
} }
@Override @Override
public OrderLineDto updateOrderLine(OrderLine orderLine, Long id) { public OrderLineDto updateOrderLine(OrderLine orderLine) {
OrderLine updatedOrderLine = orderLineRepository.findById(id).orElseThrow(ResourceNotFoundException::new); OrderLine updatedOrderLine = orderLineRepository.findById(orderLine.getId()).orElseThrow(ResourceNotFoundException::new);
updatedOrderLine.setCount(orderLine.getCount()); updatedOrderLine.setCount(orderLine.getCount());
return orderLineMapper.toDto(orderLineRepository.save(updatedOrderLine)); return orderLineMapper.toDto(orderLineRepository.save(updatedOrderLine));
} }
......
...@@ -3,8 +3,9 @@ package com.example.testj.service.mapper; ...@@ -3,8 +3,9 @@ package com.example.testj.service.mapper;
import com.example.testj.domain.OrderLine; import com.example.testj.domain.OrderLine;
import com.example.testj.service.dto.OrderLineDto; import com.example.testj.service.dto.OrderLineDto;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface OrderLineMapper { public interface OrderLineMapper {
OrderLineDto toDto(OrderLine orderLine); OrderLineDto toDto(OrderLine orderLine);
OrderLine toEntity(OrderLineDto orderLineDto); OrderLine toEntity(OrderLineDto orderLineDto);
......
...@@ -25,13 +25,14 @@ public class OrderLineController { ...@@ -25,13 +25,14 @@ public class OrderLineController {
} }
@PostMapping @PostMapping
@ResponseStatus(HttpStatus.CREATED)
public OrderLineDto create(@Valid @RequestBody OrderLineRequestDto orderLineRequest) { public OrderLineDto create(@Valid @RequestBody OrderLineRequestDto orderLineRequest) {
return orderLineService.createOrderLine(orderLineRequest); return orderLineService.createOrderLine(orderLineRequest);
} }
@PutMapping("/{id}") @PutMapping("/{id}")
public OrderLineDto updateOrder(@PathVariable Long id, @Valid @RequestBody OrderLineDto orderLine) { public OrderLineDto update(@PathVariable Long id, @Valid @RequestBody OrderLineDto orderLine) {
return orderLineService.updateOrderLine(orderLineMapper.toEntity(orderLine), id); return orderLineService.updateOrderLine(orderLineMapper.toEntity(orderLine));
} }
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
......
package com.example.testj.repository;
import com.example.testj.domain.Goods;
import com.example.testj.domain.Order;
import com.example.testj.domain.OrderLine;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.ActiveProfiles;
import java.util.List;
import java.util.stream.StreamSupport;
import static org.junit.jupiter.api.Assertions.*;
@DataJpaTest
@ActiveProfiles("test")
public class OrderLineRepositoryTest {
@Autowired
OrderLineRepository orderLineRepository;
@Autowired
TestEntityManager entityManager;
@Test
void testFindById() {
// given
Long id = 1L;
// when
OrderLine found = orderLineRepository.findById(id).orElse(null);
// then
assertNotNull(found);
assertEquals(found.getId(), id);
}
@Test
void testSave() {
// given
OrderLine orderLine = new OrderLine();
Order order = new Order();
order.setId(1L);
Goods goods = new Goods();
goods.setId(1L);
orderLine.setOrder(order);
orderLine.setGoods(goods);
orderLine.setCount(100);
// when
orderLineRepository.save(orderLine);
// then
assertNotNull(orderLine.getId());
assertEquals(entityManager.find(OrderLine.class, orderLine.getId()), orderLine);
}
@Test
void testUpdate() {
// given
Long id = 1L;
OrderLine orderLine = entityManager.find(OrderLine.class, id);
orderLine.setCount(10);
// when
orderLineRepository.save(orderLine);
// then
assertEquals(entityManager.find(OrderLine.class, id), orderLine);
}
@Test
void testDelete() {
// given
Long id = 1L;
// when
orderLineRepository.deleteById(id);
// then
assertNull(entityManager.find(OrderLine.class, id));
}
@Test
void testFindAll() {
// when
List<OrderLine> orderLineList = StreamSupport.stream(orderLineRepository.findAll().spliterator(), false).toList();
// then
assertNotNull(orderLineList);
assertEquals(100, orderLineList.size());
}
}
package com.example.testj.service;
import com.example.testj.repository.OrderLineRepository;
import com.example.testj.service.mapper.OrderLineMapper;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
public class OrderLineServiceTest {
@InjectMocks
private OrderLineService orderLineService;
@Mock
private OrderLineRepository orderLineRepository;
@Spy
private OrderLineMapper orderLineMapper = Mappers.getMapper(OrderLineMapper.class);
@Test
void testCreateOrderLine() {}
@Test
void testUpdateOrderLine() {}
@Test
void testGetOrderLine() {}
@Test
void testDeleteOrderLine() {}
}
package com.example.testj.web.rest;
import com.example.testj.domain.Goods;
import com.example.testj.domain.Order;
import com.example.testj.domain.OrderLine;
import com.example.testj.exception.ResourceNotFoundException;
import com.example.testj.service.OrderLineService;
import com.example.testj.service.dto.GoodsDto;
import com.example.testj.service.dto.OrderLineDto;
import com.example.testj.service.dto.OrderLineRequestDto;
import com.example.testj.service.mapper.OrderLineMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
//@WebMvcTest(OrderLineController.class)
public class OrderLineControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private OrderLineService orderLineService;
@MockBean
private OrderLineMapper orderLineMapper;
@Test
@DisplayName("GET /api/order-line/:id [200 OK]")
void testGetOrderLine() throws Exception {
Long id = 1L;
GoodsDto goodsDto = new GoodsDto(1L, "product 1", 100.00f);
OrderLineDto orderLineDto = new OrderLineDto();
orderLineDto.setId(id);
orderLineDto.setCount(10);
orderLineDto.setGoods(goodsDto);
when(orderLineService.getOrderLine(id)).thenReturn(orderLineDto);
mvc.perform(get("/api/order-line/{id}", id).contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").value(id))
.andExpect(jsonPath("$.count").value(orderLineDto.getCount()))
.andExpect(jsonPath("$.goods.id").value(goodsDto.getId()));
}
@Test
@DisplayName("GET /api/order-line/:id [404 Not Found]")
void testGetOrderLineNotFound() throws Exception {
Long id = 999L;
when(orderLineService.getOrderLine(id)).thenThrow(new ResourceNotFoundException());
mvc.perform(get("/api/order-line/{id}", id).contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isNotFound());
}
@Test
@DisplayName("POST /api/order-line [201 Created]")
void testCreateOrderLine() throws Exception {
Goods goods = new Goods();
goods.setId(1L);
goods.setName("product 1");
goods.setPrice(100.00);
Order order = new Order();
order.setId(1L);
OrderLine orderLine = new OrderLine();
orderLine.setOrder(order);
orderLine.setGoods(goods);
orderLine.setCount(10);
OrderLineRequestDto requestDto = new OrderLineRequestDto();
requestDto.setGoodsId(orderLine.getGoods().getId());
requestDto.setOrderId(orderLine.getOrder().getId());
requestDto.setCount(orderLine.getCount());
String body = new ObjectMapper().writeValueAsString(requestDto);
Long nextId = 2L;
orderLine.setId(nextId);
OrderLineDto orderLineDto = orderLineMapper.toDto(orderLine);
// OrderLineDto orderLineDto = new OrderLineDto(nextId, new GoodsDto(1L, "product 1", 100.00), 10);
when(orderLineService.createOrderLine(requestDto)).thenReturn(orderLineDto);
mvc.perform(post("/api/order-line").contentType(MediaType.APPLICATION_JSON).content(body))
.andExpect(status().isCreated())
.andReturn();
// .andExpectAll(
// content().contentType(MediaType. APPLICATION_JSON),
// jsonPath("$.id").value(orderLineDto.getId()),
// jsonPath("$.count").value(orderLineDto.getCount()));
}
@Test
@DisplayName("PUT /api/order-line/:id [200 OK]")
void testUpdateOrderLine() throws Exception {
Long id = 1L;
OrderLineDto orderLineDto = new OrderLineDto();
orderLineDto.setId(id);
orderLineDto.setCount(100);
OrderLineRequestDto orderLineRequest = new OrderLineRequestDto();
orderLineRequest.setCount(orderLineDto.getCount());
String body = new ObjectMapper().writeValueAsString(orderLineRequest);
when(orderLineService.updateOrderLine(orderLineMapper.toEntity(orderLineDto))).thenReturn(orderLineDto);
mvc.perform(put("/api/order-line/{id}", id)
.contentType(MediaType.APPLICATION_JSON)
.content(body))
.andExpect(status().isOk())
.andExpect(jsonPath("$.count").value(orderLineDto.getCount()));
}
@Test
@DisplayName("DELETE /api/order-line/:id [200 OK]")
void testDeleteOrderLine() throws Exception {
Long id = 1L;
doNothing().when(orderLineService).deleteOrderLine(id);
mvc.perform(delete("/api/order-line/{id}", id).contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment