Migrate stream to resource for stability (#6160)

This commit is contained in:
Anthony Stirling
2026-04-23 15:56:31 +01:00
committed by GitHub
parent c294e9b2cb
commit 177c776658
109 changed files with 1390 additions and 855 deletions
@@ -20,11 +20,12 @@ import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.general.BookletImpositionRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -33,14 +34,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class BookletImpositionControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -94,8 +96,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(drainBody(response)).isNotEmpty();
@@ -126,8 +127,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(drainBody(response)).isNotEmpty();
@@ -144,8 +144,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -162,8 +161,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -180,8 +178,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -198,8 +195,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -216,8 +212,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -232,8 +227,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -261,8 +255,7 @@ class BookletImpositionControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(sourceDoc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response =
controller.createBookletImposition(request);
ResponseEntity<Resource> response = controller.createBookletImposition(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -27,11 +27,12 @@ import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.general.CropPdfForm;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -41,14 +42,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
@DisplayName("CropController Tests")
class CropControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -205,7 +207,7 @@ class CropControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDocument))
.thenReturn(newDocument);
ResponseEntity<StreamingResponseBody> response = cropController.cropPdf(request);
ResponseEntity<Resource> response = cropController.cropPdf(request);
assertThat(response)
.isNotNull()
@@ -242,7 +244,7 @@ class CropControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDocument))
.thenReturn(newDocument);
ResponseEntity<StreamingResponseBody> response = cropController.cropPdf(request);
ResponseEntity<Resource> response = cropController.cropPdf(request);
assertThat(response).isNotNull();
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
@@ -282,7 +284,7 @@ class CropControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc))
.thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response = cropController.cropPdf(request);
ResponseEntity<Resource> response = cropController.cropPdf(request);
assertThat(response).isNotNull();
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
@@ -313,7 +315,7 @@ class CropControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDoc))
.thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response = cropController.cropPdf(request);
ResponseEntity<Resource> response = cropController.cropPdf(request);
assertThat(response).isNotNull();
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
@@ -676,7 +678,7 @@ class CropControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDocument))
.thenReturn(newDocument);
ResponseEntity<StreamingResponseBody> response = cropController.cropPdf(request);
ResponseEntity<Resource> response = cropController.cropPdf(request);
assertThat(response).isNotNull();
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
@@ -704,7 +706,7 @@ class CropControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDocument))
.thenReturn(newDocument);
ResponseEntity<StreamingResponseBody> response = cropController.cropPdf(request);
ResponseEntity<Resource> response = cropController.cropPdf(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
verify(mockDocument, times(1)).close();
@@ -25,10 +25,10 @@ import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.controller.api.EditTableOfContentsController.BookmarkItem;
import stirling.software.SPDF.model.api.EditTableOfContentsRequest;
@@ -255,7 +255,7 @@ class EditTableOfContentsControllerTest {
.save(any(File.class));
// When
ResponseEntity<StreamingResponseBody> result =
ResponseEntity<Resource> result =
editTableOfContentsController.editTableOfContents(request);
// Then
@@ -319,7 +319,7 @@ class EditTableOfContentsControllerTest {
.save(any(File.class));
// When
ResponseEntity<StreamingResponseBody> result =
ResponseEntity<Resource> result =
editTableOfContentsController.editTableOfContents(request);
// Then
@@ -373,7 +373,7 @@ class EditTableOfContentsControllerTest {
.save(any(File.class));
// When
ResponseEntity<StreamingResponseBody> result =
ResponseEntity<Resource> result =
editTableOfContentsController.editTableOfContents(request);
// Then
@@ -18,11 +18,12 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.general.MergeMultiplePagesRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -31,14 +32,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class MultiPageLayoutControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -97,7 +99,7 @@ class MultiPageLayoutControllerTest {
req.setAddBorder(Boolean.FALSE);
req.setFileInput(fileWithExt);
ResponseEntity<StreamingResponseBody> resp = controller.mergeMultiplePagesIntoOne(req);
ResponseEntity<Resource> resp = controller.mergeMultiplePagesIntoOne(req);
Assertions.assertEquals(HttpStatus.OK, resp.getStatusCode());
Assertions.assertEquals(MediaType.APPLICATION_PDF, resp.getHeaders().getContentType());
Assertions.assertNotNull(resp.getBody());
@@ -122,7 +124,7 @@ class MultiPageLayoutControllerTest {
req.setAddBorder(Boolean.TRUE);
req.setFileInput(fileWithExt);
ResponseEntity<StreamingResponseBody> resp = controller.mergeMultiplePagesIntoOne(req);
ResponseEntity<Resource> resp = controller.mergeMultiplePagesIntoOne(req);
Assertions.assertEquals(HttpStatus.OK, resp.getStatusCode());
Assertions.assertEquals(MediaType.APPLICATION_PDF, resp.getHeaders().getContentType());
Assertions.assertNotNull(resp.getBody());
@@ -145,7 +147,7 @@ class MultiPageLayoutControllerTest {
req.setAddBorder(Boolean.TRUE);
req.setFileInput(fileNoExt);
ResponseEntity<StreamingResponseBody> resp = controller.mergeMultiplePagesIntoOne(req);
ResponseEntity<Resource> resp = controller.mergeMultiplePagesIntoOne(req);
Assertions.assertEquals(
"name_multi_page_layout.pdf",
resp.getHeaders().getContentDisposition().getFilename());
@@ -25,12 +25,13 @@ import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.general.OverlayPdfsRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -39,14 +40,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class PdfOverlayControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -107,7 +109,7 @@ class PdfOverlayControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(((MultipartFile) inv.getArgument(0)).getBytes()));
ResponseEntity<StreamingResponseBody> response = controller.overlayPdfs(request);
ResponseEntity<Resource> response = controller.overlayPdfs(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -141,7 +143,7 @@ class PdfOverlayControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(((MultipartFile) inv.getArgument(0)).getBytes()));
ResponseEntity<StreamingResponseBody> response = controller.overlayPdfs(request);
ResponseEntity<Resource> response = controller.overlayPdfs(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -173,7 +175,7 @@ class PdfOverlayControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(((MultipartFile) inv.getArgument(0)).getBytes()));
ResponseEntity<StreamingResponseBody> response = controller.overlayPdfs(request);
ResponseEntity<Resource> response = controller.overlayPdfs(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -204,7 +206,7 @@ class PdfOverlayControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(((MultipartFile) inv.getArgument(0)).getBytes()));
ResponseEntity<StreamingResponseBody> response = controller.overlayPdfs(request);
ResponseEntity<Resource> response = controller.overlayPdfs(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -294,7 +296,7 @@ class PdfOverlayControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(((MultipartFile) inv.getArgument(0)).getBytes()));
ResponseEntity<StreamingResponseBody> response = controller.overlayPdfs(request);
ResponseEntity<Resource> response = controller.overlayPdfs(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -327,7 +329,7 @@ class PdfOverlayControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(((MultipartFile) inv.getArgument(0)).getBytes()));
ResponseEntity<StreamingResponseBody> response = controller.overlayPdfs(request);
ResponseEntity<Resource> response = controller.overlayPdfs(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -16,10 +16,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.PDFWithPageNums;
import stirling.software.SPDF.model.api.general.RearrangePagesRequest;
@@ -67,7 +67,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(mockDoc);
when(mockDoc.getNumberOfPages()).thenReturn(5);
ResponseEntity<StreamingResponseBody> response = controller.deletePages(request);
ResponseEntity<Resource> response = controller.deletePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -97,7 +97,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -127,7 +127,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
verify(mockNewDoc).addPage(page1);
@@ -155,7 +155,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
verify(mockNewDoc).addPage(page0);
@@ -181,7 +181,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -208,7 +208,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -232,7 +232,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -256,7 +256,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -284,7 +284,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -308,7 +308,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
// 2 pages * 3 duplicates = 6 addPage calls
@@ -333,7 +333,7 @@ class RearrangePagesPDFControllerTest {
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(mockDoc))
.thenReturn(mockNewDoc);
ResponseEntity<StreamingResponseBody> response = controller.rearrangePages(request);
ResponseEntity<Resource> response = controller.rearrangePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -20,10 +20,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.general.RotatePDFRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -75,7 +75,7 @@ public class RotationControllerTest {
when(mockPage.getRotation()).thenReturn(0);
// Act
ResponseEntity<StreamingResponseBody> response = rotationController.rotatePDF(request);
ResponseEntity<Resource> response = rotationController.rotatePDF(request);
// Assert
verify(mockPage).setRotation(90);
@@ -20,11 +20,12 @@ import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.general.ScalePagesRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -33,14 +34,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class ScalePagesControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -101,7 +103,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -123,7 +125,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -143,7 +145,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -163,7 +165,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -183,7 +185,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -220,7 +222,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -240,7 +242,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -281,7 +283,7 @@ class ScalePagesControllerTest {
setupFactory();
ResponseEntity<StreamingResponseBody> response = controller.scalePages(request);
ResponseEntity<Resource> response = controller.scalePages(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -31,9 +31,10 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.config.EndpointConfiguration;
import stirling.software.SPDF.model.api.converters.ConvertEbookToPdfRequest;
@@ -48,14 +49,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ConvertEbookToPDFControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -145,14 +147,13 @@ class ConvertEbookToPDFControllerTest {
return execResult;
});
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("result".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("result".getBytes());
wr.when(() -> WebResponseUtils.pdfFileToWebResponse(any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
gu.when(() -> GeneralUtils.generateFilename("ebook.epub", "_convertedToPDF.pdf"))
.thenReturn("ebook_convertedToPDF.pdf");
ResponseEntity<StreamingResponseBody> response = controller.convertEbookToPdf(request);
ResponseEntity<Resource> response = controller.convertEbookToPdf(request);
assertSame(expectedResponse, response);
@@ -262,11 +263,11 @@ class ConvertEbookToPDFControllerTest {
gu.when(() -> GeneralUtils.optimizePdfWithGhostscript(Mockito.any(byte[].class)))
.thenReturn(optimizedBytes);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(optimizedBytes);
ResponseEntity<Resource> expectedResponse = streamingOk(optimizedBytes);
wr.when(() -> WebResponseUtils.pdfFileToWebResponse(any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.convertEbookToPdf(request);
ResponseEntity<Resource> response = controller.convertEbookToPdf(request);
assertSame(expectedResponse, response);
gu.verify(() -> GeneralUtils.optimizePdfWithGhostscript(Mockito.any(byte[].class)));
@@ -23,11 +23,12 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.configuration.RuntimePathConfig;
import stirling.software.common.model.api.converters.EmlToPdfRequest;
@@ -40,14 +41,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ConvertEmlToPDFTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -82,7 +84,7 @@ class ConvertEmlToPDFTest {
EmlToPdfRequest request = new EmlToPdfRequest();
request.setFileInput(emptyFile);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertTrue(
@@ -98,7 +100,7 @@ class ConvertEmlToPDFTest {
EmlToPdfRequest request = new EmlToPdfRequest();
request.setFileInput(file);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertTrue(
@@ -113,7 +115,7 @@ class ConvertEmlToPDFTest {
EmlToPdfRequest request = new EmlToPdfRequest();
request.setFileInput(file);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
}
@@ -126,7 +128,7 @@ class ConvertEmlToPDFTest {
EmlToPdfRequest request = new EmlToPdfRequest();
request.setFileInput(file);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertTrue(
@@ -146,7 +148,7 @@ class ConvertEmlToPDFTest {
when(runtimePathConfig.getWeasyPrintPath()).thenReturn("/usr/bin/weasyprint");
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(pdfBytes);
ResponseEntity<Resource> expectedResponse = streamingOk(pdfBytes);
try (MockedStatic<EmlToPdf> emlMock = Mockito.mockStatic(EmlToPdf.class);
MockedStatic<WebResponseUtils> wrMock =
@@ -170,7 +172,7 @@ class ConvertEmlToPDFTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertArrayEquals(pdfBytes, drainBody(response));
@@ -188,7 +190,7 @@ class ConvertEmlToPDFTest {
request.setFileInput(file);
request.setDownloadHtml(true);
ResponseEntity<StreamingResponseBody> expectedResponse =
ResponseEntity<Resource> expectedResponse =
streamingOk(htmlContent.getBytes(StandardCharsets.UTF_8));
try (MockedStatic<EmlToPdf> emlMock = Mockito.mockStatic(EmlToPdf.class);
@@ -209,7 +211,7 @@ class ConvertEmlToPDFTest {
any(TempFile.class), anyString(), any(MediaType.class)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -235,7 +237,7 @@ class ConvertEmlToPDFTest {
eq(customHtmlSanitizer)))
.thenThrow(new IOException("Parse error"));
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
assertTrue(
@@ -263,7 +265,7 @@ class ConvertEmlToPDFTest {
any(), any(), any(), any(), any(), any(), any()))
.thenReturn(null);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
assertTrue(
@@ -287,7 +289,7 @@ class ConvertEmlToPDFTest {
when(runtimePathConfig.getWeasyPrintPath()).thenReturn("/usr/bin/weasyprint");
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(pdfBytes);
ResponseEntity<Resource> expectedResponse = streamingOk(pdfBytes);
try (MockedStatic<EmlToPdf> emlMock = Mockito.mockStatic(EmlToPdf.class);
MockedStatic<WebResponseUtils> wrMock =
@@ -305,7 +307,7 @@ class ConvertEmlToPDFTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -330,7 +332,7 @@ class ConvertEmlToPDFTest {
any(), any(), any(), any(), any(), any(), any()))
.thenThrow(new InterruptedException("interrupted"));
ResponseEntity<StreamingResponseBody> response = controller.convertEmlToPdf(request);
ResponseEntity<Resource> response = controller.convertEmlToPdf(request);
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
assertTrue(
@@ -20,10 +20,11 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.configuration.RuntimePathConfig;
import stirling.software.common.model.api.converters.HTMLToPdfRequest;
@@ -37,14 +38,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ConvertHtmlToPDFTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -104,7 +106,7 @@ class ConvertHtmlToPDFTest {
when(pdfDocumentFactory.createNewBytesBasedOnOldDocument(pdfBytes))
.thenReturn(processedPdf);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(processedPdf);
ResponseEntity<Resource> expectedResponse = streamingOk(processedPdf);
try (MockedStatic<FileToPdf> ftpMock = Mockito.mockStatic(FileToPdf.class);
MockedStatic<GeneralUtils> guMock = Mockito.mockStatic(GeneralUtils.class);
@@ -131,7 +133,7 @@ class ConvertHtmlToPDFTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.HtmlToPdf(request);
ResponseEntity<Resource> response = controller.HtmlToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -152,7 +154,7 @@ class ConvertHtmlToPDFTest {
when(pdfDocumentFactory.createNewBytesBasedOnOldDocument(pdfBytes))
.thenReturn(processedPdf);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(processedPdf);
ResponseEntity<Resource> expectedResponse = streamingOk(processedPdf);
try (MockedStatic<FileToPdf> ftpMock = Mockito.mockStatic(FileToPdf.class);
MockedStatic<GeneralUtils> guMock = Mockito.mockStatic(GeneralUtils.class);
@@ -179,7 +181,7 @@ class ConvertHtmlToPDFTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.HtmlToPdf(request);
ResponseEntity<Resource> response = controller.HtmlToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -12,9 +12,10 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.config.EndpointConfiguration;
import stirling.software.SPDF.model.api.converters.ConvertToPdfRequest;
@@ -26,14 +27,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ConvertImgPDFControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -22,10 +22,11 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.configuration.RuntimePathConfig;
import stirling.software.common.model.api.GeneralFile;
@@ -39,14 +40,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ConvertMarkdownToPdfTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -106,7 +108,7 @@ class ConvertMarkdownToPdfTest {
when(pdfDocumentFactory.createNewBytesBasedOnOldDocument(any(byte[].class)))
.thenReturn(processedPdf);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(processedPdf);
ResponseEntity<Resource> expectedResponse = streamingOk(processedPdf);
try (MockedStatic<FileToPdf> ftpMock = Mockito.mockStatic(FileToPdf.class);
MockedStatic<GeneralUtils> guMock = Mockito.mockStatic(GeneralUtils.class);
@@ -133,7 +135,7 @@ class ConvertMarkdownToPdfTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.markdownToPdf(generalFile);
ResponseEntity<Resource> response = controller.markdownToPdf(generalFile);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -30,10 +30,11 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.config.EndpointConfiguration;
import stirling.software.SPDF.model.api.converters.ConvertPdfToEpubRequest;
@@ -48,14 +49,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class ConvertPDFToEpubControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -142,7 +144,7 @@ class ConvertPDFToEpubControllerTest {
gu.when(() -> GeneralUtils.generateFilename("novel.pdf", "_convertedToEPUB.epub"))
.thenReturn("novel_convertedToEPUB.epub");
ResponseEntity<StreamingResponseBody> response = controller.convertPdfToEpub(request);
ResponseEntity<Resource> response = controller.convertPdfToEpub(request);
List<String> command = commandCaptor.getValue();
assertEquals(13, command.size());
@@ -234,7 +236,7 @@ class ConvertPDFToEpubControllerTest {
gu.when(() -> GeneralUtils.generateFilename("story.pdf", "_convertedToEPUB.epub"))
.thenReturn("story_convertedToEPUB.epub");
ResponseEntity<StreamingResponseBody> response = controller.convertPdfToEpub(request);
ResponseEntity<Resource> response = controller.convertPdfToEpub(request);
List<String> command = commandCaptor.getValue();
assertTrue(command.stream().noneMatch(arg -> "--chapter".equals(arg)));
@@ -319,7 +321,7 @@ class ConvertPDFToEpubControllerTest {
gu.when(() -> GeneralUtils.generateFilename("book.pdf", "_convertedToAZW3.azw3"))
.thenReturn("book_convertedToAZW3.azw3");
ResponseEntity<StreamingResponseBody> response = controller.convertPdfToEpub(request);
ResponseEntity<Resource> response = controller.convertPdfToEpub(request);
List<String> command = commandCaptor.getValue();
assertEquals("ebook-convert", command.get(0));
@@ -20,10 +20,10 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.PDFWithPageNums;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -81,7 +81,7 @@ class ConvertPDFToExcelControllerTest {
Mockito.eq(true)))
.thenReturn(List.of(1));
ResponseEntity<StreamingResponseBody> response = controller.pdfToExcel(request);
ResponseEntity<Resource> response = controller.pdfToExcel(request);
// tabula may or may not find tables in an empty page
assertNotNull(response);
@@ -21,10 +21,11 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.converters.PdfToPresentationRequest;
import stirling.software.SPDF.model.api.converters.PdfToTextOrRTFRequest;
@@ -40,14 +41,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ConvertPDFToOfficeTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -85,8 +87,7 @@ class ConvertPDFToOfficeTest {
request.setFileInput(pdfFile);
request.setOutputFormat("pptx");
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("pptx-content".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("pptx-content".getBytes());
try (MockedStatic<PDFToFile> mock =
Mockito.mockStatic(PDFToFile.class, Mockito.CALLS_REAL_METHODS)) {
@@ -115,8 +116,7 @@ class ConvertPDFToOfficeTest {
realDoc.addPage(new org.apache.pdfbox.pdmodel.PDPage());
when(pdfDocumentFactory.load(pdfFile)).thenReturn(realDoc);
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("text content".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("text content".getBytes());
try (MockedStatic<GeneralUtils> guMock = Mockito.mockStatic(GeneralUtils.class);
MockedStatic<WebResponseUtils> wrMock =
@@ -131,8 +131,7 @@ class ConvertPDFToOfficeTest {
any(TempFile.class), anyString(), any(MediaType.class)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response =
controller.processPdfToRTForTXT(request);
ResponseEntity<Resource> response = controller.processPdfToRTForTXT(request);
assertSame(expectedResponse, response);
}
@@ -4,16 +4,18 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import org.junit.jupiter.api.BeforeEach;
@@ -22,11 +24,11 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.service.PdfJsonConversionService;
import stirling.software.common.model.api.GeneralFile;
@@ -58,10 +60,11 @@ class ConvertPdfJsonControllerTest {
});
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream in = response.getBody().getInputStream()) {
in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -82,10 +85,17 @@ class ConvertPdfJsonControllerTest {
PDFFile request = new PDFFile();
request.setFileInput(pdfFile);
when(pdfJsonConversionService.convertPdfToJson(pdfFile, false)).thenReturn(jsonBytes);
// Service writes directly to the OutputStream passed by the controller
doAnswer(
inv -> {
OutputStream os = inv.getArgument(2, OutputStream.class);
os.write(jsonBytes);
return null;
})
.when(pdfJsonConversionService)
.convertPdfToJson(eq(pdfFile), eq(false), any(OutputStream.class));
ResponseEntity<StreamingResponseBody> response =
controller.convertPdfToJson(request, false);
ResponseEntity<Resource> response = controller.convertPdfToJson(request, false);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
@@ -100,12 +110,20 @@ class ConvertPdfJsonControllerTest {
PDFFile request = new PDFFile();
request.setFileInput(pdfFile);
when(pdfJsonConversionService.convertPdfToJson(pdfFile, true)).thenReturn(jsonBytes);
doAnswer(
inv -> {
OutputStream os = inv.getArgument(2, OutputStream.class);
os.write(jsonBytes);
return null;
})
.when(pdfJsonConversionService)
.convertPdfToJson(eq(pdfFile), eq(true), any(OutputStream.class));
ResponseEntity<StreamingResponseBody> response = controller.convertPdfToJson(request, true);
ResponseEntity<Resource> response = controller.convertPdfToJson(request, true);
assertEquals(HttpStatus.OK, response.getStatusCode());
verify(pdfJsonConversionService).convertPdfToJson(pdfFile, true);
verify(pdfJsonConversionService)
.convertPdfToJson(eq(pdfFile), eq(true), any(OutputStream.class));
}
@Test
@@ -125,9 +143,16 @@ class ConvertPdfJsonControllerTest {
GeneralFile request = new GeneralFile();
request.setFileInput(jsonFile);
when(pdfJsonConversionService.convertJsonToPdf(jsonFile)).thenReturn(pdfBytes);
doAnswer(
inv -> {
OutputStream os = inv.getArgument(1, OutputStream.class);
os.write(pdfBytes);
return null;
})
.when(pdfJsonConversionService)
.convertJsonToPdf(eq(jsonFile), any(OutputStream.class));
ResponseEntity<StreamingResponseBody> response = controller.convertJsonToPdf(request);
ResponseEntity<Resource> response = controller.convertJsonToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
@@ -150,10 +175,16 @@ class ConvertPdfJsonControllerTest {
PDFFile request = new PDFFile();
request.setFileInput(pdfFile);
when(pdfJsonConversionService.extractDocumentMetadata(eq(pdfFile), any(String.class)))
.thenReturn(jsonBytes);
doAnswer(
inv -> {
OutputStream os = inv.getArgument(2, OutputStream.class);
os.write(jsonBytes);
return null;
})
.when(pdfJsonConversionService)
.extractDocumentMetadata(eq(pdfFile), any(String.class), any(OutputStream.class));
ResponseEntity<StreamingResponseBody> response = controller.extractPdfMetadata(request);
ResponseEntity<Resource> response = controller.extractPdfMetadata(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType());
@@ -175,9 +206,16 @@ class ConvertPdfJsonControllerTest {
byte[] jsonBytes = "{\"content\":[]}".getBytes();
String jobId = "test-job-id";
when(pdfJsonConversionService.extractSinglePage(jobId, 1)).thenReturn(jsonBytes);
doAnswer(
inv -> {
OutputStream os = inv.getArgument(2, OutputStream.class);
os.write(jsonBytes);
return null;
})
.when(pdfJsonConversionService)
.extractSinglePage(eq(jobId), anyInt(), any(OutputStream.class));
ResponseEntity<StreamingResponseBody> response = controller.extractSinglePage(jobId, 1);
ResponseEntity<Resource> response = controller.extractSinglePage(jobId, 1);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
@@ -188,9 +226,16 @@ class ConvertPdfJsonControllerTest {
byte[] jsonBytes = "{\"fonts\":[]}".getBytes();
String jobId = "test-job-id";
when(pdfJsonConversionService.extractPageFonts(jobId, 1)).thenReturn(jsonBytes);
doAnswer(
inv -> {
OutputStream os = inv.getArgument(2, OutputStream.class);
os.write(jsonBytes);
return null;
})
.when(pdfJsonConversionService)
.extractPageFonts(eq(jobId), anyInt(), any(OutputStream.class));
ResponseEntity<StreamingResponseBody> response = controller.extractPageFonts(jobId, 1);
ResponseEntity<Resource> response = controller.extractPageFonts(jobId, 1);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
@@ -21,10 +21,11 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.converters.SvgToPdfRequest;
import stirling.software.SPDF.utils.SvgToPdf;
@@ -37,14 +38,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ConvertSvgToPDFTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -75,7 +77,7 @@ class ConvertSvgToPDFTest {
SvgToPdfRequest request = new SvgToPdfRequest();
request.setFileInput(null);
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertTrue(
@@ -88,7 +90,7 @@ class ConvertSvgToPDFTest {
SvgToPdfRequest request = new SvgToPdfRequest();
request.setFileInput(new MockMultipartFile[0]);
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
}
@@ -102,7 +104,7 @@ class ConvertSvgToPDFTest {
request.setFileInput(new MockMultipartFile[] {txtFile});
request.setCombineIntoSinglePdf(false);
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertTrue(
@@ -118,7 +120,7 @@ class ConvertSvgToPDFTest {
request.setFileInput(new MockMultipartFile[] {emptyFile});
request.setCombineIntoSinglePdf(false);
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
}
@@ -141,7 +143,7 @@ class ConvertSvgToPDFTest {
when(pdfDocumentFactory.createNewBytesBasedOnOldDocument(pdfBytes))
.thenReturn(processedPdf);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(processedPdf);
ResponseEntity<Resource> expectedResponse = streamingOk(processedPdf);
try (MockedStatic<SvgToPdf> svgMock = Mockito.mockStatic(SvgToPdf.class);
MockedStatic<GeneralUtils> guMock = Mockito.mockStatic(GeneralUtils.class);
@@ -159,7 +161,7 @@ class ConvertSvgToPDFTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -188,7 +190,7 @@ class ConvertSvgToPDFTest {
when(pdfDocumentFactory.createNewBytesBasedOnOldDocument(combinedPdf))
.thenReturn(processedPdf);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(processedPdf);
ResponseEntity<Resource> expectedResponse = streamingOk(processedPdf);
try (MockedStatic<SvgToPdf> svgMock = Mockito.mockStatic(SvgToPdf.class);
MockedStatic<GeneralUtils> guMock = Mockito.mockStatic(GeneralUtils.class);
@@ -206,7 +208,7 @@ class ConvertSvgToPDFTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -221,7 +223,7 @@ class ConvertSvgToPDFTest {
request.setFileInput(new MockMultipartFile[] {nullNameFile});
request.setCombineIntoSinglePdf(false);
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
}
@@ -238,7 +240,7 @@ class ConvertSvgToPDFTest {
when(svgSanitizer.sanitize(svgContent)).thenThrow(new IOException("sanitization error"));
ResponseEntity<StreamingResponseBody> response = controller.convertSvgToPdf(request);
ResponseEntity<Resource> response = controller.convertSvgToPdf(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
}
@@ -30,12 +30,13 @@ import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.converters.UrlToPdfRequest;
import stirling.software.common.configuration.RuntimePathConfig;
@@ -49,14 +50,15 @@ import stirling.software.common.util.TempFile;
import stirling.software.common.util.TempFileManager;
public class ConvertWebsiteToPdfTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -24,10 +24,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.config.EndpointConfiguration;
import stirling.software.SPDF.model.api.converters.PdfVectorExportRequest;
@@ -122,8 +122,7 @@ class PdfVectorExportControllerTest {
PdfVectorExportRequest request = new PdfVectorExportRequest();
request.setFileInput(file);
ResponseEntity<StreamingResponseBody> response =
controller.convertGhostscriptInputsToPdf(request);
ResponseEntity<Resource> response = controller.convertGhostscriptInputsToPdf(request);
assertThat(response.getStatusCode()).isEqualTo(org.springframework.http.HttpStatus.OK);
assertThat(response.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_PDF);
@@ -140,13 +139,14 @@ class PdfVectorExportControllerTest {
PdfVectorExportRequest request = new PdfVectorExportRequest();
request.setFileInput(file);
ResponseEntity<StreamingResponseBody> response =
controller.convertGhostscriptInputsToPdf(request);
ResponseEntity<Resource> response = controller.convertGhostscriptInputsToPdf(request);
assertThat(response.getStatusCode()).isEqualTo(org.springframework.http.HttpStatus.OK);
assertThat(response.getHeaders().getContentType()).isEqualTo(MediaType.APPLICATION_PDF);
java.io.ByteArrayOutputStream baosVerify = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baosVerify);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baosVerify);
}
assertThat(baosVerify.toByteArray()).contains(content);
}
@@ -13,11 +13,12 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.PDFComparisonAndCount;
import stirling.software.SPDF.model.api.PDFWithPageNums;
@@ -32,14 +33,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class FilterControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -72,7 +74,7 @@ class FilterControllerTest {
PDDocument mockDoc = mock(PDDocument.class);
when(pdfDocumentFactory.load(mockFile)).thenReturn(mockDoc);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(new byte[] {1, 2, 3});
ResponseEntity<Resource> expectedResponse = streamingOk(new byte[] {1, 2, 3});
try (MockedStatic<PdfUtils> pdfUtilsMock = mockStatic(PdfUtils.class);
MockedStatic<WebResponseUtils> webMock = mockStatic(WebResponseUtils.class)) {
@@ -84,7 +86,7 @@ class FilterControllerTest {
mockDoc, "test.pdf", tempFileManager))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> result = filterController.containsText(request);
ResponseEntity<Resource> result = filterController.containsText(request);
assertEquals(HttpStatus.OK, result.getStatusCode());
assertArrayEquals(new byte[] {1, 2, 3}, drainBody(result));
@@ -104,7 +106,7 @@ class FilterControllerTest {
try (MockedStatic<PdfUtils> pdfUtilsMock = mockStatic(PdfUtils.class)) {
pdfUtilsMock.when(() -> PdfUtils.hasText(mockDoc, "all", "missing")).thenReturn(false);
ResponseEntity<StreamingResponseBody> result = filterController.containsText(request);
ResponseEntity<Resource> result = filterController.containsText(request);
assertEquals(HttpStatus.NO_CONTENT, result.getStatusCode());
assertNull(result.getBody());
@@ -122,7 +124,7 @@ class FilterControllerTest {
PDDocument mockDoc = mock(PDDocument.class);
when(pdfDocumentFactory.load(mockFile)).thenReturn(mockDoc);
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(new byte[] {4, 5, 6});
ResponseEntity<Resource> expectedResponse = streamingOk(new byte[] {4, 5, 6});
try (MockedStatic<PdfUtils> pdfUtilsMock = mockStatic(PdfUtils.class);
MockedStatic<WebResponseUtils> webMock = mockStatic(WebResponseUtils.class)) {
@@ -134,7 +136,7 @@ class FilterControllerTest {
mockDoc, "test.pdf", tempFileManager))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> result = filterController.containsImage(request);
ResponseEntity<Resource> result = filterController.containsImage(request);
assertEquals(HttpStatus.OK, result.getStatusCode());
assertArrayEquals(new byte[] {4, 5, 6}, drainBody(result));
@@ -153,7 +155,7 @@ class FilterControllerTest {
try (MockedStatic<PdfUtils> pdfUtilsMock = mockStatic(PdfUtils.class)) {
pdfUtilsMock.when(() -> PdfUtils.hasImages(mockDoc, "1")).thenReturn(false);
ResponseEntity<StreamingResponseBody> result = filterController.containsImage(request);
ResponseEntity<Resource> result = filterController.containsImage(request);
assertEquals(HttpStatus.NO_CONTENT, result.getStatusCode());
}
@@ -22,10 +22,11 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.service.CustomPDFDocumentFactory;
import stirling.software.common.util.TempFile;
@@ -37,14 +38,15 @@ import tools.jackson.databind.json.JsonMapper;
@ExtendWith(MockitoExtension.class)
@DisplayName("FormFillController Tests")
class FormFillControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -232,8 +234,7 @@ class FormFillControllerTest {
when(pdfDocumentFactory.load(eq(file))).thenReturn(doc);
byte[] payload = "{\"field1\":\"value1\"}".getBytes();
ResponseEntity<StreamingResponseBody> response =
controller.fillForm(file, payload, false);
ResponseEntity<Resource> response = controller.fillForm(file, payload, false);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isNotNull();
@@ -246,7 +247,7 @@ class FormFillControllerTest {
PDDocument doc = createMinimalPdf();
when(pdfDocumentFactory.load(eq(file))).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.fillForm(file, null, false);
ResponseEntity<Resource> response = controller.fillForm(file, null, false);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -287,7 +288,7 @@ class FormFillControllerTest {
when(pdfDocumentFactory.load(eq(file))).thenReturn(doc);
byte[] payload = "[\"field1\"]".getBytes();
ResponseEntity<StreamingResponseBody> response = controller.deleteFields(file, payload);
ResponseEntity<Resource> response = controller.deleteFields(file, payload);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -323,8 +324,7 @@ class FormFillControllerTest {
String json =
"[{\"targetName\":\"f1\",\"name\":null,\"label\":null,\"type\":null,"
+ "\"required\":null,\"multiSelect\":null,\"options\":null,\"defaultValue\":\"newVal\",\"tooltip\":null}]";
ResponseEntity<StreamingResponseBody> response =
controller.modifyFields(file, json.getBytes());
ResponseEntity<Resource> response = controller.modifyFields(file, json.getBytes());
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -17,12 +17,13 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.misc.AddAttachmentRequest;
import stirling.software.SPDF.service.AttachmentServiceInterface;
@@ -33,14 +34,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class AttachmentControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -100,8 +102,7 @@ class AttachmentControllerTest {
List<MultipartFile> attachments = List.of(attachment1, attachment2);
request.setAttachments(attachments);
request.setFileInput(pdfFile);
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("modified PDF content".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("modified PDF content".getBytes());
when(pdfDocumentFactory.load(request, false)).thenReturn(mockDocument);
when(pdfAttachmentService.addAttachment(mockDocument, attachments))
@@ -118,8 +119,7 @@ class AttachmentControllerTest {
any(TempFileManager.class)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response =
attachmentController.addAttachments(request);
ResponseEntity<Resource> response = attachmentController.addAttachments(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -134,8 +134,7 @@ class AttachmentControllerTest {
List<MultipartFile> attachments = List.of(attachment1);
request.setAttachments(attachments);
request.setFileInput(pdfFile);
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("modified PDF content".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("modified PDF content".getBytes());
when(pdfDocumentFactory.load(request, false)).thenReturn(mockDocument);
when(pdfAttachmentService.addAttachment(mockDocument, attachments))
@@ -152,8 +151,7 @@ class AttachmentControllerTest {
any(TempFileManager.class)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response =
attachmentController.addAttachments(request);
ResponseEntity<Resource> response = attachmentController.addAttachments(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -23,11 +23,12 @@ import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.misc.ExtractHeaderRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -36,14 +37,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class AutoRenameControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -101,7 +103,7 @@ class AutoRenameControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.extractHeader(request);
ResponseEntity<Resource> response = controller.extractHeader(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(drainBody(response)).isNotEmpty();
@@ -127,7 +129,7 @@ class AutoRenameControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.extractHeader(request);
ResponseEntity<Resource> response = controller.extractHeader(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -140,7 +142,7 @@ class AutoRenameControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.extractHeader(request);
ResponseEntity<Resource> response = controller.extractHeader(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -188,7 +190,7 @@ class AutoRenameControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.extractHeader(request);
ResponseEntity<Resource> response = controller.extractHeader(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
// The largest font text should be used as title (URL-encoded in Content-Disposition)
@@ -206,7 +208,7 @@ class AutoRenameControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.extractHeader(request);
ResponseEntity<Resource> response = controller.extractHeader(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
// Should fallback to original filename since header is too long
@@ -222,7 +224,7 @@ class AutoRenameControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.extractHeader(request);
ResponseEntity<Resource> response = controller.extractHeader(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
// Special characters should be sanitized
@@ -248,7 +250,7 @@ class AutoRenameControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.extractHeader(request);
ResponseEntity<Resource> response = controller.extractHeader(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -23,11 +23,12 @@ import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.model.api.PDFFile;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -36,14 +37,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class DecompressPdfControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -97,7 +99,7 @@ class DecompressPdfControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.decompressPdf(request);
ResponseEntity<Resource> response = controller.decompressPdf(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(drainBody(response)).isNotEmpty();
@@ -116,7 +118,7 @@ class DecompressPdfControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.decompressPdf(request);
ResponseEntity<Resource> response = controller.decompressPdf(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(drainBody(response)).isNotEmpty();
@@ -147,7 +149,7 @@ class DecompressPdfControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.decompressPdf(request);
ResponseEntity<Resource> response = controller.decompressPdf(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
String contentDisposition = response.getHeaders().getFirst("Content-Disposition");
@@ -183,7 +185,7 @@ class DecompressPdfControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.decompressPdf(request);
ResponseEntity<Resource> response = controller.decompressPdf(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
try (PDDocument result = Loader.loadPDF(drainBody(response))) {
@@ -200,7 +202,7 @@ class DecompressPdfControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.decompressPdf(request);
ResponseEntity<Resource> response = controller.decompressPdf(request);
assertThat(response.getBody()).isNotNull();
// Decompressed PDF should generally be larger or equal to compressed
@@ -216,7 +218,7 @@ class DecompressPdfControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.decompressPdf(request);
ResponseEntity<Resource> response = controller.decompressPdf(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -25,11 +25,12 @@ import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.misc.FlattenRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -38,14 +39,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class FlattenControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -98,7 +100,7 @@ class FlattenControllerTest {
PDDocument doc = Loader.loadPDF(file.getBytes());
when(pdfDocumentFactory.load(file)).thenReturn(doc);
ResponseEntity<StreamingResponseBody> response = controller.flatten(request);
ResponseEntity<Resource> response = controller.flatten(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(drainBody(response)).isNotEmpty();
@@ -118,7 +120,7 @@ class FlattenControllerTest {
when(doc.getDocumentCatalog()).thenReturn(catalog);
when(catalog.getAcroForm()).thenReturn(null);
ResponseEntity<StreamingResponseBody> response = controller.flatten(request);
ResponseEntity<Resource> response = controller.flatten(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
verify(doc).close();
@@ -138,7 +140,7 @@ class FlattenControllerTest {
when(doc.getDocumentCatalog()).thenReturn(catalog);
when(catalog.getAcroForm()).thenReturn(form);
ResponseEntity<StreamingResponseBody> response = controller.flatten(request);
ResponseEntity<Resource> response = controller.flatten(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
verify(form).flatten();
@@ -170,7 +172,7 @@ class FlattenControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(doc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(doc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response = controller.flatten(request);
ResponseEntity<Resource> response = controller.flatten(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(drainBody(response)).isNotEmpty();
@@ -188,7 +190,7 @@ class FlattenControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(doc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(doc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response = controller.flatten(request);
ResponseEntity<Resource> response = controller.flatten(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -206,7 +208,7 @@ class FlattenControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(doc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(doc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response = controller.flatten(request);
ResponseEntity<Resource> response = controller.flatten(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -224,7 +226,7 @@ class FlattenControllerTest {
when(pdfDocumentFactory.load(file)).thenReturn(doc);
when(pdfDocumentFactory.createNewDocumentBasedOnOldDocument(doc)).thenReturn(newDoc);
ResponseEntity<StreamingResponseBody> response = controller.flatten(request);
ResponseEntity<Resource> response = controller.flatten(request);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
@@ -23,11 +23,12 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.misc.OverlayImageRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -37,14 +38,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class OverlayImageControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -108,8 +110,7 @@ class OverlayImageControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("result".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("result".getBytes());
mockedWebResponse
.when(
() ->
@@ -117,7 +118,7 @@ class OverlayImageControllerTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.overlayImage(request);
ResponseEntity<Resource> response = controller.overlayImage(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -136,7 +137,7 @@ class OverlayImageControllerTest {
when(pdfDocumentFactory.load(any(byte[].class))).thenThrow(new IOException("bad PDF"));
ResponseEntity<StreamingResponseBody> response = controller.overlayImage(request);
ResponseEntity<Resource> response = controller.overlayImage(request);
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
}
@@ -157,8 +158,7 @@ class OverlayImageControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("result".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("result".getBytes());
mockedWebResponse
.when(
() ->
@@ -166,7 +166,7 @@ class OverlayImageControllerTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.overlayImage(request);
ResponseEntity<Resource> response = controller.overlayImage(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -189,8 +189,7 @@ class OverlayImageControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("result".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("result".getBytes());
mockedWebResponse
.when(
() ->
@@ -198,7 +197,7 @@ class OverlayImageControllerTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = controller.overlayImage(request);
ResponseEntity<Resource> response = controller.overlayImage(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -221,8 +220,7 @@ class OverlayImageControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("result".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("result".getBytes());
mockedWebResponse
.when(
() ->
@@ -231,7 +229,7 @@ class OverlayImageControllerTest {
.thenReturn(expectedResponse);
// Should not throw - coordinates are passed to contentStream.drawImage
ResponseEntity<StreamingResponseBody> response = controller.overlayImage(request);
ResponseEntity<Resource> response = controller.overlayImage(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -17,12 +17,13 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.misc.ReplaceAndInvertColorRequest;
import stirling.software.SPDF.service.misc.ReplaceAndInvertColorService;
@@ -34,14 +35,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ReplaceAndInvertColorControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -96,7 +98,7 @@ class ReplaceAndInvertColorControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(resultBytes);
ResponseEntity<Resource> expectedResponse = streamingOk(resultBytes);
mockedWebResponse
.when(
() ->
@@ -104,8 +106,7 @@ class ReplaceAndInvertColorControllerTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response =
controller.replaceAndInvertColor(request);
ResponseEntity<Resource> response = controller.replaceAndInvertColor(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -132,7 +133,7 @@ class ReplaceAndInvertColorControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(resultBytes);
ResponseEntity<Resource> expectedResponse = streamingOk(resultBytes);
mockedWebResponse
.when(
() ->
@@ -140,8 +141,7 @@ class ReplaceAndInvertColorControllerTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response =
controller.replaceAndInvertColor(request);
ResponseEntity<Resource> response = controller.replaceAndInvertColor(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -166,7 +166,7 @@ class ReplaceAndInvertColorControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(resultBytes);
ResponseEntity<Resource> expectedResponse = streamingOk(resultBytes);
mockedWebResponse
.when(
() ->
@@ -174,8 +174,7 @@ class ReplaceAndInvertColorControllerTest {
any(TempFile.class), anyString()))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response =
controller.replaceAndInvertColor(request);
ResponseEntity<Resource> response = controller.replaceAndInvertColor(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -205,7 +204,7 @@ class ReplaceAndInvertColorControllerTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse = streamingOk(resultBytes);
ResponseEntity<Resource> expectedResponse = streamingOk(resultBytes);
mockedWebResponse
.when(
() ->
@@ -19,11 +19,12 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.model.api.PDFFile;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -33,14 +34,15 @@ import stirling.software.common.util.WebResponseUtils;
@ExtendWith(MockitoExtension.class)
class ShowJavascriptTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -86,8 +88,7 @@ class ShowJavascriptTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("no js".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("no js".getBytes());
mockedWebResponse
.when(
() ->
@@ -97,7 +98,7 @@ class ShowJavascriptTest {
eq(MediaType.TEXT_PLAIN)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = showJavascript.extractHeader(request);
ResponseEntity<Resource> response = showJavascript.extractHeader(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -129,8 +130,7 @@ class ShowJavascriptTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("js content".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("js content".getBytes());
mockedWebResponse
.when(
() ->
@@ -140,7 +140,7 @@ class ShowJavascriptTest {
eq(MediaType.TEXT_PLAIN)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = showJavascript.extractHeader(request);
ResponseEntity<Resource> response = showJavascript.extractHeader(request);
assertNotNull(response);
mockedWebResponse.verify(
@@ -160,8 +160,7 @@ class ShowJavascriptTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("no js".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("no js".getBytes());
mockedWebResponse
.when(
() ->
@@ -171,7 +170,7 @@ class ShowJavascriptTest {
eq(MediaType.TEXT_PLAIN)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = showJavascript.extractHeader(request);
ResponseEntity<Resource> response = showJavascript.extractHeader(request);
assertNotNull(response);
mockedWebResponse.verify(
@@ -200,8 +199,7 @@ class ShowJavascriptTest {
try (MockedStatic<WebResponseUtils> mockedWebResponse =
mockStatic(WebResponseUtils.class)) {
ResponseEntity<StreamingResponseBody> expectedResponse =
streamingOk("no js".getBytes());
ResponseEntity<Resource> expectedResponse = streamingOk("no js".getBytes());
mockedWebResponse
.when(
() ->
@@ -211,7 +209,7 @@ class ShowJavascriptTest {
eq(MediaType.TEXT_PLAIN)))
.thenReturn(expectedResponse);
ResponseEntity<StreamingResponseBody> response = showJavascript.extractHeader(request);
ResponseEntity<Resource> response = showJavascript.extractHeader(request);
assertNotNull(response);
mockedWebResponse.verify(
@@ -16,9 +16,9 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.model.api.PDFFile;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -67,7 +67,7 @@ class UnlockPDFFormsControllerTest {
PDFFile file = new PDFFile();
file.setFileInput(mockPdfFile);
ResponseEntity<StreamingResponseBody> response = controller.unlockPDFForms(file);
ResponseEntity<Resource> response = controller.unlockPDFForms(file);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -85,7 +85,7 @@ class UnlockPDFFormsControllerTest {
PDFFile file = new PDFFile();
file.setFileInput(mockPdfFile);
ResponseEntity<StreamingResponseBody> response = controller.unlockPDFForms(file);
ResponseEntity<Resource> response = controller.unlockPDFForms(file);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -99,7 +99,7 @@ class UnlockPDFFormsControllerTest {
PDFFile file = new PDFFile();
file.setFileInput(mockPdfFile);
ResponseEntity<StreamingResponseBody> response = controller.unlockPDFForms(file);
ResponseEntity<Resource> response = controller.unlockPDFForms(file);
// Controller catches exceptions and returns null
assertNull(response);
@@ -114,7 +114,7 @@ class UnlockPDFFormsControllerTest {
PDFFile file = new PDFFile();
file.setFileInput(mockPdfFile);
ResponseEntity<StreamingResponseBody> response = controller.unlockPDFForms(file);
ResponseEntity<Resource> response = controller.unlockPDFForms(file);
assertNotNull(response);
String contentDisposition = response.getHeaders().getFirst("Content-Disposition");
@@ -133,7 +133,7 @@ class UnlockPDFFormsControllerTest {
PDFFile file = new PDFFile();
file.setFileInput(mockPdfFile);
ResponseEntity<StreamingResponseBody> response = controller.unlockPDFForms(file);
ResponseEntity<Resource> response = controller.unlockPDFForms(file);
assertNotNull(response);
assertTrue(acroForm.getNeedAppearances());
@@ -22,12 +22,13 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.security.SignPDFWithCertRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -36,14 +37,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
class CertSignControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -167,8 +169,7 @@ class CertSignControllerTest {
request.setPageNumber(1);
request.setShowLogo(false);
ResponseEntity<StreamingResponseBody> response =
certSignController.signPDFWithCert(request);
ResponseEntity<Resource> response = certSignController.signPDFWithCert(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -194,8 +195,7 @@ class CertSignControllerTest {
request.setPageNumber(1);
request.setShowLogo(false);
ResponseEntity<StreamingResponseBody> response =
certSignController.signPDFWithCert(request);
ResponseEntity<Resource> response = certSignController.signPDFWithCert(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -247,8 +247,7 @@ class CertSignControllerTest {
request.setPageNumber(1);
request.setShowLogo(false);
ResponseEntity<StreamingResponseBody> response =
certSignController.signPDFWithCert(request);
ResponseEntity<Resource> response = certSignController.signPDFWithCert(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -279,8 +278,7 @@ class CertSignControllerTest {
request.setPageNumber(1);
request.setShowLogo(false);
ResponseEntity<StreamingResponseBody> response =
certSignController.signPDFWithCert(request);
ResponseEntity<Resource> response = certSignController.signPDFWithCert(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -311,8 +309,7 @@ class CertSignControllerTest {
request.setPageNumber(1);
request.setShowLogo(false);
ResponseEntity<StreamingResponseBody> response =
certSignController.signPDFWithCert(request);
ResponseEntity<Resource> response = certSignController.signPDFWithCert(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -343,8 +340,7 @@ class CertSignControllerTest {
request.setPageNumber(1);
request.setShowLogo(false);
ResponseEntity<StreamingResponseBody> response =
certSignController.signPDFWithCert(request);
ResponseEntity<Resource> response = certSignController.signPDFWithCert(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -375,8 +371,7 @@ class CertSignControllerTest {
request.setPageNumber(1);
request.setShowLogo(false);
ResponseEntity<StreamingResponseBody> response =
certSignController.signPDFWithCert(request);
ResponseEntity<Resource> response = certSignController.signPDFWithCert(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -27,12 +27,13 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.security.AddPasswordRequest;
import stirling.software.SPDF.model.api.security.PDFPasswordRequest;
@@ -44,14 +45,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class PasswordControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -120,8 +122,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyString()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.removePassword(request);
ResponseEntity<Resource> response = passwordController.removePassword(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -145,8 +146,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyString()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.removePassword(request);
ResponseEntity<Resource> response = passwordController.removePassword(request);
assertNotNull(response);
assertNotNull(response.getBody());
@@ -209,8 +209,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyString()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.removePassword(request);
ResponseEntity<Resource> response = passwordController.removePassword(request);
assertNotNull(response.getBody());
}
@@ -228,8 +227,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyString()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.removePassword(request);
ResponseEntity<Resource> response = passwordController.removePassword(request);
assertNotNull(response.getBody());
}
}
@@ -257,8 +255,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -283,8 +280,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
}
@@ -310,8 +306,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
}
@@ -334,8 +329,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
}
@@ -366,8 +360,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
}
@@ -392,8 +385,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
}
@@ -416,8 +408,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
}
@@ -440,8 +431,7 @@ class PasswordControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
passwordController.addPassword(request);
ResponseEntity<Resource> response = passwordController.addPassword(request);
assertNotNull(response.getBody());
}
}
@@ -44,10 +44,11 @@ import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.security.ManualRedactPdfRequest;
import stirling.software.SPDF.model.api.security.RedactPdfRequest;
@@ -60,14 +61,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class RedactControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -328,7 +330,7 @@ class RedactControllerTest {
mock(org.apache.pdfbox.pdmodel.PDDocumentInformation.class);
when(mockDocument.getDocumentInformation()).thenReturn(mockInfo);
ResponseEntity<StreamingResponseBody> response = redactController.redactPdf(request);
ResponseEntity<Resource> response = redactController.redactPdf(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -732,7 +734,7 @@ class RedactControllerTest {
request.setConvertPDFToImage(convertToImage);
try {
ResponseEntity<StreamingResponseBody> response = redactController.redactPdf(request);
ResponseEntity<Resource> response = redactController.redactPdf(request);
if (expectSuccess && response != null) {
assertNotNull(response);
@@ -757,7 +759,7 @@ class RedactControllerTest {
request.setConvertPDFToImage(convertToImage);
try {
ResponseEntity<StreamingResponseBody> response = redactController.redactPDF(request);
ResponseEntity<Resource> response = redactController.redactPDF(request);
if (response != null) {
assertNotNull(response);
@@ -948,7 +950,7 @@ class RedactControllerTest {
request.setListOfText("test");
request.setRedactColor(null);
ResponseEntity<StreamingResponseBody> response = redactController.redactPdf(request);
ResponseEntity<Resource> response = redactController.redactPdf(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -972,7 +974,7 @@ class RedactControllerTest {
ManualRedactPdfRequest request = createManualRedactPdfRequest();
request.setRedactions(null);
ResponseEntity<StreamingResponseBody> response = redactController.redactPDF(request);
ResponseEntity<Resource> response = redactController.redactPDF(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -984,7 +986,7 @@ class RedactControllerTest {
ManualRedactPdfRequest request = createManualRedactPdfRequest();
request.setPageNumbers("100-200");
ResponseEntity<StreamingResponseBody> response = redactController.redactPDF(request);
ResponseEntity<Resource> response = redactController.redactPDF(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -1449,7 +1451,7 @@ class RedactControllerTest {
request.setUseRegex(false);
request.setWholeWordSearch(false);
ResponseEntity<StreamingResponseBody> response = redactController.redactPdf(request);
ResponseEntity<Resource> response = redactController.redactPdf(request);
assertNotNull(response);
assertEquals(200, response.getStatusCode().value());
@@ -27,12 +27,13 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.model.api.PDFFile;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -43,14 +44,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class RemoveCertSignControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -103,8 +105,7 @@ class RemoveCertSignControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
removeCertSignController.removeCertSignPDF(request);
ResponseEntity<Resource> response = removeCertSignController.removeCertSignPDF(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -127,8 +128,7 @@ class RemoveCertSignControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
removeCertSignController.removeCertSignPDF(request);
ResponseEntity<Resource> response = removeCertSignController.removeCertSignPDF(request);
assertNotNull(response.getBody());
}
@@ -159,8 +159,7 @@ class RemoveCertSignControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(pdfWithAcroForm));
ResponseEntity<StreamingResponseBody> response =
removeCertSignController.removeCertSignPDF(request);
ResponseEntity<Resource> response = removeCertSignController.removeCertSignPDF(request);
assertNotNull(response.getBody());
}
@@ -190,8 +189,7 @@ class RemoveCertSignControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(pdfWithSig));
ResponseEntity<StreamingResponseBody> response =
removeCertSignController.removeCertSignPDF(request);
ResponseEntity<Resource> response = removeCertSignController.removeCertSignPDF(request);
assertNotNull(response.getBody());
}
@@ -211,8 +209,7 @@ class RemoveCertSignControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
removeCertSignController.removeCertSignPDF(request);
ResponseEntity<Resource> response = removeCertSignController.removeCertSignPDF(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -230,8 +227,7 @@ class RemoveCertSignControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
removeCertSignController.removeCertSignPDF(request);
ResponseEntity<Resource> response = removeCertSignController.removeCertSignPDF(request);
assertNotNull(response.getBody());
}
@@ -261,8 +257,7 @@ class RemoveCertSignControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(multiPagePdf));
ResponseEntity<StreamingResponseBody> response =
removeCertSignController.removeCertSignPDF(request);
ResponseEntity<Resource> response = removeCertSignController.removeCertSignPDF(request);
assertNotNull(response.getBody());
}
@@ -35,12 +35,13 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.security.SanitizePdfRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -51,14 +52,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class SanitizeControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -170,8 +172,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(jsBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -199,8 +200,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
}
}
@@ -229,8 +229,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(linkBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
}
@@ -260,8 +259,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(metaBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
}
@@ -287,8 +285,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
}
}
@@ -319,8 +316,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
}
}
@@ -349,8 +345,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(jsBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
}
@@ -377,8 +372,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
}
@@ -399,8 +393,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
}
@@ -426,8 +419,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response.getBody());
}
@@ -453,8 +445,7 @@ class SanitizeControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class), anyBoolean()))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
sanitizeController.sanitizePDF(request);
ResponseEntity<Resource> response = sanitizeController.sanitizePDF(request);
assertNotNull(response);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
@@ -28,12 +28,13 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.SPDF.model.api.security.AddWatermarkRequest;
import stirling.software.common.service.CustomPDFDocumentFactory;
@@ -44,14 +45,15 @@ import stirling.software.common.util.TempFileManager;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class WatermarkControllerTest {
private static ResponseEntity<StreamingResponseBody> streamingOk(byte[] bytes) {
return ResponseEntity.ok(out -> out.write(bytes));
private static ResponseEntity<Resource> streamingOk(byte[] bytes) {
return ResponseEntity.ok(new ByteArrayResource(bytes));
}
private static byte[] drainBody(ResponseEntity<StreamingResponseBody> response)
throws java.io.IOException {
private static byte[] drainBody(ResponseEntity<Resource> response) throws java.io.IOException {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
response.getBody().writeTo(baos);
try (java.io.InputStream __in = response.getBody().getInputStream()) {
__in.transferTo(baos);
}
return baos.toByteArray();
}
@@ -122,8 +124,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
@@ -156,8 +157,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
}
@@ -187,8 +187,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
}
@@ -218,8 +217,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
}
@@ -249,8 +247,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
}
}
@@ -386,8 +383,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(multiPagePdf));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
assertTrue(drainBody(response).length > 0);
}
@@ -428,8 +424,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
}
@@ -456,8 +451,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
}
@@ -487,8 +481,7 @@ class WatermarkControllerTest {
when(pdfDocumentFactory.load(any(MultipartFile.class)))
.thenAnswer(inv -> Loader.loadPDF(simplePdfBytes));
ResponseEntity<StreamingResponseBody> response =
watermarkController.addWatermark(request);
ResponseEntity<Resource> response = watermarkController.addWatermark(request);
assertNotNull(response.getBody());
}
}
@@ -3,7 +3,6 @@ package stirling.software.SPDF.model.api.converters;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@@ -13,16 +12,16 @@ import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.MockedConstruction;
import org.mockito.Mockito;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import stirling.software.common.util.PDFToFile;
@@ -37,11 +36,11 @@ class ConvertPDFToMarkdownTest {
@RestControllerAdvice
static class GlobalErrorHandler {
@ExceptionHandler(Exception.class)
ResponseEntity<StreamingResponseBody> handle(Exception ex) {
ResponseEntity<Resource> handle(Exception ex) {
String message = ex.getMessage();
byte[] body = message != null ? message.getBytes(StandardCharsets.UTF_8) : new byte[0];
StreamingResponseBody stream = out -> out.write(body);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(stream);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ByteArrayResource(body));
}
}
@@ -53,13 +52,12 @@ class ConvertPDFToMarkdownTest {
Mockito.mockConstruction(
PDFToFile.class,
(mock, ctx) -> {
StreamingResponseBody stream = out -> out.write(md);
when(mock.processPdfToMarkdown(any(MultipartFile.class)))
.thenAnswer(
inv ->
ResponseEntity.ok()
.header("Content-Type", "text/markdown")
.body(stream));
.body(new ByteArrayResource(md)));
})) {
MockMvc mvc = mockMvc();
@@ -71,12 +69,10 @@ class ConvertPDFToMarkdownTest {
"application/pdf",
new byte[] {1, 2, 3});
MvcResult asyncResult =
mvc.perform(multipart("/api/v1/convert/pdf/markdown").file(file))
.andExpect(request().asyncStarted())
.andReturn();
mvc.perform(asyncDispatch(asyncResult))
// ResponseEntity<Resource> is written synchronously on the request thread,
// so there is no async dispatch to wait for (unlike the old StreamingResponseBody
// path).
mvc.perform(multipart("/api/v1/convert/pdf/markdown").file(file))
.andExpect(status().isOk())
.andExpect(header().string("Content-Type", "text/markdown"))
.andExpect(content().bytes(md));
@@ -5,6 +5,8 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.*;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
@@ -52,7 +54,11 @@ class PdfLazyLoadingServiceTest {
Exception.class,
() ->
service.extractDocumentMetadata(
null, "job1", new HashMap<>(), new HashMap<>()));
null,
"job1",
new HashMap<>(),
new HashMap<>(),
new ByteArrayOutputStream()));
}
@Test
@@ -89,7 +95,8 @@ class PdfLazyLoadingServiceTest {
page -> null,
cos -> cos,
(doc, pageNum) -> new java.util.ArrayList<>(),
(doc, pageNum) -> new java.util.ArrayList<>()));
(doc, pageNum) -> new java.util.ArrayList<>(),
new ByteArrayOutputStream()));
}
@Test
@@ -108,15 +115,26 @@ class PdfLazyLoadingServiceTest {
metadata.setNumberOfPages(1);
when(metadataService.extractMetadata(any())).thenReturn(metadata);
when(metadataService.extractXmpMetadata(any())).thenReturn(null);
when(objectMapper.writeValueAsBytes(any())).thenReturn(new byte[] {'{', '}'});
// Service now writes directly to the OutputStream using writeValue, not writeValueAsBytes.
// ObjectMapper.writeValue(OutputStream, Object) the OutputStream is argument 0.
doAnswer(
inv -> {
OutputStream os = inv.getArgument(0, OutputStream.class);
os.write(new byte[] {'{', '}'});
return null;
})
.when(objectMapper)
.writeValue(any(OutputStream.class), any());
when(taskManager.addNote(any(), any())).thenReturn(true);
Map<String, PdfJsonFont> fonts = new HashMap<>();
Map<Integer, Map<PDFont, String>> pageFontResources = new HashMap<>();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] result = service.extractDocumentMetadata(file, "job1", fonts, pageFontResources);
service.extractDocumentMetadata(file, "job1", fonts, pageFontResources, out);
assertNotNull(result);
assertNotNull(out.toByteArray());
assertEquals(2, out.toByteArray().length);
verify(metadataService).extractMetadata(any());
}
}