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());
|
}
|
}
|