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