diff --git a/app/common/src/test/java/stirling/software/common/model/FileInfoTest.java b/app/common/src/test/java/stirling/software/common/model/FileInfoTest.java new file mode 100644 index 000000000..c1ae00d5f --- /dev/null +++ b/app/common/src/test/java/stirling/software/common/model/FileInfoTest.java @@ -0,0 +1,110 @@ +package stirling.software.common.model; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.time.LocalDateTime; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +public class FileInfoTest { + + @ParameterizedTest(name = "{index}: fileSize={0}") + @CsvSource({ + "0, '0 Bytes'", + "1023, '1023 Bytes'", + "1024, '1.00 KB'", + "1048575, '1024.00 KB'", // Do we really want this as result? + "1048576, '1.00 MB'", + "1073741823, '1024.00 MB'", // Do we really want this as result? + "1073741824, '1.00 GB'" + }) + void testGetFormattedFileSize(long fileSize, String expectedFormattedSize) { + FileInfo fileInfo = + new FileInfo( + "example.txt", + File.separator + + "path" + + File.separator + + "to" + + File.separator + + "example.txt", + LocalDateTime.now(), + fileSize, + LocalDateTime.now().minusDays(1)); + + assertEquals(expectedFormattedSize, fileInfo.getFormattedFileSize()); + } + + @org.junit.jupiter.api.Test + void testGetFilePathAsPath() { + FileInfo fileInfo = + new FileInfo( + "test.pdf", + File.separator + "tmp" + File.separator + "test.pdf", + LocalDateTime.now(), + 1234, + LocalDateTime.now().minusDays(2)); + assertEquals( + File.separator + "tmp" + File.separator + "test.pdf", + fileInfo.getFilePathAsPath().toString()); + } + + @org.junit.jupiter.api.Test + void testGetFormattedModificationDate() { + LocalDateTime modDate = LocalDateTime.of(2024, 6, 1, 15, 30, 45); + FileInfo fileInfo = + new FileInfo( + "file.txt", + File.separator + "file.txt", + modDate, + 100, + LocalDateTime.of(2024, 5, 31, 10, 0, 0)); + assertEquals("2024-06-01 15:30:45", fileInfo.getFormattedModificationDate()); + } + + @org.junit.jupiter.api.Test + void testGetFormattedCreationDate() { + LocalDateTime creationDate = LocalDateTime.of(2023, 12, 25, 8, 15, 0); + FileInfo fileInfo = + new FileInfo( + "holiday.txt", + File.separator + "holiday.txt", + LocalDateTime.of(2024, 1, 1, 0, 0, 0), + 500, + creationDate); + assertEquals("2023-12-25 08:15:00", fileInfo.getFormattedCreationDate()); + } + + @org.junit.jupiter.api.Test + void testGettersAndSetters() { + LocalDateTime now = LocalDateTime.now(); + FileInfo fileInfo = + new FileInfo( + "doc.pdf", + File.separator + "docs" + File.separator + "doc.pdf", + now, + 2048, + now.minusDays(1)); + // Test getters + assertEquals("doc.pdf", fileInfo.getFileName()); + assertEquals(File.separator + "docs" + File.separator + "doc.pdf", fileInfo.getFilePath()); + assertEquals(now, fileInfo.getModificationDate()); + assertEquals(2048, fileInfo.getFileSize()); + assertEquals(now.minusDays(1), fileInfo.getCreationDate()); + + // Test setters + fileInfo.setFileName("new.pdf"); + fileInfo.setFilePath(File.separator + "new" + File.separator + "new.pdf"); + fileInfo.setModificationDate(now.plusDays(1)); + fileInfo.setFileSize(4096); + fileInfo.setCreationDate(now.minusDays(2)); + + assertEquals("new.pdf", fileInfo.getFileName()); + assertEquals(File.separator + "new" + File.separator + "new.pdf", fileInfo.getFilePath()); + assertEquals(now.plusDays(1), fileInfo.getModificationDate()); + assertEquals(4096, fileInfo.getFileSize()); + assertEquals(now.minusDays(2), fileInfo.getCreationDate()); + } +} diff --git a/app/common/src/test/java/stirling/software/common/model/InputStreamTemplateResourceTest.java b/app/common/src/test/java/stirling/software/common/model/InputStreamTemplateResourceTest.java new file mode 100644 index 000000000..2ceabd2e0 --- /dev/null +++ b/app/common/src/test/java/stirling/software/common/model/InputStreamTemplateResourceTest.java @@ -0,0 +1,94 @@ +package stirling.software.common.model; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.Reader; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.Arrays; + +import org.junit.jupiter.api.Test; + +public class InputStreamTemplateResourceTest { + + @Test + void gettersReturnProvidedFields() { + byte[] data = {1, 2, 3}; + InputStream is = new ByteArrayInputStream(data); + String encoding = "UTF-8"; + InputStreamTemplateResource resource = new InputStreamTemplateResource(is, encoding); + + assertSame(is, resource.getInputStream()); + assertEquals(encoding, resource.getCharacterEncoding()); + } + + @Test + void fieldsAreFinal() throws NoSuchFieldException { + Field inputStreamField = InputStreamTemplateResource.class.getDeclaredField("inputStream"); + Field characterEncodingField = + InputStreamTemplateResource.class.getDeclaredField("characterEncoding"); + + assertTrue(Modifier.isFinal(inputStreamField.getModifiers())); + assertTrue(Modifier.isFinal(characterEncodingField.getModifiers())); + } + + @Test + void noSetterMethodsPresent() { + long setterCount = + Arrays.stream(InputStreamTemplateResource.class.getDeclaredMethods()) + .filter(method -> method.getName().startsWith("set")) + .count(); + + assertEquals(0, setterCount, "InputStreamTemplateResource should not have setter methods"); + } + + @Test + void readerReturnsCorrectContent() throws Exception { + String content = "Hello, world!"; + InputStream is = new ByteArrayInputStream(content.getBytes("UTF-8")); + InputStreamTemplateResource resource = new InputStreamTemplateResource(is, "UTF-8"); + + try (Reader reader = resource.reader()) { + char[] buffer = new char[content.length()]; + int read = reader.read(buffer); + assertEquals(content.length(), read); + assertEquals(content, new String(buffer)); + } + } + + @Test + void relativeThrowsUnsupportedOperationException() { + InputStream is = new ByteArrayInputStream(new byte[0]); + InputStreamTemplateResource resource = new InputStreamTemplateResource(is, "UTF-8"); + assertThrows(UnsupportedOperationException.class, () -> resource.relative("other")); + } + + @Test + void getDescriptionReturnsExpectedString() { + InputStream is = new ByteArrayInputStream(new byte[0]); + InputStreamTemplateResource resource = new InputStreamTemplateResource(is, "UTF-8"); + assertEquals("InputStream resource [Stream]", resource.getDescription()); + } + + @Test + void getBaseNameReturnsExpectedString() { + InputStream is = new ByteArrayInputStream(new byte[0]); + InputStreamTemplateResource resource = new InputStreamTemplateResource(is, "UTF-8"); + assertEquals("streamResource", resource.getBaseName()); + } + + @Test + void existsReturnsTrueWhenInputStreamNotNull() { + InputStream is = new ByteArrayInputStream(new byte[0]); + InputStreamTemplateResource resource = new InputStreamTemplateResource(is, "UTF-8"); + assertTrue(resource.exists()); + } + + @Test + void existsReturnsFalseWhenInputStreamIsNull() { + InputStreamTemplateResource resource = new InputStreamTemplateResource(null, "UTF-8"); + assertFalse(resource.exists()); + } +} diff --git a/app/common/src/test/java/stirling/software/common/util/FileInfoTest.java b/app/common/src/test/java/stirling/software/common/util/FileInfoTest.java deleted file mode 100644 index ec991f07e..000000000 --- a/app/common/src/test/java/stirling/software/common/util/FileInfoTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package stirling.software.common.util; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.time.LocalDateTime; - -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; - -import stirling.software.common.model.FileInfo; - -public class FileInfoTest { - - @ParameterizedTest(name = "{index}: fileSize={0}") - @CsvSource({ - "0, '0 Bytes'", - "1023, '1023 Bytes'", - "1024, '1.00 KB'", - "1048575, '1024.00 KB'", // Do we really want this as result? - "1048576, '1.00 MB'", - "1073741823, '1024.00 MB'", // Do we really want this as result? - "1073741824, '1.00 GB'" - }) - void testGetFormattedFileSize(long fileSize, String expectedFormattedSize) { - FileInfo fileInfo = - new FileInfo( - "example.txt", - "/path/to/example.txt", - LocalDateTime.now(), - fileSize, - LocalDateTime.now().minusDays(1)); - - assertEquals(expectedFormattedSize, fileInfo.getFormattedFileSize()); - } -}