package jnpf.message.service; import jnpf.message.entity.MessageTemplateConfigEntity; import jnpf.message.mapper.DmsUpgradeMessageMapper; import jnpf.message.model.DmsUpgradeMessage; import org.junit.jupiter.api.Test; import org.springframework.transaction.support.TransactionSynchronizationManager; import java.util.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; class DmsUpgradeMessageServiceTest { @Test void duplicateUserOrRetryNeverInsertsSecondMessage() { var mapper=mock(DmsUpgradeMessageMapper.class); var service=new DmsUpgradeMessageService(mapper); var template=new MessageTemplateConfigEntity();template.setTitle("{@DocumentNo}");template.setContent("文件 {@DocumentName}"); when(mapper.templates("tenant")).thenReturn(List.of(template)); when(mapper.claimDelivery("tenant","task","user")).thenReturn(1,0); when(mapper.insertMessage(any(),eq("tenant"))).thenReturn(1); var request=new DmsUpgradeMessage();request.setTenantId("tenant");request.setTaskId("task"); request.setToUserIds(List.of("user","user"));request.setParameters(Map.of("DocumentNo","D-1","DocumentName","<文件>")); TransactionSynchronizationManager.initSynchronization(); try { assertTrue(service.send(request));assertTrue(service.send(request)); verify(mapper,times(1)).insertMessage(argThat(m -> m.getBodyText().contains("<文件>")),eq("tenant")); } finally {TransactionSynchronizationManager.clearSynchronization();} } @Test void unknownPlaceholderCannotSilentlySendAndValuesAreNotReinterpreted() { assertThrows(RuntimeException.class,()->DmsUpgradeMessageService.render("{@Missing}",Map.of(),false)); assertEquals("{@Other}",DmsUpgradeMessageService.render("{@DocumentName}",Map.of("DocumentName","{@Other}"),false)); } }