test(io): add StudentCsvWriter tests
- test writing to empty and existing CSV files - verify append behavior and header handling - test writing arrays of student lists - verify student order and empty lists - test IOException for missing files
This commit is contained in:
@@ -0,0 +1,194 @@
|
|||||||
|
package ru.project.io;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
|
import ru.project.collection.MyLinkedList;
|
||||||
|
import ru.project.collection.MyList;
|
||||||
|
import ru.project.student.Student;
|
||||||
|
|
||||||
|
class StudentCsvWriterTest {
|
||||||
|
|
||||||
|
@TempDir Path tempDir;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeShouldWriteHeaderAndStudentToEmptyFile() throws Exception {
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
Files.createFile(file);
|
||||||
|
|
||||||
|
Student student = new Student("A12", 4.5, 10001);
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
writer.write(student);
|
||||||
|
|
||||||
|
List<String> lines = Files.readAllLines(file);
|
||||||
|
|
||||||
|
assertEquals(List.of("groupNumber,averageGrade,recordBookNumber", "A12,4.5,10001"), lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeShouldAppendStudentToExistingFile() throws Exception {
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
|
||||||
|
Files.write(file, List.of("groupNumber,averageGrade,recordBookNumber", "A12,4.5,10001"));
|
||||||
|
|
||||||
|
Student student = new Student("B07", 3.8, 10002);
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
writer.write(student);
|
||||||
|
|
||||||
|
List<String> lines = Files.readAllLines(file);
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
List.of("groupNumber,averageGrade,recordBookNumber", "A12,4.5,10001", "B07,3.8,10002"),
|
||||||
|
lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeShouldNotCreateMissingFile() {
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
|
||||||
|
Student student = new Student("A12", 4.5, 10001);
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
assertThrows(IOException.class, () -> writer.write(student));
|
||||||
|
|
||||||
|
assertFalse(Files.exists(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeShouldAppendSeveralStudentsInOrder() throws Exception {
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
Files.createFile(file);
|
||||||
|
|
||||||
|
Student student1 = new Student("A12", 4.5, 10001);
|
||||||
|
Student student2 = new Student("B07", 3.8, 10002);
|
||||||
|
Student student3 = new Student("C25", 4.9, 10003);
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
writer.write(student1);
|
||||||
|
writer.write(student2);
|
||||||
|
writer.write(student3);
|
||||||
|
|
||||||
|
List<String> lines = Files.readAllLines(file);
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
List.of(
|
||||||
|
"groupNumber,averageGrade,recordBookNumber",
|
||||||
|
"A12,4.5,10001",
|
||||||
|
"B07,3.8,10002",
|
||||||
|
"C25,4.9,10003"),
|
||||||
|
lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeArrayShouldAppendStudentsFromAllListsInOrder() throws Exception {
|
||||||
|
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
Files.createFile(file);
|
||||||
|
|
||||||
|
Student student1 = new Student("A12", 4.5, 10001);
|
||||||
|
Student student2 = new Student("B07", 3.8, 10002);
|
||||||
|
Student student3 = new Student("C25", 4.9, 10003);
|
||||||
|
Student student4 = new Student("D15", 4.2, 10004);
|
||||||
|
Student student5 = new Student("E20", 3.6, 10005);
|
||||||
|
|
||||||
|
MyList<Student> firstList = new MyLinkedList<>();
|
||||||
|
firstList.add(student1);
|
||||||
|
firstList.add(student2);
|
||||||
|
|
||||||
|
MyList<Student> secondList = new MyLinkedList<>();
|
||||||
|
secondList.add(student3);
|
||||||
|
|
||||||
|
MyList<Student> thirdList = new MyLinkedList<>();
|
||||||
|
thirdList.add(student4);
|
||||||
|
thirdList.add(student5);
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
MyList<Student>[] students = new MyList[] {firstList, secondList, thirdList};
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
writer.write(students);
|
||||||
|
|
||||||
|
List<String> lines = Files.readAllLines(file);
|
||||||
|
|
||||||
|
assertEquals(
|
||||||
|
List.of(
|
||||||
|
"groupNumber,averageGrade,recordBookNumber",
|
||||||
|
"A12,4.5,10001",
|
||||||
|
"B07,3.8,10002",
|
||||||
|
"C25,4.9,10003",
|
||||||
|
"D15,4.2,10004",
|
||||||
|
"E20,3.6,10005"),
|
||||||
|
lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeArrayShouldSkipEmptyLists() throws Exception {
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
Files.createFile(file);
|
||||||
|
|
||||||
|
Student student = new Student("A12", 4.5, 10001);
|
||||||
|
|
||||||
|
MyList<Student> emptyList = new MyLinkedList<>();
|
||||||
|
|
||||||
|
MyList<Student> nonEmptyList = new MyLinkedList<>();
|
||||||
|
nonEmptyList.add(student);
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
MyList<Student>[] students = new MyList[] {emptyList, nonEmptyList, new MyLinkedList<>()};
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
writer.write(students);
|
||||||
|
|
||||||
|
List<String> lines = Files.readAllLines(file);
|
||||||
|
|
||||||
|
assertEquals(List.of("groupNumber,averageGrade,recordBookNumber", "A12,4.5,10001"), lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeEmptyArrayShouldNotModifyFile() throws Exception {
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
|
||||||
|
List<String> initialContent =
|
||||||
|
List.of("groupNumber,averageGrade,recordBookNumber", "A12,4.5,10001");
|
||||||
|
|
||||||
|
Files.write(file, initialContent);
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
MyList<Student>[] students = new MyList[0];
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
writer.write(students);
|
||||||
|
|
||||||
|
assertEquals(initialContent, Files.readAllLines(file));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeEmptyArrayShouldNotCreateMissingFile() {
|
||||||
|
Path file = tempDir.resolve("students.csv");
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
MyList<Student>[] students = new MyList[0];
|
||||||
|
|
||||||
|
StudentCsvWriter writer = new StudentCsvWriter(file.toAbsolutePath().toString());
|
||||||
|
|
||||||
|
assertThrows(IOException.class, () -> writer.write(students));
|
||||||
|
|
||||||
|
assertFalse(Files.exists(file));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user