diff --git a/src/Main.java b/src/Main.java index af6285e..a8b357c 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,54 +1,61 @@ -import manager.InMemoryTaskManager; -import manager.Managers; +import manager.FileBackedTaskManager; import manager.TaskManager; import model.Epic; import model.Status; import model.Subtask; import model.Task; -import java.util.List; +import java.io.File; public class Main { public static void main(String[] args) { - TaskManager manager = Managers.getDefault(); - Task task1 = new Task("Task1", "Desc", Status.NEW); - Task task2 = new Task("Task2", "Desc", Status.NEW); + File file = new File("tasks.csv"); + TaskManager manager = new FileBackedTaskManager(file); + + Task task1 = new Task("Планирование отпуска", "Выбрать направление и даты", Status.NEW); + Task task2 = new Task("Закупка продуктов", "Купить продукты на неделю", Status.IN_PROGRESS); manager.addTask(task1); manager.addTask(task2); - Epic epic1 = new Epic("Epic1", "Desc"); - Epic epic2 = new Epic("Epic2", "Desc"); + Epic epic1 = new Epic("Организация мероприятия", "Подготовка к корпоративу"); manager.addEpic(epic1); - manager.addEpic(epic2); - Subtask subtask1 = new Subtask("Sub1", "Desc", Status.NEW, epic1.getId()); - Subtask subtask2 = new Subtask("Sub2", "Desc", Status.NEW, epic1.getId()); + Subtask subtask1 = new Subtask("Бронирование зала", "Выбрать и забронировать помещение", Status.NEW, epic1.getId()); + Subtask subtask2 = new Subtask("Закупка еды", "Заказать еду и напитки", Status.NEW, epic1.getId()); + manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.getTaskById(task1.getId()); manager.getEpicById(epic1.getId()); - manager.getTaskById(task1.getId()); manager.getSubtaskById(subtask1.getId()); - printHistory(manager); - manager.removeTaskById(task1.getId()); - printHistory(manager); - - manager.removeEpicById(epic1.getId()); - printHistory(manager); // [] + printAll(manager); + System.out.println("\nВосстановление менеджера из файла:"); + TaskManager restoredManager = FileBackedTaskManager.loadFromFile(file); + printAll(restoredManager); } - private static void printHistory(TaskManager manager) { - List history = manager.getHistory(); - if (history.isEmpty()) { - System.out.println("History is empty"); - } else { - System.out.println("\nView history (" + history.size() + " items):"); - for (int i = 0; i < history.size(); i++) { - Task task = history.get(i); - System.out.println((i + 1) + ". " + task.getTitle() + " [ID:" + task.getId() + "]"); - } + private static void printAll(TaskManager manager) { + System.out.println("\n=== Задачи ==="); + for (Task task : manager.getAllTasks()) { + System.out.println(task); + } + + System.out.println("\n=== Эпики ==="); + for (Epic epic : manager.getAllEpics()) { + System.out.println(epic); + } + + System.out.println("\n=== Подзадачи ==="); + for (Subtask subtask : manager.getAllSubtasks()) { + System.out.println(subtask); + } + + System.out.println("\n=== История просмотров ==="); + for (Task task : manager.getHistory()) { + System.out.println(task); + } } -} \ No newline at end of file +} diff --git a/src/manager/FileBackedTaskManager.java b/src/manager/FileBackedTaskManager.java new file mode 100644 index 0000000..040f931 --- /dev/null +++ b/src/manager/FileBackedTaskManager.java @@ -0,0 +1,181 @@ +package manager; + +import model.*; +import java.io.*; +import java.nio.file.Files; +import java.util.*; + +public class FileBackedTaskManager extends InMemoryTaskManager { + + private final File file; + + public FileBackedTaskManager(File file) { + this.file = file; + } + + private void save() { + try (Writer writer = new FileWriter(file)) { + writer.write("id,type,name,status,description,epic\n"); + + for (Task task : getAllTasks()) { + writer.write(toString(task) + "\n"); + } + for (Epic epic : getAllEpics()) { + writer.write(toString(epic) + "\n"); + } + for (Subtask subtask : getAllSubtasks()) { + writer.write(toString(subtask) + "\n"); + } + + } catch (IOException e) { + throw new ManagerSaveException("Ошибка при сохранении данных в файл.", e); + } + } + + @Override + public void addTask(Task task) { + super.addTask(task); + save(); + } + + @Override + public void updateTask(Task task) { + super.updateTask(task); + save(); + } + + @Override + public void removeTaskById(int id) { + super.removeTaskById(id); + save(); + } + + @Override + public void clearTasks() { + super.clearTasks(); + save(); + } + + @Override + public void addEpic(Epic epic) { + super.addEpic(epic); + save(); + } + + @Override + public void updateEpic(Epic epic) { + super.updateEpic(epic); + save(); + } + + @Override + public void removeEpicById(int id) { + super.removeEpicById(id); + save(); + } + + @Override + public void clearEpics() { + super.clearEpics(); + save(); + } + + @Override + public void addSubtask(Subtask subtask) { + super.addSubtask(subtask); + save(); + } + + @Override + public void updateSubtask(Subtask subtask) { + super.updateSubtask(subtask); + save(); + } + + @Override + public void removeSubtaskById(int id) { + super.removeSubtaskById(id); + save(); + } + + @Override + public void clearSubtasks() { + super.clearSubtasks(); + save(); + } + + private String toString(Task task) { + StringBuilder sb = new StringBuilder(); + sb.append(task.getId()).append(",") + .append(task instanceof Epic ? "EPIC" : task instanceof Subtask ? "SUBTASK" : "TASK").append(",") + .append(task.getTitle()).append(",") + .append(task.getStatus()).append(",") + .append(task.getDescription()); + + if (task instanceof Subtask) { + sb.append(",").append(((Subtask) task).getEpicId()); + } else { + sb.append(","); + } + return sb.toString(); + } + + private Task fromString(String line) { + String[] parts = line.split(","); + int id = Integer.parseInt(parts[0]); + String type = parts[1]; + String title = parts[2]; + Status status = Status.valueOf(parts[3]); + String description = parts[4]; + + switch (type) { + case "TASK": + Task task = new Task(title, description, status); + task.setId(id); + return task; + case "EPIC": + Epic epic = new Epic(title, description); + epic.setId(id); + epic.setStatus(status); + return epic; + case "SUBTASK": + int epicId = Integer.parseInt(parts[5]); + Subtask subtask = new Subtask(title, description, status, epicId); + subtask.setId(id); + return subtask; + default: + throw new IllegalArgumentException("Неизвестный тип задачи: " + type); + } + } + + public static FileBackedTaskManager loadFromFile(File file) { + FileBackedTaskManager manager = new FileBackedTaskManager(file); + + try { + List lines = Files.readAllLines(file.toPath()); + for (int i = 1; i < lines.size(); i++) { // пропускаем заголовок + Task task = manager.fromString(lines.get(i)); + if (task instanceof Epic) { + manager.epics.put(task.getId(), (Epic) task); + } else if (task instanceof Subtask) { + manager.subtasks.put(task.getId(), (Subtask) task); + } else { + manager.tasks.put(task.getId(), task); + } + if (task.getId() >= manager.nextId) { + manager.nextId = task.getId() + 1; + } + } + for (Subtask subtask : manager.subtasks.values()) { + Epic epic = manager.epics.get(subtask.getEpicId()); + if (epic != null) { + epic.addSubtask(subtask); + } + } + } catch (IOException e) { + throw new ManagerSaveException("Ошибка при загрузке данных из файла.", e); + } + + return manager; + } +} diff --git a/src/manager/HistoryManager.java b/src/manager/HistoryManager.java index 079236c..bfe6cfc 100644 --- a/src/manager/HistoryManager.java +++ b/src/manager/HistoryManager.java @@ -4,7 +4,10 @@ import java.util.List; public interface HistoryManager { + void add(Task task); + void remove(int id); + List getHistory(); } \ No newline at end of file diff --git a/src/manager/ManagerSaveException.java b/src/manager/ManagerSaveException.java new file mode 100644 index 0000000..ae28077 --- /dev/null +++ b/src/manager/ManagerSaveException.java @@ -0,0 +1,12 @@ +package manager; + +public class ManagerSaveException extends RuntimeException { + + public ManagerSaveException(String message) { + super(message); + } + + public ManagerSaveException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/src/manager/Managers.java b/src/manager/Managers.java index 64dfb6f..71ee949 100644 --- a/src/manager/Managers.java +++ b/src/manager/Managers.java @@ -1,5 +1,7 @@ package manager; +import java.io.File; + public class Managers { public static TaskManager getDefault() { @@ -9,4 +11,8 @@ public static TaskManager getDefault() { public static HistoryManager getDefaultHistory() { return new InMemoryHistoryManager(); } + + public static TaskManager getFileBackedTaskManager(File file) { + return new FileBackedTaskManager(file); + } } \ No newline at end of file diff --git a/src/manager/TaskManager.java b/src/manager/TaskManager.java index 9a4c891..3ef3ae1 100644 --- a/src/manager/TaskManager.java +++ b/src/manager/TaskManager.java @@ -9,27 +9,39 @@ public interface TaskManager { void addTask(Task task); + void addEpic(Epic epic); + void addSubtask(Subtask subtask); List getAllTasks(); + List getAllEpics(); + List getAllSubtasks(); Task getTaskById(int id); + Epic getEpicById(int id); + Subtask getSubtaskById(int id); void updateTask(Task task); + void updateEpic(Epic epic); + void updateSubtask(Subtask subtask); void removeTaskById(int id); + void removeEpicById(int id); + void removeSubtaskById(int id); void clearTasks(); + void clearEpics(); + void clearSubtasks(); List getSubtasksOfEpic(int epicId); diff --git a/src/model/Epic.java b/src/model/Epic.java index bdbde3d..2358141 100644 --- a/src/model/Epic.java +++ b/src/model/Epic.java @@ -25,9 +25,15 @@ public void removeSubtask(int subtaskId) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Epic)) return false; - if (!super.equals(o)) return false; + if (this == o) { + return true; + } + if (!(o instanceof Epic)) { + return false; + } + if (!super.equals(o)) { + return false; + } Epic epic = (Epic) o; return Objects.equals(subtaskIds, epic.subtaskIds); } @@ -36,14 +42,8 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(super.hashCode(), subtaskIds); } - @Override - public String toString() { - return "Epic{" + - "id=" + getId() + - ", title='" + getTitle() + '\'' + - ", description='" + getDescription() + '\'' + - ", status=" + getStatus() + - ", subtaskIds=" + subtaskIds + - '}'; + + public String toCsvString() { + return String.format("%d,EPIC,%s,%s,%s,", getId(), getTitle(), getStatus(), getDescription()); } } \ No newline at end of file diff --git a/src/model/Subtask.java b/src/model/Subtask.java index 0b4eef5..cd3ddd5 100644 --- a/src/model/Subtask.java +++ b/src/model/Subtask.java @@ -14,12 +14,6 @@ public int getEpicId() { @Override public String toString() { - return "Subtask{" + - "id=" + getId() + - ", title='" + getTitle() + '\'' + - ", description='" + getDescription() + '\'' + - ", status=" + getStatus() + - ", epicId=" + epicId + - '}'; + return String.format("%d,SUBTASK,%s,%s,%s,%d", getId(), getTitle(), getStatus(), getDescription(), getEpicId()); } } \ No newline at end of file diff --git a/src/model/Task.java b/src/model/Task.java index 79a3730..1605ac6 100644 --- a/src/model/Task.java +++ b/src/model/Task.java @@ -1,6 +1,5 @@ package model; - import java.util.Objects; public class Task { @@ -15,24 +14,51 @@ public Task(String title, String description, Status status) { this.status = status; } - public int getId() { return id; } - public void setId(int id) { this.id = id; } - public String getTitle() { return title; } - public void setTitle(String title) { this.title = title; } - public String getDescription() { return description; } - public void setDescription(String description) { this.description = description; } - public Status getStatus() { return status; } - public void setStatus(Status status) { this.status = status; } + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Task)) return false; + if (this == o) { + return true; + } + if (!(o instanceof Task)) { + return false; + } Task task = (Task) o; - return id == task.id && - Objects.equals(title, task.title) && - Objects.equals(description, task.description) && - status == task.status; + return id == task.id + && Objects.equals(title, task.title) + && Objects.equals(description, task.description) + && status == task.status; } @Override @@ -42,11 +68,6 @@ public int hashCode() { @Override public String toString() { - return "Task{" + - "id=" + id + - ", title='" + title + '\'' + - ", description='" + description + '\'' + - ", status=" + status + - '}'; + return String.format("%d,TASK,%s,%s,%s,", id, title, status, description); } } \ No newline at end of file diff --git a/test/manager/InMemoryHistoryManagerTest.java b/test/manager/InMemoryHistoryManagerTest.java index 92122b9..73977c8 100644 --- a/test/manager/InMemoryHistoryManagerTest.java +++ b/test/manager/InMemoryHistoryManagerTest.java @@ -1,66 +1,68 @@ -package test.manager; - -import manager.HistoryManager; -import manager.InMemoryHistoryManager; -import model.Task; -import model.Status; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -class InMemoryHistoryManagerTest { - private HistoryManager historyManager; - - @BeforeEach - void setUp() { - historyManager = new InMemoryHistoryManager(); - } - - @Test - void addAndGetHistory() { - Task task1 = new Task("Task1", "Desc", Status.NEW); - task1.setId(1); - Task task2 = new Task("Task2", "Desc", Status.IN_PROGRESS); - task2.setId(2); - - historyManager.add(task1); - historyManager.add(task2); - - List history = historyManager.getHistory(); - assertEquals(2, history.size()); - assertEquals(task1, history.get(0)); - assertEquals(task2, history.get(1)); - } - - @Test - void shouldRemoveDuplicates() { - Task task = new Task("Task", "Desc", Status.NEW); - task.setId(1); - - historyManager.add(task); - historyManager.add(task); - - List history = historyManager.getHistory(); - assertEquals(1, history.size()); - } - - @Test - void shouldRemoveNodeFromMiddle() { - Task task1 = new Task("Task1", "Desc", Status.NEW); - Task task2 = new Task("Task2", "Desc", Status.NEW); - Task task3 = new Task("Task3", "Desc", Status.NEW); - task1.setId(1); task2.setId(2); task3.setId(3); - - historyManager.add(task1); - historyManager.add(task2); - historyManager.add(task3); - historyManager.add(task2); // Дубликат - - List history = historyManager.getHistory(); - assertEquals(3, history.size()); - assertEquals(List.of(task1, task3, task2), history); - } + +package test.manager; + +import manager.HistoryManager; +import manager.InMemoryHistoryManager; +import model.Task; +import model.Status; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class InMemoryHistoryManagerTest { + private HistoryManager historyManager; + + @BeforeEach + void setUp() { + historyManager = new InMemoryHistoryManager(); + } + + @Test + void addAndGetHistory() { + Task task1 = new Task("Task1", "Desc", Status.NEW); + task1.setId(1); + Task task2 = new Task("Task2", "Desc", Status.IN_PROGRESS); + task2.setId(2); + + historyManager.add(task1); + historyManager.add(task2); + + List history = historyManager.getHistory(); + assertEquals(2, history.size()); + assertEquals(task1, history.get(0)); + assertEquals(task2, history.get(1)); + } + + @Test + void shouldRemoveDuplicates() { + Task task = new Task("Task", "Desc", Status.NEW); + task.setId(1); + + historyManager.add(task); + historyManager.add(task); + + List history = historyManager.getHistory(); + assertEquals(1, history.size()); + } + + @Test + void shouldRemoveNodeFromMiddle() { + Task task1 = new Task("Task1", "Desc", Status.NEW); + Task task2 = new Task("Task2", "Desc", Status.NEW); + Task task3 = new Task("Task3", "Desc", Status.NEW); + task1.setId(1); task2.setId(2); task3.setId(3); + + historyManager.add(task1); + historyManager.add(task2); + historyManager.add(task3); + historyManager.add(task2); // Дубликат + + List history = historyManager.getHistory(); + assertEquals(3, history.size()); + assertEquals(List.of(task1, task3, task2), history); + } + } \ No newline at end of file diff --git a/test/manager/InMemoryTaskManagerTest.java b/test/manager/InMemoryTaskManagerTest.java index 196ce8a..a0e94d3 100644 --- a/test/manager/InMemoryTaskManagerTest.java +++ b/test/manager/InMemoryTaskManagerTest.java @@ -1,95 +1,96 @@ -package test.manager; - -import manager.InMemoryTaskManager; -import model.Epic; -import model.Status; -import model.Subtask; -import model.Task; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -public class InMemoryTaskManagerTest { - - private InMemoryTaskManager manager; - - @BeforeEach - public void setUp() { - manager = new InMemoryTaskManager(); - } - - @Test - public void testAddAndGetTask() { - Task task = new Task("Task 1", "Description task 1", Status.NEW); - manager.addTask(task); - - List tasks = manager.getAllTasks(); - assertEquals(1, tasks.size()); - assertEquals(task.getTitle(), tasks.get(0).getTitle()); - } - - @Test - public void testAddAndGetEpic() { - Epic epic = new Epic("Epic 1", "Description epic 1"); - manager.addEpic(epic); - - List epics = manager.getAllEpics(); - assertEquals(1, epics.size()); - assertEquals(epic.getTitle(), epics.get(0).getTitle()); - } - - @Test - public void testAddAndGetSubtask() { - Epic epic = new Epic("Epic 1", "Description epic 1"); - manager.addEpic(epic); - - Subtask subtask = new Subtask("Subtask 1", "Description subtask 1", Status.NEW, epic.getId()); - manager.addSubtask(subtask); - - List subtasks = manager.getAllSubtasks(); - assertEquals(1, subtasks.size()); - assertEquals(subtask.getTitle(), subtasks.get(0).getTitle()); - - Epic updatedEpic = manager.getEpicById(epic.getId()); - assertTrue(updatedEpic.getSubtaskIds().contains(subtask.getId())); - } - - @Test - public void testRemoveTask() { - Task task = new Task("Task 1", "Description task 1", Status.NEW); - manager.addTask(task); - - manager.removeTaskById(task.getId()); - assertTrue(manager.getAllTasks().isEmpty()); - } - - @Test - public void testRemoveEpicAlsoRemovesSubtasks() { - Epic epic = new Epic("Epic 1", "Description epic 1"); - manager.addEpic(epic); - - Subtask subtask = new Subtask("Subtask 1", "Description subtask 1", Status.NEW, epic.getId()); - manager.addSubtask(subtask); - - manager.removeEpicById(epic.getId()); - - assertTrue(manager.getAllEpics().isEmpty()); - - assertTrue(manager.getAllSubtasks().isEmpty()); - } - - @Test - public void testUpdateTask() { - Task task = new Task("Task 1", "Description task 1", Status.NEW); - manager.addTask(task); - - task.setStatus(Status.DONE); - manager.updateTask(task); - - Task updated = manager.getTaskById(task.getId()); - assertEquals(Status.DONE, updated.getStatus()); - } +package test.manager; + +import manager.InMemoryTaskManager; +import model.Epic; +import model.Status; +import model.Subtask; +import model.Task; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class InMemoryTaskManagerTest { + + private InMemoryTaskManager manager; + + @BeforeEach + public void setUp() { + manager = new InMemoryTaskManager(); + } + + @Test + public void testAddAndGetTask() { + Task task = new Task("Task 1", "Description task 1", Status.NEW); + manager.addTask(task); + + List tasks = manager.getAllTasks(); + assertEquals(1, tasks.size()); + assertEquals(task.getTitle(), tasks.get(0).getTitle()); + } + + @Test + public void testAddAndGetEpic() { + Epic epic = new Epic("Epic 1", "Description epic 1"); + manager.addEpic(epic); + + List epics = manager.getAllEpics(); + assertEquals(1, epics.size()); + assertEquals(epic.getTitle(), epics.get(0).getTitle()); + } + + @Test + public void testAddAndGetSubtask() { + Epic epic = new Epic("Epic 1", "Description epic 1"); + manager.addEpic(epic); + + Subtask subtask = new Subtask("Subtask 1", "Description subtask 1", Status.NEW, epic.getId()); + manager.addSubtask(subtask); + + List subtasks = manager.getAllSubtasks(); + assertEquals(1, subtasks.size()); + assertEquals(subtask.getTitle(), subtasks.get(0).getTitle()); + + Epic updatedEpic = manager.getEpicById(epic.getId()); + assertTrue(updatedEpic.getSubtaskIds().contains(subtask.getId())); + } + + @Test + public void testRemoveTask() { + Task task = new Task("Task 1", "Description task 1", Status.NEW); + manager.addTask(task); + + manager.removeTaskById(task.getId()); + assertTrue(manager.getAllTasks().isEmpty()); + } + + @Test + public void testRemoveEpicAlsoRemovesSubtasks() { + Epic epic = new Epic("Epic 1", "Description epic 1"); + manager.addEpic(epic); + + Subtask subtask = new Subtask("Subtask 1", "Description subtask 1", Status.NEW, epic.getId()); + manager.addSubtask(subtask); + + manager.removeEpicById(epic.getId()); + + assertTrue(manager.getAllEpics().isEmpty()); + + assertTrue(manager.getAllSubtasks().isEmpty()); + } + + @Test + public void testUpdateTask() { + Task task = new Task("Task 1", "Description task 1", Status.NEW); + manager.addTask(task); + + task.setStatus(Status.DONE); + manager.updateTask(task); + + Task updated = manager.getTaskById(task.getId()); + assertEquals(Status.DONE, updated.getStatus()); + } + } \ No newline at end of file diff --git a/test/model/EpicTest.java b/test/model/EpicTest.java index 0455b5a..4ce8387 100644 --- a/test/model/EpicTest.java +++ b/test/model/EpicTest.java @@ -1,55 +1,56 @@ -package test.model; - -import model.Epic; -import model.Status; -import model.Subtask; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class EpicTest { - private Epic epic; - private Subtask subtask1; - private Subtask subtask2; - - @BeforeEach - void setUp() { - epic = new Epic("Epic Title", "Epic Description"); - - subtask1 = new Subtask("Subtask 1", "Description 1", Status.NEW, epic.getId()); - subtask2 = new Subtask("Subtask 2", "Description 2", Status.NEW, epic.getId()); - - subtask1.setId(1); - subtask2.setId(2); - } - - @Test - void epicIsCreatedWithEmptySubtaskList() { - assertNotNull(epic.getSubtaskIds()); - assertTrue(epic.getSubtaskIds().isEmpty()); - } - - @Test - void addSubtask_addsIdToList() { - epic.addSubtask(subtask1); - epic.addSubtask(subtask2); - - assertEquals(2, epic.getSubtaskIds().size()); - assertTrue(epic.getSubtaskIds().contains(subtask1.getId())); - assertTrue(epic.getSubtaskIds().contains(subtask2.getId())); - } - - @Test - void removeSubtask_removesCorrectId() { - epic.addSubtask(subtask1); - epic.addSubtask(subtask2); - - epic.removeSubtask(subtask1.getId()); - - assertEquals(1, epic.getSubtaskIds().size()); - assertFalse(epic.getSubtaskIds().contains(subtask1.getId())); - assertTrue(epic.getSubtaskIds().contains(subtask2.getId())); - } - +package test.model; + +import model.Epic; +import model.Status; +import model.Subtask; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class EpicTest { + private Epic epic; + private Subtask subtask1; + private Subtask subtask2; + + @BeforeEach + void setUp() { + epic = new Epic("Epic Title", "Epic Description"); + + subtask1 = new Subtask("Subtask 1", "Description 1", Status.NEW, epic.getId()); + subtask2 = new Subtask("Subtask 2", "Description 2", Status.NEW, epic.getId()); + + subtask1.setId(1); + subtask2.setId(2); + } + + @Test + void epicIsCreatedWithEmptySubtaskList() { + assertNotNull(epic.getSubtaskIds()); + assertTrue(epic.getSubtaskIds().isEmpty()); + } + + @Test + void addSubtask_addsIdToList() { + epic.addSubtask(subtask1); + epic.addSubtask(subtask2); + + assertEquals(2, epic.getSubtaskIds().size()); + assertTrue(epic.getSubtaskIds().contains(subtask1.getId())); + assertTrue(epic.getSubtaskIds().contains(subtask2.getId())); + } + + @Test + void removeSubtask_removesCorrectId() { + epic.addSubtask(subtask1); + epic.addSubtask(subtask2); + + epic.removeSubtask(subtask1.getId()); + + assertEquals(1, epic.getSubtaskIds().size()); + assertFalse(epic.getSubtaskIds().contains(subtask1.getId())); + assertTrue(epic.getSubtaskIds().contains(subtask2.getId())); + } + + } \ No newline at end of file diff --git a/test/model/TaskTest.java b/test/model/TaskTest.java index d6302bd..d37f182 100644 --- a/test/model/TaskTest.java +++ b/test/model/TaskTest.java @@ -1,95 +1,95 @@ -package test.model; - -import model.Status; -import model.Task; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class TaskTest { - private Task task; - - @BeforeEach - void setUp() { - task = new Task("Test Task", "Test Description", Status.NEW); - task.setId(1); - } - - @Test - void testConstructorAndGetters() { - assertEquals(1, task.getId()); - assertEquals("Test Task", task.getTitle()); - assertEquals("Test Description", task.getDescription()); - assertEquals(Status.NEW, task.getStatus()); - } - - @Test - void testSetters() { - task.setId(42); - task.setTitle("Updated Title"); - task.setDescription("Updated Description"); - task.setStatus(Status.IN_PROGRESS); - - assertEquals(42, task.getId()); - assertEquals("Updated Title", task.getTitle()); - assertEquals("Updated Description", task.getDescription()); - assertEquals(Status.IN_PROGRESS, task.getStatus()); - } - - @Test - void testEquals_sameValues_shouldBeEqual() { - Task other = new Task("Test Task", "Test Description", Status.NEW); - other.setId(1); - - assertEquals(task, other); - } - - @Test - void testEquals_differentId_shouldNotBeEqual() { - Task other = new Task("Test Task", "Test Description", Status.NEW); - other.setId(99); - - assertNotEquals(task, other); - } - - @Test - void testEquals_differentTitle_shouldNotBeEqual() { - Task other = new Task("Different Title", "Test Description", Status.NEW); - other.setId(1); - - assertNotEquals(task, other); - } - - @Test - void testEquals_differentDescription_shouldNotBeEqual() { - Task other = new Task("Test Task", "Other Description", Status.NEW); - other.setId(1); - - assertNotEquals(task, other); - } - - @Test - void testEquals_differentStatus_shouldNotBeEqual() { - Task other = new Task("Test Task", "Test Description", Status.DONE); - other.setId(1); - - assertNotEquals(task, other); - } - - @Test - void testHashCode_sameValues_shouldBeEqual() { - Task other = new Task("Test Task", "Test Description", Status.NEW); - other.setId(1); - - assertEquals(task.hashCode(), other.hashCode()); - } - - @Test - void testHashCode_differentValues_shouldNotBeEqual() { - Task other = new Task("Other", "Other", Status.DONE); - other.setId(999); - - assertNotEquals(task.hashCode(), other.hashCode()); - } +package test.model; + +import model.Status; +import model.Task; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TaskTest { + private Task task; + + @BeforeEach + void setUp() { + task = new Task("Test Task", "Test Description", Status.NEW); + task.setId(1); + } + + @Test + void testConstructorAndGetters() { + assertEquals(1, task.getId()); + assertEquals("Test Task", task.getTitle()); + assertEquals("Test Description", task.getDescription()); + assertEquals(Status.NEW, task.getStatus()); + } + + @Test + void testSetters() { + task.setId(42); + task.setTitle("Updated Title"); + task.setDescription("Updated Description"); + task.setStatus(Status.IN_PROGRESS); + + assertEquals(42, task.getId()); + assertEquals("Updated Title", task.getTitle()); + assertEquals("Updated Description", task.getDescription()); + assertEquals(Status.IN_PROGRESS, task.getStatus()); + } + + @Test + void testEquals_sameValues_shouldBeEqual() { + Task other = new Task("Test Task", "Test Description", Status.NEW); + other.setId(1); + + assertEquals(task, other); + } + + @Test + void testEquals_differentId_shouldNotBeEqual() { + Task other = new Task("Test Task", "Test Description", Status.NEW); + other.setId(99); + + assertNotEquals(task, other); + } + + @Test + void testEquals_differentTitle_shouldNotBeEqual() { + Task other = new Task("Different Title", "Test Description", Status.NEW); + other.setId(1); + + assertNotEquals(task, other); + } + + @Test + void testEquals_differentDescription_shouldNotBeEqual() { + Task other = new Task("Test Task", "Other Description", Status.NEW); + other.setId(1); + + assertNotEquals(task, other); + } + + @Test + void testEquals_differentStatus_shouldNotBeEqual() { + Task other = new Task("Test Task", "Test Description", Status.DONE); + other.setId(1); + + assertNotEquals(task, other); + } + + @Test + void testHashCode_sameValues_shouldBeEqual() { + Task other = new Task("Test Task", "Test Description", Status.NEW); + other.setId(1); + + assertEquals(task.hashCode(), other.hashCode()); + } + + @Test + void testHashCode_differentValues_shouldNotBeEqual() { + Task other = new Task("Other", "Other", Status.DONE); + other.setId(999); + + assertNotEquals(task.hashCode(), other.hashCode()); + } } \ No newline at end of file