package jnpf.flowable.service; import jnpf.dmsBusinessOccupancy.BusinessFileIneligibleException; import jnpf.dmsBusinessOccupancy.BusinessFileEligibilityService.Reason; import jnpf.flowable.mapper.DmsLifecycleNativeFormMapper; import org.junit.Test; import java.util.List; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class DmsLifecycleEligibilityMessagesTest { private final DmsLifecycleNativeFormMapper mapper = mock(DmsLifecycleNativeFormMapper.class); @Test public void readsOnlineTextAgainAndUsesLiteralFileNumber() { var failure = new BusinessFileIneligibleException("MM-$1\\006", List.of(Reason.FILE_OCCUPIED)); when(mapper.eligibilityMessages("tenant", "FILE_OCCUPIED")) .thenReturn(List.of("文件【{number}】已有未完成申请"), List.of("请先完成【{number}】的申请")); assertEquals("文件【MM-$1\\006】已有未完成申请", DmsLifecycleEligibilityMessages.render(mapper, "tenant", failure)); assertEquals("请先完成【MM-$1\\006】的申请", DmsLifecycleEligibilityMessages.render(mapper, "tenant", failure)); verify(mapper, times(2)).eligibilityMessages("tenant", "FILE_OCCUPIED"); } @Test public void retainsAllReasonsWithoutDisplayingMachineCodes() { var failure = new BusinessFileIneligibleException("A", List.of(Reason.PENDING_VERSION, Reason.FILE_OCCUPIED)); when(mapper.eligibilityMessages("0", "PENDING_VERSION")).thenReturn(List.of("【{number}】存在待生效版本")); when(mapper.eligibilityMessages("0", "FILE_OCCUPIED")).thenReturn(List.of("【{number}】已有未完成申请")); assertEquals("【A】存在待生效版本\n【A】已有未完成申请", DmsLifecycleEligibilityMessages.render(mapper, "0", failure)); assertEquals(List.of(Reason.PENDING_VERSION, Reason.FILE_OCCUPIED), failure.getReasons()); } @Test public void missingAmbiguousAndUnavailableConfigurationNeverExposeInternalCodes() { var failure = new BusinessFileIneligibleException("A", List.of(Reason.FILE_OCCUPIED)); when(mapper.eligibilityMessages("0", "FILE_OCCUPIED")) .thenReturn(List.of(), List.of("one", "two")) .thenThrow(new IllegalStateException("internal SQL")); for (int i = 0; i < 3; i++) { String text = DmsLifecycleEligibilityMessages.render(mapper, "0", failure); assertTrue(text.contains("【A】")); assertFalse(text.contains("FILE_OCCUPIED")); assertFalse(text.contains("internal SQL")); } } }