刘光辉
2 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
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
package jnpf.dmsService;
 
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import jnpf.dmsEntity.DmsDanganCundangShenqingDanganheEntity;
import jnpf.dmsEntity.DmsDanganJieyueFuyinShenqingEntity;
import jnpf.dmsEntity.DmsDanganJieyueFuyinShenqingZixiangEntity;
import jnpf.dmsMapper.DmsDanganCundangShenqingDanganheMapper;
import jnpf.dmsMapper.DmsDanganJieyueFuyinShenqingMapper;
import jnpf.dmsMapper.DmsDanganJieyueFuyinShenqingZixiangMapper;
import jnpf.dmsService.impl.DmsDanganJieyueFuyinShenqingTongguoServiceImpl;
import jnpf.exception.DataException;
import org.apache.ibatis.builder.MapperBuilderAssistant;
import org.apache.ibatis.session.Configuration;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
 
import java.util.Arrays;
import java.util.Date;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
 
class DmsDanganJieyueFuyinShenqingTongguoServiceTest {
 
    @BeforeEach
    void setUp() {
        initialize(DmsDanganJieyueFuyinShenqingEntity.class);
        initialize(DmsDanganJieyueFuyinShenqingZixiangEntity.class);
        initialize(DmsDanganCundangShenqingDanganheEntity.class);
    }
 
    @Test
    void assignsEverySelectedDanganheToTheApprovedApplication() throws Exception {
        DmsDanganJieyueFuyinShenqingMapper shenqingMapper = mock(DmsDanganJieyueFuyinShenqingMapper.class);
        DmsDanganJieyueFuyinShenqingZixiangMapper zixiangMapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
        DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
        when(shenqingMapper.selectList(any())).thenReturn(Arrays.asList(application("loan-1")));
        when(zixiangMapper.selectList(any())).thenReturn(Arrays.asList(detail("box-1"), detail("box-2")));
        when(danganheMapper.update(isNull(), any())).thenReturn(2);
 
        service(shenqingMapper, zixiangMapper, danganheMapper).tongguo("flow-1", "task-1");
 
        ArgumentCaptor<Wrapper<DmsDanganCundangShenqingDanganheEntity>> captor = ArgumentCaptor.forClass(Wrapper.class);
        verify(danganheMapper).update(isNull(), captor.capture());
        com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?> update =
                (com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?>) captor.getValue();
        assertTrue(update.getSqlSet().contains("jieyue_id"));
        assertTrue(update.getParamNameValuePairs().containsValue("loan-1"));
 
        ArgumentCaptor<Wrapper<DmsDanganJieyueFuyinShenqingZixiangEntity>> detailCaptor = ArgumentCaptor.forClass(Wrapper.class);
        verify(zixiangMapper).update(isNull(), detailCaptor.capture());
        com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?> detailUpdate =
                (com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?>) detailCaptor.getValue();
        assertTrue(detailUpdate.getSqlSet().contains("shifou_yitongguo"));
        assertTrue(detailUpdate.getSqlSet().contains("shenqing_ren"));
        assertTrue(detailUpdate.getSqlSet().contains("shenqing_riqi"));
        assertTrue(detailUpdate.getSqlSet().contains("shenqing_bumen"));
        assertTrue(detailUpdate.getParamNameValuePairs().containsValue("yes"));
        assertTrue(detailUpdate.getParamNameValuePairs().containsValue("applicant-1"));
        assertTrue(detailUpdate.getParamNameValuePairs().containsValue("department-1"));
    }
 
    @Test
    void rejectsBlankDanganheIdBeforeUpdatingAnything() {
        DmsDanganJieyueFuyinShenqingMapper shenqingMapper = mock(DmsDanganJieyueFuyinShenqingMapper.class);
        DmsDanganJieyueFuyinShenqingZixiangMapper zixiangMapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
        DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
        when(shenqingMapper.selectList(any())).thenReturn(Arrays.asList(application("loan-1")));
        when(zixiangMapper.selectList(any())).thenReturn(Arrays.asList(detail(" ")));
 
        DataException error = assertThrows(DataException.class,
                () -> service(shenqingMapper, zixiangMapper, danganheMapper).tongguo("flow-1", "task-1"));
 
        assertEquals("档案盒借阅复印申请明细缺少档案盒ID(danganhe_id)", error.getMessage());
        verify(danganheMapper, never()).update(any(), any());
    }
 
    private void initialize(Class<?> entityClass) {
        if (TableInfoHelper.getTableInfo(entityClass) == null) {
            TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""), entityClass);
        }
    }
 
    private DmsDanganJieyueFuyinShenqingTongguoService service(
            DmsDanganJieyueFuyinShenqingMapper shenqingMapper,
            DmsDanganJieyueFuyinShenqingZixiangMapper zixiangMapper,
            DmsDanganCundangShenqingDanganheMapper danganheMapper) {
        return new DmsDanganJieyueFuyinShenqingTongguoServiceImpl(shenqingMapper, zixiangMapper, danganheMapper);
    }
 
    private DmsDanganJieyueFuyinShenqingEntity application(String id) {
        DmsDanganJieyueFuyinShenqingEntity application = new DmsDanganJieyueFuyinShenqingEntity();
        application.setId(id);
        application.setFlowId("flow-1");
        application.setFlowTaskId("task-1");
        application.setShenqingRen("applicant-1");
        application.setShenqingRiqi(new Date(0));
        application.setShenqingBumen("department-1");
        return application;
    }
 
    private DmsDanganJieyueFuyinShenqingZixiangEntity detail(String danganheId) {
        DmsDanganJieyueFuyinShenqingZixiangEntity detail = new DmsDanganJieyueFuyinShenqingZixiangEntity();
        detail.setDanganheId(danganheId);
        return detail;
    }
}