package cn.iocoder.yudao.module.mes.service.pd.seal;
|
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
import org.flowable.task.api.history.HistoricTaskInstance;
|
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.mockito.InjectMocks;
|
import org.mockito.Mock;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
import java.io.*;
|
import java.util.*;
|
import java.util.zip.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
import static org.mockito.ArgumentMatchers.*;
|
import static org.mockito.Mockito.*;
|
|
@ExtendWith(MockitoExtension.class)
|
class PdSealServiceTest {
|
@InjectMocks PdSealService service;
|
@Mock JdbcTemplate jdbc;
|
@Mock BpmTaskService tasks;
|
@Test void refusesDownloadWithoutApprovedApplication() {
|
when(jdbc.queryForList(anyString(), any(Object[].class))).thenReturn(List.of());
|
assertThrows(ServiceException.class, () -> service.download(1, 7));
|
verifyNoInteractions(tasks);
|
}
|
@Test void refusesAutomaticApproval() throws Exception {
|
when(jdbc.queryForList(anyString(), any(Object[].class))).thenReturn(List.of(Map.of("process_instance_id", "p", "document_snapshot", new byte[]{1}, "seal_image", new byte[]{2})));
|
HistoricTaskInstance task=mock(HistoricTaskInstance.class);
|
when(task.getAssignee()).thenReturn("8");
|
when(task.getTaskLocalVariables()).thenReturn(Map.of("TASK_STATUS",2,"TASK_REASON","流程已配置免审批,提交后自动通过"));
|
when(tasks.getTaskListByProcessInstanceId("p",true)).thenReturn(List.of(task));
|
assertThrows(ServiceException.class, () -> service.download(1,7));
|
}
|
@Test void allowsManualApprovalByApplicant() throws Exception {
|
var buffer = new ByteArrayOutputStream();
|
try (var zip = new ZipOutputStream(buffer)) {
|
zip.putNextEntry(new ZipEntry("word/media/seal.png"));
|
zip.write(new byte[]{1});
|
zip.closeEntry();
|
}
|
when(jdbc.queryForList(anyString(), any(Object[].class))).thenReturn(List.of(Map.of(
|
"process_instance_id", "p", "document_snapshot", buffer.toByteArray(), "seal_image", new byte[]{2})));
|
HistoricTaskInstance task = mock(HistoricTaskInstance.class);
|
when(task.getAssignee()).thenReturn("7");
|
when(task.getTaskLocalVariables()).thenReturn(Map.of("TASK_STATUS", 2, "TASK_REASON", ""));
|
when(tasks.getTaskListByProcessInstanceId("p", true)).thenReturn(List.of(task));
|
assertNotNull(service.download(1, 7));
|
}
|
@Test void approvedDownloadEmbedsSelectedImage() throws Exception {
|
var buffer=new ByteArrayOutputStream();
|
try(var zip=new ZipOutputStream(buffer)){zip.putNextEntry(new ZipEntry("word/media/seal.png"));zip.write(new byte[]{1});zip.closeEntry();}
|
when(jdbc.queryForList(anyString(), any(Object[].class))).thenReturn(List.of(Map.of("process_instance_id","p","document_snapshot",buffer.toByteArray(),"seal_image",new byte[]{2,3})));
|
HistoricTaskInstance task=mock(HistoricTaskInstance.class);
|
when(task.getAssignee()).thenReturn("8");
|
when(task.getTaskLocalVariables()).thenReturn(Map.of("TASK_STATUS",2,"TASK_REASON","同意"));
|
when(tasks.getTaskListByProcessInstanceId("p",true)).thenReturn(List.of(task));
|
byte[] result=service.download(1,7);
|
try(var zip=new ZipInputStream(new ByteArrayInputStream(result))){assertEquals("word/media/seal.png",zip.getNextEntry().getName());assertArrayEquals(new byte[]{2,3},zip.readAllBytes());}
|
}
|
}
|