diff --git a/.github/labeler-config.yml b/.github/labeler-config.yml index 73f92aaa3..a0a634840 100644 --- a/.github/labeler-config.yml +++ b/.github/labeler-config.yml @@ -72,7 +72,8 @@ Devtools: Test: - changed-files: - any-glob-to-any-file: 'cucumber/**/*' - - any-glob-to-any-file: 'src/test**/*' + - any-glob-to-any-file: 'src/test/**/*' + - any-glob-to-any-file: 'src/testing/**/*' - any-glob-to-any-file: '.pre-commit-config' - any-glob-to-any-file: '.github/workflows/pre_commit.yml' - any-glob-to-any-file: '.github/workflows/scorecards.yml' diff --git a/src/main/java/stirling/software/SPDF/controller/api/RotationController.java b/src/main/java/stirling/software/SPDF/controller/api/RotationController.java index 41891c7f5..b029450ef 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/RotationController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/RotationController.java @@ -43,6 +43,12 @@ public class RotationController { throws IOException { MultipartFile pdfFile = request.getFileInput(); Integer angle = request.getAngle(); + + // Validate the angle is a multiple of 90 + if (angle % 90 != 0) { + throw new IllegalArgumentException("Angle must be a multiple of 90"); + } + // Load the PDF document PDDocument document = pdfDocumentFactory.load(request); diff --git a/src/test/java/stirling/software/SPDF/controller/api/RotationControllerTest.java b/src/test/java/stirling/software/SPDF/controller/api/RotationControllerTest.java new file mode 100644 index 000000000..edd9cada1 --- /dev/null +++ b/src/test/java/stirling/software/SPDF/controller/api/RotationControllerTest.java @@ -0,0 +1,74 @@ +package stirling.software.SPDF.controller.api; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDPageTree; +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 org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockMultipartFile; +import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.SPDF.model.api.general.RotatePDFRequest; + +@ExtendWith(MockitoExtension.class) +public class RotationControllerTest { + + @Mock private CustomPDFDocumentFactory pdfDocumentFactory; + + @InjectMocks private RotationController rotationController; + + @Test + public void testRotatePDF() throws IOException { + // Create a mock file + MockMultipartFile mockFile = + new MockMultipartFile("file", "test.pdf", "application/pdf", new byte[] {1, 2, 3}); + RotatePDFRequest request = new RotatePDFRequest(); + request.setFileInput(mockFile); + request.setAngle(90); + + PDDocument mockDocument = mock(PDDocument.class); + PDPageTree mockPages = mock(PDPageTree.class); + PDPage mockPage = mock(PDPage.class); + + when(pdfDocumentFactory.load(request)).thenReturn(mockDocument); + when(mockDocument.getPages()).thenReturn(mockPages); + when(mockPages.iterator()) + .thenReturn(java.util.Collections.singletonList(mockPage).iterator()); + when(mockPage.getRotation()).thenReturn(0); + + // Act + ResponseEntity response = rotationController.rotatePDF(request); + + // Assert + verify(mockPage).setRotation(90); + assertNotNull(response); + assertEquals(200, response.getStatusCode().value()); + } + + @Test + public void testRotatePDFInvalidAngle() throws IOException { + // Create a mock file + MockMultipartFile mockFile = + new MockMultipartFile("file", "test.pdf", "application/pdf", new byte[] {1, 2, 3}); + RotatePDFRequest request = new RotatePDFRequest(); + request.setFileInput(mockFile); + request.setAngle(45); // Invalid angle + + // Act & Assert: Controller direkt aufrufen und Exception erwarten + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> rotationController.rotatePDF(request)); + assertEquals("Angle must be a multiple of 90", exception.getMessage()); + } +}