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