云
4 天以前 bd961491fb449a92e7c357376073e138f99c5a29
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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());}
    }
}