package jnpf.dmsService;
|
|
import jnpf.base.ActionResult;
|
import jnpf.dmsEntity.center.DmsCenterDisableCommand;
|
import jnpf.dmsEntity.storage.approval.*;
|
import jnpf.dmsMapper.DmsApprovedDisableMapper;
|
import jnpf.exception.DataException;
|
import org.junit.jupiter.api.*;
|
import org.mockito.ArgumentCaptor;
|
import org.springframework.test.util.ReflectionTestUtils;
|
import java.util.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.Mockito.*;
|
|
class DmsApprovedDisableProcessorTest {
|
DmsApprovedDisableMapper mapper=mock(DmsApprovedDisableMapper.class);
|
DmsApprovedDisableService service=mock(DmsApprovedDisableService.class);
|
DmsApprovedDisableClient client=mock(DmsApprovedDisableClient.class);
|
DmsApprovedDisableProcessor processor=new DmsApprovedDisableProcessor(mapper,service,client);
|
DmsApprovedBatch batch=new DmsApprovedBatch();
|
@BeforeEach void setup() {
|
ReflectionTestUtils.setField(processor,"enabled",true);
|
batch.setId(UUID.randomUUID());batch.setTenantId("tenant");batch.setAuditType("shixiao_shenqing");batch.setLeaseToken("lease");
|
}
|
DmsDisableRequest row() {
|
DmsDisableRequest r=new DmsDisableRequest();r.setId(UUID.randomUUID());r.setBatchId(batch.getId());
|
r.setTenantId("tenant");r.setOperation("yishixiao");r.setStatus("WAITING");return r;
|
}
|
@Test void successfulExecutionPassesLeaseAndRefreshesBatch() {
|
DmsDisableRequest row=row();when(mapper.dueItems("tenant",batch.getId())).thenReturn(List.of(row));
|
when(client.disable(any())).thenReturn(ActionResult.success("完成"));
|
assertDoesNotThrow(()->processor.process(batch));
|
ArgumentCaptor<DmsCenterDisableCommand> captured=ArgumentCaptor.forClass(DmsCenterDisableCommand.class);
|
verify(client).disable(captured.capture());
|
assertEquals("lease",captured.getValue().getLeaseToken());assertEquals(row.getId(),captured.getValue().getRequestId());
|
verify(service).refreshProgress(batch);
|
}
|
@Test void failedItemDoesNotPreventLaterItemOrProgressRefresh() {
|
when(mapper.dueItems("tenant",batch.getId())).thenReturn(List.of(row(),row()));
|
when(client.disable(any())).thenThrow(new DataException("conflict")).thenReturn(ActionResult.success("完成"));
|
assertEquals("conflict",assertThrows(DataException.class,()->processor.process(batch)).getMessage());
|
verify(client,times(2)).disable(any());verify(service).refreshProgress(batch);
|
}
|
@Test void missingOrFailedResponseCannotCountAsSuccess() {
|
when(mapper.dueItems("tenant",batch.getId())).thenReturn(List.of(row(),row()));
|
ActionResult<Void> failed=new ActionResult<>();failed.setCode(409);failed.setMsg("changed");
|
when(client.disable(any())).thenReturn(null,failed);
|
assertEquals(1,assertThrows(DataException.class,()->processor.process(batch)).getSuppressed().length);
|
verify(service).refreshProgress(batch);
|
}
|
@Test void noDueItemsMakesNoDisableAttempt() {
|
when(mapper.dueItems("tenant",batch.getId())).thenReturn(List.of());
|
processor.process(batch);verifyNoInteractions(client);verify(service).refreshProgress(batch);
|
}
|
}
|