package jnpf.dmsService;
|
import jnpf.base.ActionResult;
|
import jnpf.dmsEntity.storage.DmsTemplateNotification;
|
import jnpf.dmsMapper.DmsTemplateNotificationMapper;
|
import jnpf.message.SentMessageApi;
|
import org.junit.jupiter.api.Test;
|
import java.util.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.Mockito.*;
|
class DmsTemplateNotificationServiceTest {
|
DmsTemplateNotificationMapper mapper = mock(DmsTemplateNotificationMapper.class);
|
SentMessageApi api = mock(SentMessageApi.class);
|
DmsTemplateNotificationService service = new DmsTemplateNotificationService(mapper, api);
|
private ActionResult<Boolean> response(int code, boolean data) { var r = new ActionResult<Boolean>(); r.setCode(code); r.setData(data); return r; }
|
DmsTemplateNotification event() {
|
var e = new DmsTemplateNotification(); e.setTenantId("tenant"); e.setTaskId("task"); e.setTemplateId("A"); return e;
|
}
|
@Test void retryReadsChangedDepartmentsAndRequiresPositiveAcknowledgement() {
|
var e = event(); when(mapper.claim(eq(e),anyString())).thenReturn(1);
|
when(mapper.template("tenant","A")).thenReturn(Map.of("departments","[\"one\"]","name","旧模板名称"),Map.of("departments","[\"two\"]","name","最新模板名称"));
|
when(mapper.recipients("tenant",List.of("one"))).thenReturn(List.of("u1"));
|
when(mapper.recipients("tenant",List.of("two"))).thenReturn(List.of("u2"));
|
when(api.sendDmsUpgrade(any())).thenReturn(response(500, false),response(200, true));
|
when(mapper.finish(eq(e),anyString(),any(),anyString())).thenReturn(1);
|
service.deliver(e); service.deliver(e);
|
verify(mapper).finish(eq(e),anyString(),contains("确认"),eq("RETRY"));
|
verify(api).sendDmsUpgrade(argThat(m -> m.getToUserIds().equals(List.of("u2")) && "最新模板名称".equals(m.getParameters().get("TemplateName"))));
|
verify(mapper).finish(eq(e),anyString(),isNull(),eq("SENT"));
|
}
|
@Test void emptyDepartmentsCompleteWithoutSendingAndMissingTemplateRetries() {
|
var e=event(); when(mapper.claim(eq(e),anyString())).thenReturn(1);
|
when(mapper.template("tenant","A")).thenReturn(Map.of("departments","[]"),null);
|
when(mapper.finish(eq(e),anyString(),any(),anyString())).thenReturn(1);
|
service.deliver(e); service.deliver(e);
|
verifyNoInteractions(api); verify(mapper).finish(eq(e),anyString(),isNull(),eq("NO_RECIPIENTS"));
|
verify(mapper).finish(eq(e),anyString(),contains("模板"),eq("RETRY"));
|
}
|
@Test void duplicateLeaseDoesNotSendAndMalformedDepartmentConfigurationFails() {
|
service.deliver(event()); verifyNoInteractions(api);
|
assertEquals(List.of("one"),DmsTemplateNotificationService.departmentIds("[\"one\",\"one\"]"));
|
assertThrows(RuntimeException.class,()->DmsTemplateNotificationService.departmentIds("{}"));
|
}
|
}
|