113 lines
5.1 KiB
Java
113 lines
5.1 KiB
Java
package com.ruoyi.pda.controller;
|
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
import com.ruoyi.out.outStockout.domain.OutStockout;
|
|
import com.ruoyi.out.outStockout.service.impl.OutStockoutServiceImpl;
|
|
import com.ruoyi.out.outStockoutDetail.domain.OutStockoutDetail;
|
|
import com.ruoyi.out.outStockoutDetail.service.impl.OutStockoutDetailServiceImpl;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.dao.DataAccessResourceFailureException;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.test.util.ReflectionTestUtils;
|
|
import org.springframework.test.web.servlet.MockMvc;
|
|
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
|
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.verify;
|
|
import static org.mockito.Mockito.verifyNoInteractions;
|
|
import static org.mockito.Mockito.when;
|
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
|
|
class PdaControllerTest {
|
|
private final OutStockoutServiceImpl orders = mock(OutStockoutServiceImpl.class);
|
|
private final OutStockoutDetailServiceImpl details = mock(OutStockoutDetailServiceImpl.class);
|
|
private final PdaController controller = new PdaController();
|
|
private MockMvc mvc;
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
ReflectionTestUtils.setField(controller, "outStockoutService", orders);
|
|
ReflectionTestUtils.setField(controller, "outStockoutDetailService", details);
|
|
mvc = MockMvcBuilders.standaloneSetup(controller).build();
|
|
}
|
|
|
|
@Test
|
|
void missingOrderReturnsBusinessMessageWithoutThrowingAnException() throws Exception {
|
|
when(orders.selectOutStockoutList(any(OutStockout.class))).thenReturn(Collections.emptyList());
|
|
|
|
mvc.perform(post("/pda/OutFillPkDetail")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content("{\"stockoutId\":\"CKD-NOT-FOUND\"}"))
|
|
.andExpect(status().isOk())
|
|
.andExpect(jsonPath("$.code").value(500))
|
|
.andExpect(jsonPath("$.msg").value("未查询到匹配的出库单,请核对出库单号及查询条件后重试。"))
|
|
.andExpect(jsonPath("$.data").doesNotExist())
|
|
.andExpect(result -> assertThat(result.getResolvedException()).isNull());
|
|
|
|
verifyNoInteractions(details);
|
|
}
|
|
|
|
@Test
|
|
void nullOrderListAlsoReturnsBusinessError() {
|
|
OutStockout query = new OutStockout();
|
|
when(orders.selectOutStockoutList(query)).thenReturn(null);
|
|
|
|
AjaxResult result = controller.OutFillPkDetail(query);
|
|
|
|
assertThat(result.isError()).isTrue();
|
|
assertThat(result.get("msg")).isEqualTo("未查询到匹配的出库单,请核对出库单号及查询条件后重试。");
|
|
verifyNoInteractions(details);
|
|
}
|
|
|
|
@Test
|
|
void matchingOrderStillReturnsItsDetails() throws Exception {
|
|
OutStockout order = new OutStockout();
|
|
order.setStockoutGuid("order-guid");
|
|
OutStockoutDetail detail = new OutStockoutDetail();
|
|
detail.setStockoutDetailId("CKD-EXISTING-1");
|
|
when(orders.selectOutStockoutList(any(OutStockout.class))).thenReturn(List.of(order));
|
|
when(details.selectOutStockoutDetailByStockoutGuid("order-guid")).thenReturn(List.of(detail));
|
|
|
|
mvc.perform(post("/pda/OutFillPkDetail")
|
|
.contentType(MediaType.APPLICATION_JSON)
|
|
.content("{\"stockoutId\":\"CKD-EXISTING\"}"))
|
|
.andExpect(status().isOk())
|
|
.andExpect(jsonPath("$.code").value(200))
|
|
.andExpect(jsonPath("$.data[0].stockoutDetailId").value("CKD-EXISTING-1"));
|
|
|
|
verify(details).selectOutStockoutDetailByStockoutGuid("order-guid");
|
|
}
|
|
|
|
@Test
|
|
void existingOrderWithoutDetailsRetainsSuccessfulEmptyResponse() {
|
|
OutStockout order = new OutStockout();
|
|
order.setStockoutGuid("order-guid");
|
|
when(orders.selectOutStockoutList(order)).thenReturn(List.of(order));
|
|
when(details.selectOutStockoutDetailByStockoutGuid("order-guid")).thenReturn(Collections.emptyList());
|
|
|
|
AjaxResult result = controller.OutFillPkDetail(order);
|
|
|
|
assertThat(result.isSuccess()).isTrue();
|
|
assertThat(result.get("data")).isEqualTo(Collections.emptyList());
|
|
}
|
|
|
|
@Test
|
|
void databaseFailureIsNotMisreportedAsMissingOrder() {
|
|
OutStockout query = new OutStockout();
|
|
DataAccessResourceFailureException failure = new DataAccessResourceFailureException("Database unavailable");
|
|
when(orders.selectOutStockoutList(query)).thenThrow(failure);
|
|
|
|
assertThatThrownBy(() -> controller.OutFillPkDetail(query)).isSameAs(failure);
|
|
verifyNoInteractions(details);
|
|
}
|
|
}
|