Skip to content

Commit

Permalink
- Made FileBackedTaskManager constructor private and introduced a sta…
Browse files Browse the repository at this point in the history
…tic `create` method for better encapsulation.

- Added ManagerLoadException to handle file loading errors separately from save exceptions.
- Updated tests in FileBackedTaskManagerTest to use the `create` method for manager initialization.
- Refactored InMemoryHistoryManagerTest to include a @beforeeach setup method for improved test structure.
- Added additional test cases for edge scenarios in InMemoryHistoryManager (e.g., handling empty history, removing non-existent tasks).
  • Loading branch information
Walkthroughcoding committed Feb 10, 2025
1 parent 3b12417 commit 0c793f6
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 38 deletions.
2 changes: 1 addition & 1 deletion src/app/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public static void main(String[] args) {
File file = new File("tasks.csv");

// Создаём FileBackedTaskManager
TaskManager taskManager = new FileBackedTaskManager(file);
TaskManager taskManager = FileBackedTaskManager.create(file);

// Добавляем задачи
Task task1 = new Task("Досмотреть сериал", "Досмотреть 6-й сезон Сопрано", StatusEnum.NEW);
Expand Down
8 changes: 6 additions & 2 deletions src/manager/FileBackedTaskManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,14 @@
public class FileBackedTaskManager extends InMemoryTaskManager {
private final File file;

public FileBackedTaskManager(File file) {
private FileBackedTaskManager(File file) {
this.file = file;
}

public static FileBackedTaskManager create(File file) {
return new FileBackedTaskManager(file);
}

public void save() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
writer.write("id,type,name,status,description,epic\n");
Expand Down Expand Up @@ -82,7 +86,7 @@ public static FileBackedTaskManager loadFromFile(File file) {

manager.setCurrentId(maxId + 1);
} catch (IOException e) {
throw new ManagerSaveException("Ошибка при загрузке задач из файла: " + e.getMessage());
throw new ManagerLoadException("Ошибка при загрузке задач из файла: " + e.getMessage());
}
return manager;
}
Expand Down
7 changes: 7 additions & 0 deletions src/manager/ManagerLoadException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package manager;

public class ManagerLoadException extends RuntimeException {
public ManagerLoadException(String message) {
super(message);
}
}
53 changes: 22 additions & 31 deletions test/manager/FileBackedTaskManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import model.Task;
import model.enums.StatusEnum;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.File;
Expand All @@ -10,75 +11,65 @@

class FileBackedTaskManagerTest {

@Test
void save() throws Exception {
File tempFile = File.createTempFile("test", ".csv");
private File tempFile;
private FileBackedTaskManager manager;

@BeforeEach
void setUp() throws Exception {
tempFile = File.createTempFile("test", ".csv");
tempFile.deleteOnExit();
manager = FileBackedTaskManager.create(tempFile);
}

FileBackedTaskManager manager = new FileBackedTaskManager(tempFile);
@Test
void save() {
Task task = new Task("Task 1", "Description 1", StatusEnum.NEW);
manager.addTask(task);

manager.save();

assertTrue(tempFile.length() > 0);
assertTrue(tempFile.length() > 0, "Файл должен быть не пустым после сохранения.");
}

@Test
void loadFromFile() throws Exception {
File tempFile = File.createTempFile("test", ".csv");
tempFile.deleteOnExit();

FileBackedTaskManager manager = new FileBackedTaskManager(tempFile);
void loadFromFile() {
Task task = new Task("Task 1", "Description 1", StatusEnum.NEW);
manager.addTask(task);
manager.save();

FileBackedTaskManager loadedManager = FileBackedTaskManager.loadFromFile(tempFile);

assertEquals(1, loadedManager.getAllTasks().size());
assertEquals("Task 1", loadedManager.getAllTasks().get(0).getTitle());
assertEquals(1, loadedManager.getAllTasks().size(), "Должна быть загружена одна задача.");
assertEquals("Task 1", loadedManager.getAllTasks().get(0).getTitle(), "Название загруженной задачи должно совпадать.");
}

@Test
void addTask() throws Exception {
File tempFile = File.createTempFile("test", ".csv");
tempFile.deleteOnExit();

FileBackedTaskManager manager = new FileBackedTaskManager(tempFile);
void addTask() {
Task task = new Task("Task 1", "Description 1", StatusEnum.NEW);
manager.addTask(task);

assertEquals(1, manager.getAllTasks().size());
assertEquals("Task 1", manager.getAllTasks().get(0).getTitle());
assertEquals(1, manager.getAllTasks().size(), "Должна быть добавлена одна задача.");
assertEquals("Task 1", manager.getAllTasks().get(0).getTitle(), "Название добавленной задачи должно совпадать.");
}

@Test
void updateTask() throws Exception {
File tempFile = File.createTempFile("test", ".csv");
tempFile.deleteOnExit();

FileBackedTaskManager manager = new FileBackedTaskManager(tempFile);
void updateTask() {
Task task = new Task("Task 1", "Description 1", StatusEnum.NEW);
manager.addTask(task);

task.setTitle("Updated Task 1");
manager.updateTask(task);

assertEquals("Updated Task 1", manager.getAllTasks().get(0).getTitle());
assertEquals("Updated Task 1", manager.getAllTasks().get(0).getTitle(), "Название задачи должно обновиться.");
}

@Test
void deleteTask() throws Exception {
File tempFile = File.createTempFile("test", ".csv");
tempFile.deleteOnExit();

FileBackedTaskManager manager = new FileBackedTaskManager(tempFile);
void deleteTask() {
Task task = new Task("Task 1", "Description 1", StatusEnum.NEW);
manager.addTask(task);

manager.deleteTask(task.getId());

assertTrue(manager.getAllTasks().isEmpty());
assertTrue(manager.getAllTasks().isEmpty(), "Все задачи должны быть удалены.");
}
}
12 changes: 8 additions & 4 deletions test/manager/InMemoryHistoryManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import model.*;
import model.enums.StatusEnum;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;
Expand All @@ -10,9 +11,15 @@

class InMemoryHistoryManagerTest {

private HistoryManager historyManager;

@BeforeEach
void setUp() {
historyManager = Managers.getDefaultHistory();
}

@Test
void shouldAddTaskToHistory() {
HistoryManager historyManager = Managers.getDefaultHistory();
Task task = new Task("Task 1", "Description 1", StatusEnum.NEW);
task.setId(1);

Expand All @@ -25,7 +32,6 @@ void shouldAddTaskToHistory() {

@Test
void shouldRemoveTaskFromHistory() {
HistoryManager historyManager = Managers.getDefaultHistory();
Task task1 = new Task("Task 1", "Description 1", StatusEnum.NEW);
Task task2 = new Task("Task 2", "Description 2", StatusEnum.NEW);
task1.setId(1);
Expand All @@ -42,8 +48,6 @@ void shouldRemoveTaskFromHistory() {

@Test
void shouldNotLimitHistorySize() {
HistoryManager historyManager = Managers.getDefaultHistory();

// Добавляем 15 задач
for (int i = 0; i < 15; i++) {
Task task = new Task("Task " + i, "Description " + i, StatusEnum.NEW);
Expand Down

0 comments on commit 0c793f6

Please sign in to comment.