刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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("{}"));
    }
}