刘光辉
117 分钟以前 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.base.UserInfo;
import jnpf.dmsEntity.operationlog.entity.DmsFileOperationLogEntity;
import jnpf.dmsEntity.operationlog.vo.DmsFileOperationLogPageVO;
import jnpf.dmsEntity.permission.entity.DmsFileVersionEntity;
import jnpf.dmsEntity.permission.enums.DmsPermissionAction;
import jnpf.dmsEntity.permission.enums.DmsResourceType;
import jnpf.dmsMapper.DmsFileOperationLogMapper;
import jnpf.dmsMapper.DmsFileVersionMapper;
import jnpf.dmsPermission.DmsCurrentIdentity;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
 
import java.util.Collections;
import java.util.Date;
import java.util.UUID;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
 
class DmsFileOperationLogServiceTest {
    private final DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
    private final DmsPermissionDecisionService decisionService = mock(DmsPermissionDecisionService.class);
    private final DmsFileVersionMapper fileVersionMapper = mock(DmsFileVersionMapper.class);
    private final DmsFileOperationLogMapper operationLogMapper = mock(DmsFileOperationLogMapper.class);
    private final DmsFileOperationLogService service = new DmsFileOperationLogService(
            currentIdentity, decisionService, fileVersionMapper, operationLogMapper);
    private final UUID documentId = UUID.fromString("018f0000-0000-7000-8000-000000000901");
    private final UUID fileVersionId = UUID.fromString("018f0000-0000-7000-8000-000000000902");
    private UserInfo user;
 
    @BeforeEach
    void setUp() {
        user = new UserInfo();
        user.setTenantId("tenant-1");
        user.setUserId("user-1");
        user.setUserName("张三");
        when(currentIdentity.requireUser()).thenReturn(user);
        when(currentIdentity.tenantId(user)).thenReturn("tenant-1");
    }
 
    @Test
    void recordsDisplayReadyViewLogWithIdempotencyKey() {
        UUID operationId = UUID.fromString("018f0000-0000-7000-8000-000000000903");
 
        service.recordView(user, "tenant-1", documentId, fileVersionId,
                "质量手册.docx", operationId);
 
        ArgumentCaptor<DmsFileOperationLogEntity> captor =
                ArgumentCaptor.forClass(DmsFileOperationLogEntity.class);
        verify(operationLogMapper).insertIgnore(captor.capture());
        DmsFileOperationLogEntity log = captor.getValue();
        assertEquals("VIEW", log.getOperationCode());
        assertEquals("VIEW:" + operationId, log.getOperationKey());
        assertEquals("用户张三查看了文件:质量手册.docx", log.getOperationContent());
    }
 
    @Test
    void recordsDisplayReadyDownloadLogWithIdempotencyKey() {
        UUID operationId = UUID.fromString("018f0000-0000-7000-8000-000000000904");
 
        service.recordDownload(user, "tenant-1", documentId, fileVersionId,
                "质量手册.docx", operationId);
 
        ArgumentCaptor<DmsFileOperationLogEntity> captor =
                ArgumentCaptor.forClass(DmsFileOperationLogEntity.class);
        verify(operationLogMapper).insertIgnore(captor.capture());
        DmsFileOperationLogEntity log = captor.getValue();
        assertEquals("DOWNLOAD", log.getOperationCode());
        assertEquals("DOWNLOAD:" + operationId, log.getOperationKey());
        assertEquals("用户张三下载了文件:质量手册.docx", log.getOperationContent());
    }
 
    @Test
    void queriesDocumentHistoryAfterCheckingReadPermission() {
        DmsFileVersionEntity version = new DmsFileVersionEntity();
        version.setId(fileVersionId);
        version.setDocumentId(documentId);
        when(fileVersionMapper.selectByTenantAndId("tenant-1", fileVersionId)).thenReturn(version);
        when(operationLogMapper.countByDocument("tenant-1", documentId, "查看"))
                .thenReturn(1L);
        DmsFileOperationLogEntity row = new DmsFileOperationLogEntity();
        row.setId(7L);
        row.setOperationCode("VIEW");
        row.setOperationContent("用户张三查看了文件:质量手册.docx");
        row.setOccurredAt(new Date(1234L));
        when(operationLogMapper.selectByDocument("tenant-1", documentId, "查看", 10, 0L))
                .thenReturn(Collections.singletonList(row));
 
        DmsFileOperationLogPageVO page = service.page(fileVersionId, " 查看 ", 1, 10);
 
        verify(decisionService).requireAllowed(DmsResourceType.FILE_VERSION, fileVersionId,
                DmsPermissionAction.READ);
        assertEquals(1L, page.getTotal());
        assertEquals("用户张三查看了文件:质量手册.docx",
                page.getList().get(0).getOperationContent());
    }
}