| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package com.ruoyi.app.stall.qualification;
- import com.ruoyi.common.exception.ServiceException;
- import com.ruoyi.common.utils.MessageUtils;
- import org.junit.jupiter.api.Test;
- import org.junit.jupiter.api.io.TempDir;
- import org.mockito.MockedStatic;
- import org.springframework.mock.web.MockMultipartFile;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- import java.io.ByteArrayOutputStream;
- import java.nio.file.Path;
- import static org.junit.jupiter.api.Assertions.*;
- import static org.mockito.Mockito.mockStatic;
- class StallQualificationFileServiceTest {
- @TempDir Path directory;
- @Test void privateFileRoundTripsOutsidePublicProfile() throws Exception {
- StallQualificationFileService service = new StallQualificationFileService(directory.resolve("public").toString());
- ByteArrayOutputStream bytes = new ByteArrayOutputStream();
- ImageIO.write(new BufferedImage(2, 2, BufferedImage.TYPE_INT_RGB), "png", bytes);
- String reference = service.upload(8L, new MockMultipartFile("file", "photo.png", "image/png", bytes.toByteArray()));
- assertTrue(reference.startsWith("8/")); assertTrue(reference.endsWith(".png"));
- assertArrayEquals(bytes.toByteArray(), service.read(8L, reference).getByteArray());
- assertFalse(java.nio.file.Files.exists(directory.resolve("public").resolve(reference)));
- try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
- assertThrows(ServiceException.class, () -> service.requireReference(9L, reference));
- assertThrows(ServiceException.class, () -> service.read(8L, "8/../password.txt"));
- assertThrows(ServiceException.class, () -> service.read(8L, "8/not-found.png"));
- }
- }
- @Test void fakeImagesAndOversizeUploadsAreRejected() {
- StallQualificationFileService service = new StallQualificationFileService(directory.resolve("public").toString());
- try (MockedStatic<MessageUtils> messages = mockStatic(MessageUtils.class)) {
- assertThrows(ServiceException.class, () -> service.upload(8L,
- new MockMultipartFile("file", "fake.png", "image/png", "not an image".getBytes())));
- assertThrows(ServiceException.class, () -> service.upload(8L,
- new MockMultipartFile("file", "big.png", "image/png", new byte[5 * 1024 * 1024 + 1])));
- }
- }
- }
|