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
package com.ruoyi.quality.service;
 
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.service.impl.QualityInspectServiceImpl;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
 
import java.util.Collections;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
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 QualityInspectServiceImplTest {
 
    @Mock private QualityInspectMapper inspectMapper;
    @Mock private IQualityInspectParamService paramService;
    @Mock private QualityTestStandardMapper standardMapper;
    @Mock private QualityUnqualifiedMapper unqualifiedMapper;
    @Mock private SalesLedgerProductMapper productMapper;
    @Mock private ProcurementRecordService procurementRecordService;
    @InjectMocks private QualityInspectServiceImpl service;
 
    @Test
    void addPersistsInspectionAndMetrics() {
        QualityInspectDto dto = new QualityInspectDto();
        QualityInspectParam parameter = new QualityInspectParam();
        dto.setQualityInspectParams(Collections.singletonList(parameter));
        when(inspectMapper.insert(any(QualityInspect.class))).thenAnswer(invocation -> {
            QualityInspect inspect = invocation.getArgument(0);
            inspect.setId(12L);
            return 1;
        });
        when(paramService.saveBatch(dto.getQualityInspectParams())).thenReturn(true);
 
        int result = service.add(dto);
 
        assertEquals(1, result);
        ArgumentCaptor<QualityInspect> inspectCaptor = ArgumentCaptor.forClass(QualityInspect.class);
        verify(inspectMapper).insert(inspectCaptor.capture());
        assertEquals(0, inspectCaptor.getValue().getInspectState());
        assertEquals(12L, parameter.getInspectId());
    }
 
    @Test
    void submitRejectsRepeatedSubmissionBeforeCreatingSideEffects() {
        QualityInspect submitted = new QualityInspect();
        submitted.setId(5L);
        submitted.setInspectState(1);
        when(inspectMapper.selectById(5L)).thenReturn(submitted);
 
        QualityInspect request = new QualityInspect();
        request.setId(5L);
        ServiceException error = assertThrows(ServiceException.class, () -> service.submit(request));
 
        assertEquals("检验记录已提交,请勿重复操作", error.getMessage());
        verify(unqualifiedMapper, never()).insert(any());
        verify(procurementRecordService, never()).add(any());
    }
 
    @Test
    void submitRejectsInspectionWithoutMetrics() {
        QualityInspect stored = pendingInspection();
        when(inspectMapper.selectById(5L)).thenReturn(stored);
        when(paramService.list(any())).thenReturn(Collections.emptyList());
 
        QualityInspect request = new QualityInspect();
        request.setId(5L);
        ServiceException error = assertThrows(ServiceException.class, () -> service.submit(request));
 
        assertEquals("检验项目为空,不能提交", error.getMessage());
    }
 
    @Test
    void submitRejectsMetricWithoutTestValue() {
        QualityInspect stored = pendingInspection();
        QualityInspectParam parameter = new QualityInspectParam();
        parameter.setParameterItem("硬度");
        when(inspectMapper.selectById(5L)).thenReturn(stored);
        when(paramService.list(any())).thenReturn(Collections.singletonList(parameter));
 
        QualityInspect request = new QualityInspect();
        request.setId(5L);
        ServiceException error = assertThrows(ServiceException.class, () -> service.submit(request));
 
        assertEquals("检验项目“硬度”尚未填写检验值", error.getMessage());
    }
 
    private QualityInspect pendingInspection() {
        QualityInspect stored = new QualityInspect();
        stored.setId(5L);
        stored.setInspectState(0);
        stored.setCheckResult("合格");
        return stored;
    }
}