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