刘光辉
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package jnpf.dmsService;
 
import jnpf.dmsEntity.DmsWenjianBanbenEntity;
import jnpf.dmsEntity.DmsWenjianZiyuanEntity;
import jnpf.dmsEntity.permission.entity.DmsFileVersionEntity;
import jnpf.dmsEntity.storage.entity.DmsFileObjectEntity;
import jnpf.dmsMapper.DmsFileObjectMapper;
import jnpf.dmsMapper.DmsFileVersionMapper;
import jnpf.dmsMapper.DmsWenjianBanbenMapper;
import jnpf.dmsMapper.DmsWenjianZiyuanMapper;
import jnpf.exception.DataException;
import org.junit.jupiter.api.Test;
 
import java.util.UUID;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
 
class DmsWorkflowFileResolutionServiceTest {
    private static final String TENANT_ID = "tenant-1";
    private static final UUID DOCUMENT_ID = UUID.fromString("018f0000-0000-7000-8000-000000000831");
    private static final UUID VERSION_ID = UUID.fromString("018f0000-0000-7000-8000-000000000832");
 
    @Test
    void resolvesNumberDetailReferenceAndRequestedBusinessVersion() {
        Fixture fixture = new Fixture();
        DmsWenjianZiyuanEntity file = file();
        DmsWenjianBanbenEntity businessVersion = businessVersion();
        DmsFileVersionEntity version = fileVersion();
        when(fixture.fileMapper.selectByIdForUpdate(TENANT_ID, "number-detail-1")).thenReturn(null);
        when(fixture.fileMapper.selectActiveByNumberDetailForUpdate(TENANT_ID, "number-detail-1"))
                .thenReturn(file);
        when(fixture.versionMapper.selectByFileAndVersionLabel(TENANT_ID, "file-1", "V1.0"))
                .thenReturn(businessVersion);
        when(fixture.fileVersionMapper.selectReadableByTenantAndId(TENANT_ID, VERSION_ID))
                .thenReturn(version);
        when(fixture.objectMapper.selectByTenantAndFileVersionId(TENANT_ID, VERSION_ID))
                .thenReturn(new DmsFileObjectEntity());
 
        DmsWorkflowFileResolutionService.ResolvedFile result = fixture.service.resolve(
                TENANT_ID, "detail-1", "number-detail-1", "QM-001", "质量手册", "V1.0");
 
        assertEquals("file-1", result.getBusinessFile().getId());
        assertEquals("business-version-1", result.getBusinessVersion().getId());
        assertEquals(VERSION_ID, result.getFileVersion().getId());
    }
 
    @Test
    void rejectsBusinessFileAndFileCenterDocumentMismatch() {
        Fixture fixture = new Fixture();
        DmsWenjianZiyuanEntity file = file();
        file.setWenjianZhongxinWenjianId(
                UUID.fromString("018f0000-0000-7000-8000-000000000899").toString());
        when(fixture.fileMapper.selectByIdForUpdate(TENANT_ID, "file-1")).thenReturn(file);
        when(fixture.versionMapper.selectById(TENANT_ID, "business-version-1"))
                .thenReturn(businessVersion());
        when(fixture.fileVersionMapper.selectReadableByTenantAndId(TENANT_ID, VERSION_ID))
                .thenReturn(fileVersion());
        when(fixture.objectMapper.selectByTenantAndFileVersionId(TENANT_ID, VERSION_ID))
                .thenReturn(new DmsFileObjectEntity());
 
        assertThrows(DataException.class, () -> fixture.service.resolve(
                TENANT_ID, "detail-1", "file-1", "QM-001", "质量手册", null));
    }
 
    private static DmsWenjianZiyuanEntity file() {
        DmsWenjianZiyuanEntity file = new DmsWenjianZiyuanEntity();
        file.setId("file-1");
        file.setWenjianBianhao("QM-001");
        file.setWenjianMingcheng("质量手册");
        file.setDangqianBanbenId("business-version-1");
        file.setWenjianZhongxinWenjianId(DOCUMENT_ID.toString());
        return file;
    }
 
    private static DmsWenjianBanbenEntity businessVersion() {
        DmsWenjianBanbenEntity version = new DmsWenjianBanbenEntity();
        version.setId("business-version-1");
        version.setWenjianId("file-1");
        version.setWenjianZhongxinBanbenId(VERSION_ID.toString());
        return version;
    }
 
    private static DmsFileVersionEntity fileVersion() {
        DmsFileVersionEntity version = new DmsFileVersionEntity();
        version.setId(VERSION_ID);
        version.setDocumentId(DOCUMENT_ID);
        return version;
    }
 
    private static final class Fixture {
        private final DmsWenjianZiyuanMapper fileMapper = mock(DmsWenjianZiyuanMapper.class);
        private final DmsWenjianBanbenMapper versionMapper = mock(DmsWenjianBanbenMapper.class);
        private final DmsFileVersionMapper fileVersionMapper = mock(DmsFileVersionMapper.class);
        private final DmsFileObjectMapper objectMapper = mock(DmsFileObjectMapper.class);
        private final DmsWorkflowFileResolutionService service =
                new DmsWorkflowFileResolutionService(fileMapper, versionMapper,
                        fileVersionMapper, objectMapper);
    }
}