liu
6 天以前 f8ccc5ab312ab7c5d6c7eb7fac4e37924f513869
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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<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;
    }
}