package pl.dmcs; import org.apache.commons.lang3.tuple.Pair; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.nio.file.Path; import java.util.Arrays; import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.*; public class DataLoaderTest { @TempDir Path tempDir; private File createTempFileWithData(String userData, List recipients) throws IOException { File tempFile = tempDir.resolve("testdata.csv").toFile(); try (BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile))) { writer.write(userData); writer.write("\n"); for (String recipient : recipients) { writer.write(recipient); writer.write("\n"); } } return tempFile; } private void assertUserData(User expectedUser, List expectedRecipients, Pair> result) { User actualUser = result.getLeft(); List actualRecipients = result.getRight(); assertEquals(expectedUser.getFirstName(), actualUser.getFirstName()); assertEquals(expectedUser.getLastName(), actualUser.getLastName()); assertEquals(expectedUser.getEmail(), actualUser.getEmail()); assertEquals(expectedRecipients, actualRecipients); } @Test public void testLoadData() throws IOException { File tempFile = createTempFileWithData("John,Doe,john.doe@example.com", Arrays.asList("recipient1@example.com", "recipient2@example.com", "recipient3@example.com")); User expectedUser = new User("John", "Doe", "john.doe@example.com"); List expectedRecipients = Arrays.asList("recipient1@example.com", "recipient2@example.com", "recipient3@example.com"); Pair> result = DataLoader.loadData(tempFile.getAbsolutePath()); assertUserData(expectedUser, expectedRecipients, result); } @Test public void testLoadDataEmptyRecipients() throws IOException { File tempFile = createTempFileWithData("John,Doe,john.doe@example.com", Collections.emptyList()); User expectedUser = new User("John", "Doe", "john.doe@example.com"); List expectedRecipients = Collections.emptyList(); Pair> result = DataLoader.loadData(tempFile.getAbsolutePath()); assertUserData(expectedUser, expectedRecipients, result); } @Test public void testLoadDataInvalidFile() { assertThrows(IOException.class, () -> { DataLoader.loadData("invalid/path/to/file.csv"); }); } }