StallQualificationFileServiceTest.java 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package com.ruoyi.app.stall.qualification;
  2. import com.ruoyi.common.exception.ServiceException;
  3. import com.ruoyi.common.utils.MessageUtils;
  4. import org.junit.jupiter.api.Test;
  5. import org.junit.jupiter.api.io.TempDir;
  6. import org.mockito.MockedStatic;
  7. import org.springframework.mock.web.MockMultipartFile;
  8. import javax.imageio.ImageIO;
  9. import java.awt.image.BufferedImage;
  10. import java.io.ByteArrayOutputStream;
  11. import java.nio.file.Path;
  12. import static org.junit.jupiter.api.Assertions.*;
  13. import static org.mockito.Mockito.mockStatic;
  14. class StallQualificationFileServiceTest {
  15. @TempDir Path directory;
  16. @Test void privateFileRoundTripsOutsidePublicProfile() throws Exception {
  17. StallQualificationFileService service = new StallQualificationFileService(directory.resolve("public").toString());
  18. ByteArrayOutputStream bytes = new ByteArrayOutputStream();
  19. ImageIO.write(new BufferedImage(2, 2, BufferedImage.TYPE_INT_RGB), "png", bytes);
  20. String reference = service.upload(8L, new MockMultipartFile("file", "photo.png", "image/png", bytes.toByteArray()));
  21. assertTrue(reference.startsWith("8/")); assertTrue(reference.endsWith(".png"));
  22. assertArrayEquals(bytes.toByteArray(), service.read(8L, reference).getByteArray());
  23. assertFalse(java.nio.file.Files.exists(directory.resolve("public").resolve(reference)));
  24. try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
  25. assertThrows(ServiceException.class, () -> service.requireReference(9L, reference));
  26. assertThrows(ServiceException.class, () -> service.read(8L, "8/../password.txt"));
  27. assertThrows(ServiceException.class, () -> service.read(8L, "8/not-found.png"));
  28. }
  29. }
  30. @Test void fakeImagesAndOversizeUploadsAreRejected() {
  31. StallQualificationFileService service = new StallQualificationFileService(directory.resolve("public").toString());
  32. try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
  33. assertThrows(ServiceException.class, () -> service.upload(8L,
  34. new MockMultipartFile("file", "fake.png", "image/png", "not an image".getBytes())));
  35. assertThrows(ServiceException.class, () -> service.upload(8L,
  36. new MockMultipartFile("file", "big.png", "image/png", new byte[5 * 1024 * 1024 + 1])));
  37. }
  38. }
  39. }