| | |
| | | @InjectMocks PdSealService service; |
| | | @Mock JdbcTemplate jdbc; |
| | | @Mock BpmTaskService tasks; |
| | | @Test void imageLookupIsScopedToCurrentTenant() { |
| | | cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder.setTenantId(42L); |
| | | try { |
| | | byte[] image = {1, 2}; |
| | | when(jdbc.queryForList(anyString(), any(Object[].class))) |
| | | .thenReturn(List.of(Map.of("image_data", image))); |
| | | assertArrayEquals(image, service.getImage(7)); |
| | | verify(jdbc).queryForList(contains("tenant_id=? AND deleted=0"), eq(7L), eq(42L)); |
| | | } finally { |
| | | cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder.clear(); |
| | | } |
| | | } |
| | | @Test void refusesImageWhenSealIsNotFound() { |
| | | when(jdbc.queryForList(anyString(), any(Object[].class))).thenReturn(List.of()); |
| | | assertThrows(ServiceException.class, () -> service.getImage(7)); |
| | | } |
| | | @Test void refusesDownloadWithoutApprovedApplication() { |
| | | when(jdbc.queryForList(anyString(), any(Object[].class))).thenReturn(List.of()); |
| | | assertThrows(ServiceException.class, () -> service.download(1, 7)); |
| | |
| | | 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();} |