diff --git a/src/main/java/com/institutosemprealerta/semprealerta/application/service/impl/StorageServiceImpl.java b/src/main/java/com/institutosemprealerta/semprealerta/application/service/impl/StorageServiceImpl.java index 8e95b54..819acfc 100644 --- a/src/main/java/com/institutosemprealerta/semprealerta/application/service/impl/StorageServiceImpl.java +++ b/src/main/java/com/institutosemprealerta/semprealerta/application/service/impl/StorageServiceImpl.java @@ -20,11 +20,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; -import java.util.UUID; -import java.util.stream.Stream; @Service -@Log4j2 public class StorageServiceImpl implements StorageService { private final Path fileStorageLocation; private final FileRepository fileRepository; diff --git a/src/test/java/com/institutosemprealerta/semprealerta/application/service/impl/StorageServiceImplTest.java b/src/test/java/com/institutosemprealerta/semprealerta/application/service/impl/StorageServiceImplTest.java new file mode 100644 index 0000000..3de9636 --- /dev/null +++ b/src/test/java/com/institutosemprealerta/semprealerta/application/service/impl/StorageServiceImplTest.java @@ -0,0 +1,150 @@ +package com.institutosemprealerta.semprealerta.application.service.impl; + +import com.institutosemprealerta.semprealerta.domain.model.File; +import com.institutosemprealerta.semprealerta.domain.ports.out.FileRepository; +import com.institutosemprealerta.semprealerta.domain.ports.out.responses.FileResponse; +import com.institutosemprealerta.semprealerta.infrastructure.config.FileStorageProperties; +import com.institutosemprealerta.semprealerta.infrastructure.entity.file.mocks.FileMocks; +import org.junit.jupiter.api.*; +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.web.multipart.MultipartFile; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.*; +import java.nio.file.spi.FileSystemProvider; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class StorageServiceImplTest { + + private StorageServiceImpl storageService; + + @Mock + private FileRepository fileRepository; + + @Mock + private FileStorageProperties fileStorageProperties; + + @Mock + private MultipartFile mockFile; + + @Mock + private FileSystem mockFileSystem; + + @Mock + private FileSystemProvider mockFileSystemProvider; + + private final FileResponse fileResponse = FileMocks.returnValidFileResponse(); + + @BeforeEach + void setUp() throws IOException { + + when(fileStorageProperties.getUploadDir()).thenReturn("pdf"); + storageService = new StorageServiceImpl(fileStorageProperties, fileRepository); + + when(mockFile.getOriginalFilename()).thenReturn("file.txt"); + when(mockFile.isEmpty()).thenReturn(false); + when(mockFile.getSize()).thenReturn(100L); + when(mockFile.getContentType()).thenReturn("text/plain"); + + + Path pathToDirectory = Paths.get("pdf"); + Path pathToFile = Paths.get("pdf/file.txt"); + if (!Files.exists(pathToDirectory)) { + Files.createDirectories(pathToDirectory); + } + if (!Files.exists(pathToFile)) { + Files.createFile(pathToFile); + } + + when(mockFileSystem.provider()).thenReturn(mockFileSystemProvider); + + + when(fileRepository.listAll()).thenReturn(List.of(fileResponse)); + doNothing().when(fileRepository).save(any(File.class)); + + } + + @AfterEach + void tearDown() { + reset( + fileRepository, + fileStorageProperties, + mockFile, + mockFileSystem, + mockFileSystemProvider + ); + } + + @AfterAll + static void afterAll() { + Path pathToFile = Paths.get("pdf/file.txt"); + try { + Files.deleteIfExists(pathToFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void init() { + } + + @Test + @DisplayName("Should Store File With Valid Name") + void should_Store_File_With_ValidName() { + String fileName = storageService.store(mockFile, "text/plain"); + + assertNotNull(fileName); + assertEquals("file.txt", fileName); + verify(fileRepository, times(1)).save(any(File.class)); + } + + @Test + @DisplayName("should load file path") + void should_Load_File_Path() { + assertDoesNotThrow(() -> storageService.load("file.txt")); + } + + @Test + @DisplayName("Should Load All Files Successfully") + void should_LoadAll_Files_Successfully() throws IOException { + List allFiles = storageService.loadAll(); + + assertNotNull(allFiles); + assertEquals(1, allFiles.size()); + assertEquals(fileResponse.fileName(), allFiles.get(0).fileName()); + verify(fileRepository, times(1)).listAll(); + } + + @Test + @DisplayName("Should Load File Successfully") + void should_loadAsResource_Successfully() { + String fileName = "file.txt"; + + Resource response = storageService.loadAsResource(fileName); + + assertNotNull(response); + } + + @Test + @DisplayName("Should Load File As Resource Successfully") + void should_Delete_A_Resource() { + String fileName = fileResponse.fileName(); + assertDoesNotThrow(() -> storageService.delete(fileName)); + + } + + @Test + @DisplayName("Should Delete File Successfully") + void should_DeleteAll_Successfully() { + } +} \ No newline at end of file diff --git a/src/test/java/com/institutosemprealerta/semprealerta/infrastructure/entity/file/mocks/FileMocks.java b/src/test/java/com/institutosemprealerta/semprealerta/infrastructure/entity/file/mocks/FileMocks.java index c74a8af..9ff7602 100644 --- a/src/test/java/com/institutosemprealerta/semprealerta/infrastructure/entity/file/mocks/FileMocks.java +++ b/src/test/java/com/institutosemprealerta/semprealerta/infrastructure/entity/file/mocks/FileMocks.java @@ -1,8 +1,11 @@ package com.institutosemprealerta.semprealerta.infrastructure.entity.file.mocks; import com.institutosemprealerta.semprealerta.domain.model.File; +import com.institutosemprealerta.semprealerta.domain.ports.out.responses.FileResponse; import com.institutosemprealerta.semprealerta.infrastructure.entity.file.FileEntity; +import java.time.LocalDateTime; + public class FileMocks { public static FileEntity createFileEntity() { return new FileEntity("fileName", "fileDownloadUri", "fileType"); @@ -15,4 +18,8 @@ public static File createFile() { .fileType("fileType") .build(); } + + public static FileResponse returnValidFileResponse() { + return new FileResponse(1L, "file.txt", "/api/v1/download/1", "fileType", LocalDateTime.now()); + } }