刘光辉
4 小时以前 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
package jnpf.dmsService;
 
import jnpf.dmsEntity.banben.DmsWenjianBanbenJiesuanModel;
import jnpf.dmsEntity.permission.entity.DmsFileVersionEntity;
import jnpf.dmsEntity.storage.approval.DmsApprovedItem;
import jnpf.dmsIntegration.audit.DmsVersionStateAuditRow;
import jnpf.dmsMapper.*;
import jnpf.exception.DataException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.*;
import org.mockito.junit.jupiter.MockitoExtension;
import java.time.LocalDate;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
 
@ExtendWith(MockitoExtension.class)
class DmsApprovedFileProjectionTest {
    @Mock DmsApprovedBatchMapper receipts;
    @Mock jnpf.dmsService.center.DmsCenterQueryService center;
    @Mock DmsApprovedMetadataMapper metadata;
    @InjectMocks DmsApprovedFileProjection projection;
 
    @org.junit.jupiter.params.ParameterizedTest
    @org.junit.jupiter.params.provider.CsvSource({"audit:zhuwenjian,yes", "audit:jilu:row,yes", "audit:jilu:row,no"})
    void projectsRegisteredAuthorAndObjectWithNativeDepartment(String sourceKey, String controlFlag) {
        DmsWenjianBanbenJiesuanModel model = fixture();
        DmsApprovedItem item = receipts.item("t", "source");
        item.setSourceKey(sourceKey); item.setShifouShoukong(controlFlag);
        DmsWenjianBanbenJiesuanModel source = new DmsWenjianBanbenJiesuanModel();
        source.setZhidingrenBumenId("author-department");
        source.setBianhaoShiyongRenId("number-owner"); source.setShenheLiuchengId("flow");
        source.setShenheLiuchengRenwuId("task");
        when(metadata.selectSource("t", "xinzeng_shenhe", "audit", "row")).thenReturn(source);
        projection.enrich(model);
        assertEquals("author", model.getZhidingRenId());
        assertEquals(java.sql.Date.valueOf("2026-09-14"), model.getZhidingRiqi());
        assertEquals("author-department", model.getZhidingrenBumenId());
        assertEquals("018f0000-0000-7000-8000-000000000999", model.getWenjianDuixiangId());
        assertEquals("flow", model.getShenheLiuchengId());
        assertEquals("task", model.getShenheLiuchengRenwuId());
        assertEquals(item.getFileVersionId().toString(), model.getCenterVersionId());
        assertEquals(controlFlag, model.getShifouShoukong());
    }
 
    @Test void rejectsMissingOfficialObjectBeforeBusinessWrite() {
        DmsWenjianBanbenJiesuanModel model = fixture();
        assertThrows(DataException.class, () -> projection.enrich(model));
        assertNull(model.getCenterVersionId());
    }
 
    @Test void rejectsMissingTaskControlFlagInsteadOfWritingNull() {
        DmsWenjianBanbenJiesuanModel model = fixture();
        receipts.item("t", "source").setShifouShoukong(null);
        when(metadata.selectSource("t", "xinzeng_shenhe", "audit", "row"))
                .thenReturn(new DmsWenjianBanbenJiesuanModel());
        assertThrows(DataException.class, () -> projection.enrich(model));
        assertNull(model.getCenterVersionId());
    }
 
    private DmsWenjianBanbenJiesuanModel fixture() {
        DmsWenjianBanbenJiesuanModel model = new DmsWenjianBanbenJiesuanModel();
        model.setTenantId("t"); model.setLaiyuanYewuJian("source");
        model.setLaiyuanDanjuLeixing("xinzeng_shenhe"); model.setLaiyuanDanjuId("audit"); model.setLaiyuanZixiangId("row");
        DmsApprovedItem item = new DmsApprovedItem();
        item.setSourceKey("source"); item.setShifouShoukong("no");
        item.setDocumentId(UUID.randomUUID()); item.setFileVersionId(UUID.randomUUID());
        DmsFileVersionEntity version = new DmsFileVersionEntity();
        version.setDocumentId(item.getDocumentId()); version.setPreparedBy("author");
        version.setPreparedOn(LocalDate.of(2026,9,14)); version.setVersionLabel("D(00)");
        DmsVersionStateAuditRow state = new DmsVersionStateAuditRow();
        state.setLifecycleStatus("EFFECTIVE"); state.setEffectiveFrom(new java.util.Date());
        when(receipts.item("t", "source")).thenReturn(item);
        when(center.version("t", item.getFileVersionId())).thenReturn(new jnpf.dmsEntity.center.DmsCenterVersionSnapshot(
                item.getDocumentId(), item.getFileVersionId(), version.getVersionLabel(), "hash", "author", version.getPreparedOn(),
                UUID.fromString("018f0000-0000-7000-8000-000000000999"), "EFFECTIVE", state.getEffectiveFrom(), null));
        return model;
    }
}