1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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 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<QualityInspect> 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;
    }
}