package jnpf.dmsService; import jnpf.dmsEntity.DmsWailaiWenjianXinzengShenheEntity; import jnpf.dmsEntity.DmsWenjianBanbenEntity; import jnpf.dmsEntity.banben.DmsWenjianBanbenJiesuanModel; import jnpf.dmsEntity.storage.approval.DmsApprovedBatch; import jnpf.dmsMapper.DmsWailaiWenjianXinzengShenheMapper; import jnpf.exception.DataException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.util.Date; import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class DmsExternalApprovedSettlementServiceTest { @Mock DmsWailaiWenjianXinzengShenheMapper audits; @Mock DmsApprovedFileProjection projection; @Mock DmsWenjianYewuBanbenService versions; @InjectMocks DmsExternalApprovedSettlementService service; @Test void appliesApprovedVersionAndCategoryToOneBusinessResource() { DmsApprovedBatch batch = batch(); DmsWailaiWenjianXinzengShenheEntity audit = audit(); when(audits.selectByFlowForUpdate("tenant", "flow", "task")).thenReturn(List.of(audit)); doAnswer(call -> { DmsWenjianBanbenJiesuanModel model = call.getArgument(0); model.setCenterVersionLabel("D(01)"); return null; }).when(projection).enrich(any()); DmsWenjianBanbenEntity result = new DmsWenjianBanbenEntity(); result.setId("version"); result.setWenjianId("resource"); result.setShengxiaoShijian(new Date()); when(versions.createInitialVersion(any())).thenReturn(result); when(audits.updateEffectiveVersion(audit)).thenReturn(1); service.apply(batch); verify(versions).createInitialVersion(argThat(model -> "wailaiWenjian".equals(model.getWenjianLeixing()) && model.getWenjianFenlei() == null && "D(01)".equals(model.getCenterVersionLabel()) && "EXT-1".equals(model.getWenjianBianhao()) && model.getWenjianBianhaoId() == null)); assertEquals("resource", audit.getWenjianId()); assertEquals("version", audit.getShengxiaoWenjianBanbenId()); } @Test void refusesDifferentCenterVersionWithoutWritingBusinessResource() { when(audits.selectByFlowForUpdate("tenant", "flow", "task")).thenReturn(List.of(audit())); doAnswer(call -> { DmsWenjianBanbenJiesuanModel model = call.getArgument(0); model.setCenterVersionLabel("D(00)"); return null; }).when(projection).enrich(any()); assertThrows(DataException.class, () -> service.apply(batch())); verifyNoInteractions(versions); } private DmsApprovedBatch batch() { DmsApprovedBatch batch = new DmsApprovedBatch(); batch.setTenantId("tenant"); batch.setFlowId("flow"); batch.setTaskId("task"); batch.setAuditId("audit"); batch.setActorId("actor"); return batch; } private DmsWailaiWenjianXinzengShenheEntity audit() { DmsWailaiWenjianXinzengShenheEntity audit = new DmsWailaiWenjianXinzengShenheEntity(); audit.setId("audit"); audit.setFlowState(2); audit.setWailaiWenjianBianhao("EXT-1"); audit.setWenjianMingcheng("External"); audit.setBanbenhao("D(01)"); audit.setBizFiles("[{}]"); audit.setWenjianMuluId("folder"); audit.setBumenId("dept"); return audit; } }