package com.ruoyi.quality.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.quality.dto.QualityInspectDto; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.service.IQualityInspectFileService; import com.ruoyi.quality.service.IQualityInspectParamService; import com.ruoyi.quality.service.IQualityInspectService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.math.BigDecimal; import java.util.Collections; import java.util.Date; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class QualityInspectControllerTest { @Mock private IQualityInspectService inspectService; @Mock private IQualityInspectParamService paramService; @Mock private IQualityInspectFileService fileService; @Mock private ProcurementRecordService procurementRecordService; @InjectMocks private QualityInspectController controller; @Test void addAcceptsCompleteInspection() { QualityInspectDto dto = validInspection(0); when(inspectService.add(dto)).thenReturn(1); AjaxResult result = controller.add(dto); assertTrue(result.isSuccess()); assertEquals(1, result.get(AjaxResult.DATA_TAG)); } @Test void addRejectsInspectionWithoutMetrics() { QualityInspectDto dto = validInspection(0); dto.setQualityInspectParams(Collections.emptyList()); AjaxResult result = controller.add(dto); assertTrue(result.isError()); assertEquals("当前产品未配置检验指标,请先维护指标", result.get(AjaxResult.MSG_TAG)); verify(inspectService, never()).add(any()); } @Test void addRejectsMetricWithoutTestValue() { QualityInspectDto dto = validInspection(0); dto.getQualityInspectParams().get(0).setTestValue(" "); AjaxResult result = controller.add(dto); assertTrue(result.isError()); assertEquals("请填写“硬度”的检验值", result.get(AjaxResult.MSG_TAG)); } @Test void addRejectsOutOfRangeValueWhenMarkedQualified() { QualityInspectDto dto = validInspection(0); dto.getQualityInspectParams().get(0).setTestValue("80"); AjaxResult result = controller.add(dto); assertTrue(result.isError()); assertTrue(String.valueOf(result.get(AjaxResult.MSG_TAG)).contains("不能按合格保存")); verify(inspectService, never()).add(any()); } @Test void assignInspectorOnlyUpdatesInspectorField() { QualityInspect request = new QualityInspect(); request.setId(9L); request.setCheckName("张检验"); QualityInspect stored = new QualityInspect(); stored.setId(9L); stored.setInspectState(0); when(inspectService.getById(9L)).thenReturn(stored); when(inspectService.updateById(any(QualityInspect.class))).thenReturn(true); AjaxResult result = controller.assignInspector(request); assertTrue(result.isSuccess()); verify(inspectService).updateById(any(QualityInspect.class)); } @Test void processInspectionRequiresProcess() { QualityInspectDto dto = validInspection(1); dto.setProcess(null); AjaxResult result = controller.add(dto); assertTrue(result.isError()); assertEquals("过程检验必须选择工序", result.get(AjaxResult.MSG_TAG)); } @Test void updateRejectsSubmittedInspection() { QualityInspectDto dto = validInspection(2); dto.setId(9L); QualityInspect stored = new QualityInspect(); stored.setInspectState(1); when(inspectService.getById(9L)).thenReturn(stored); AjaxResult result = controller.update(dto); assertTrue(result.isError()); assertEquals("已提交的检验记录不能修改", result.get(AjaxResult.MSG_TAG)); verify(inspectService, never()).updateQualityInspect(any()); } @Test void updateAcceptsUnsubmittedInspection() { QualityInspectDto dto = validInspection(2); dto.setId(9L); QualityInspect stored = new QualityInspect(); stored.setInspectState(0); when(inspectService.getById(9L)).thenReturn(stored); when(inspectService.updateQualityInspect(dto)).thenReturn(1); AjaxResult result = controller.update(dto); assertTrue(result.isSuccess()); } @Test void listPageDelegatesByInspectionType() { Page page = new Page<>(1, 10); QualityInspect query = new QualityInspect(); query.setInspectType(2); when(inspectService.qualityInspectListPage(page, query)).thenReturn(page); AjaxResult result = controller.qualityInspectListPage(page, query); assertTrue(result.isSuccess()); assertEquals(page, result.get(AjaxResult.DATA_TAG)); } private QualityInspectDto validInspection(int inspectType) { QualityInspectDto dto = new QualityInspectDto(); dto.setInspectType(inspectType); dto.setProductId(10L); dto.setCheckTime(new Date()); dto.setQuantity(BigDecimal.ONE); dto.setCheckResult("合格"); dto.setProcess(inspectType == 1 ? "装配" : null); QualityInspectParam parameter = new QualityInspectParam(); parameter.setParameterItem("硬度"); parameter.setStandardValue("50-55"); parameter.setTestValue("52"); dto.setQualityInspectParams(Collections.singletonList(parameter)); return dto; } }