diff --git a/src/Main.java b/src/Main.java index c34adf7..0ef05ef 100644 --- a/src/Main.java +++ b/src/Main.java @@ -10,17 +10,16 @@ public static void main(String[] args) { Task task1 = taskManager.addTask(new Task("Звонок бабушке", "Позвонить, чтобы узнать новости")); Task task2 = taskManager.addTask(new Task("Стирка", "Постирать белые вещи")); - //Создание эпика b добавление подзадач - Epic epic1 = taskManager.addEpic(new Epic("Сделать домашнее задание","Задание для 4 спринта")); + //Создание эпиков и добавление подзадач + Epic epic1 = taskManager.addEpic(new Epic("Сделать домашнее задание","Задание для 6 спринта")); Subtask subtask1 = taskManager.addSubtask(new Subtask("Изучить теорию", "Прочитать теорию на сайте", epic1.getId())); Subtask subtask2 = taskManager.addSubtask(new Subtask("Освоить тренажёр", "Выполнить все задания", epic1.getId())); - + Subtask subtask3 = taskManager.addSubtask(new Subtask("Прослушать вебинар", + "Подключиться на вебинар в среду", epic1.getId())); Epic epic2 = taskManager.addEpic(new Epic("Переезд","Подготовиться к переезду")); - Subtask subtask3 = taskManager.addSubtask(new Subtask("Собрать вещи", - "Собрать вещи в коробки", epic2.getId())); printAllTasks(taskManager); @@ -36,32 +35,31 @@ public static void main(String[] args) { updatedSubtask2.setStatus(TaskStatus.DONE); taskManager.updateSubtask(updatedSubtask2); - Subtask updatedSubtask3 = new Subtask("Расхламиться", "Выкинуть старые вещи", - epic2.getId()); + Subtask updatedSubtask3 = new Subtask("Изучить доп.материалы", "Прочитать книгу по алгоритмам", + epic1.getId()); updatedSubtask3.setId(subtask3.getId()); updatedSubtask3.setStatus(TaskStatus.DONE); taskManager.updateSubtask(updatedSubtask3); updatedSubtask3.setName("Поиграть в компьютер"); //нужно, чтобы проверить, что название не изменится - //Подготовка для отображения истории (проверка разных типов задач) + printAllTasks(taskManager); + + //Подготовка для отображения истории taskManager.getTaskById(task2.getId()); taskManager.getEpicById(epic1.getId()); taskManager.getSubtaskById(subtask1.getId()); + taskManager.getSubtaskById(subtask2.getId()); + taskManager.getEpicById(epic2.getId()); + taskManager.getSubtaskById(subtask3.getId()); + printAllTasks(taskManager); + taskManager.getTaskById(task2.getId()); + taskManager.getSubtaskById(subtask1.getId()); printAllTasks(taskManager); - //Проверка методов удаления + //Проверка удаления задачи из истории taskManager.deleteTaskById(task2.getId()); taskManager.deleteEpicById(epic1.getId()); - taskManager.deleteSubtaskById(subtask3.getId()); - - //Подготовка для отображения истории (проверка обновления списка) - int count = 0; - while (count < 10) { - taskManager.getTaskById(task1.getId()); - count++; - } - printAllTasks(taskManager); } @@ -73,18 +71,18 @@ public static void printAllTasks(TaskManager taskManager) { } System.out.println(); - System.out.println("Cписок всех подзадач: "); - for (Subtask subtask : taskManager.getAllSubtasks()) { - System.out.println(subtask); - } - System.out.println(); - System.out.println("Cписок всех эпиков: "); for (Epic epic : taskManager.getAllEpics()) { System.out.println(epic); } System.out.println(); + System.out.println("Cписок всех подзадач: "); + for (Subtask subtask : taskManager.getAllSubtasks()) { + System.out.println(subtask); + } + System.out.println(); + System.out.println("История:"); for (Task task : taskManager.getHistory()) { System.out.println(task); diff --git a/src/ru/yandex/javacourse/model/Epic.java b/src/ru/yandex/javacourse/model/Epic.java index 6f29d18..14d00d1 100644 --- a/src/ru/yandex/javacourse/model/Epic.java +++ b/src/ru/yandex/javacourse/model/Epic.java @@ -37,6 +37,7 @@ public Epic getCopy() { Epic epicCopy = new Epic(this.getName(), this.getDescription()); epicCopy.setId(this.getId()); epicCopy.setStatus(this.getStatus()); + epicCopy.setSubtasksIdList(new ArrayList<>(this.getSubtasksIdList())); return epicCopy; } diff --git a/src/ru/yandex/javacourse/service/HistoryManager.java b/src/ru/yandex/javacourse/service/HistoryManager.java index f07f276..0b981dc 100644 --- a/src/ru/yandex/javacourse/service/HistoryManager.java +++ b/src/ru/yandex/javacourse/service/HistoryManager.java @@ -8,4 +8,6 @@ public interface HistoryManager { List getHistory(); void add(Task task); + + void remove(int id); } diff --git a/src/ru/yandex/javacourse/service/InMemoryHistoryManager.java b/src/ru/yandex/javacourse/service/InMemoryHistoryManager.java index 777cc90..90e95ff 100644 --- a/src/ru/yandex/javacourse/service/InMemoryHistoryManager.java +++ b/src/ru/yandex/javacourse/service/InMemoryHistoryManager.java @@ -1,18 +1,27 @@ package ru.yandex.javacourse.service; -import ru.yandex.javacourse.model.Epic; -import ru.yandex.javacourse.model.Subtask; import ru.yandex.javacourse.model.Task; -import java.util.LinkedList; + import java.util.List; +import java.util.Map; +import java.util.ArrayList; +import java.util.HashMap; public class InMemoryHistoryManager implements HistoryManager { - private final List viewedTasks = new LinkedList<>(); - private static final int MAX_HISTORY_SIZE = 10; + private Node head; + private Node tail; + private final Map> idToNode = new HashMap<>(); + private int size = 0; @Override public List getHistory() { - return new LinkedList<>(viewedTasks); + List historyList = new ArrayList<>(size); + Node current = head; + while (current != null) { + historyList.add(current.data); + current = current.next; + } + return historyList; } @Override @@ -20,21 +29,72 @@ public void add(Task task) { if (task == null) { return; } + int taskId = task.getId(); + remove(taskId); + linkLast(task); + } - if (viewedTasks.size() == MAX_HISTORY_SIZE) { - viewedTasks.removeFirst(); + @Override + public void remove(int id) { + Node node = idToNode.get(id); + if (node != null) { + removeNode(node); } + } - if (task instanceof Epic epic) { - Epic savedEpic = epic.getCopy(); - viewedTasks.add(savedEpic); - } else if (task instanceof Subtask subtask) { - Subtask savedSubtask = subtask.getCopy(); - viewedTasks.add(savedSubtask); + private void linkLast(Task task) { + if (task == null) { + return; + } + + Task taskCopy = task.getCopy(); + if (taskCopy == null) { + return; + } + + Node oldTail = tail; + Node createdNode = new Node<>(oldTail, taskCopy, null); + tail = createdNode; + if (oldTail == null) { + head = createdNode; } else { - Task savedTask = task.getCopy(); - viewedTasks.add(savedTask); + oldTail.next = createdNode; + } + idToNode.put(taskCopy.getId(), createdNode); + size++; + } + + public List getTasks() { + List allTasks = new ArrayList<>(); + for (Node node : idToNode.values()) { + allTasks.add(node.data); } + return allTasks; } + private void removeNode(Node node) { + if (node == null) { + return; + } + + Node prevNode = node.prev; + Node nextNode = node.next; + + if (prevNode == null) { + head = nextNode; + } else { + prevNode.next = nextNode; + } + + if (nextNode == null) { + tail = prevNode; + } else { + nextNode.prev = prevNode; + } + + node.prev = null; + node.next = null; + idToNode.remove(node.data.getId()); + size--; + } } diff --git a/src/ru/yandex/javacourse/service/InMemoryTaskManager.java b/src/ru/yandex/javacourse/service/InMemoryTaskManager.java index 2bb335e..2172fe3 100644 --- a/src/ru/yandex/javacourse/service/InMemoryTaskManager.java +++ b/src/ru/yandex/javacourse/service/InMemoryTaskManager.java @@ -30,24 +30,28 @@ public ArrayList getAllTasks() { } /** - * Удаляет все задачи + * Удаляет все задачи в менеджере и истории */ @Override public void deleteAllTasks() { + for (Integer taskId : tasks.keySet()) { + historyManager.remove(taskId); + } tasks.clear(); } /** - * Возвращает задачу по её id. + * Возвращает копию задачи по её id. * Добавляет её в историю просмотра задач. */ @Override public Task getTaskById(int id) { Task returnedTask = tasks.get(id); - if (returnedTask != null) { - historyManager.add(returnedTask); + if (returnedTask == null) { + return null; } - return returnedTask; + historyManager.add(returnedTask); + return returnedTask.getCopy(); } /** @@ -55,7 +59,7 @@ public Task getTaskById(int id) { * Создаёт копию переданной задачи, присваивает уникальный ID и сохраняет в хранилище. * * @param task объект задачи, которую нужно добавить (может быть null) - * @return созданная копия задачи с присвоенным ID или null, если передан null + * @return копия созданной задачи с присвоенным ID или null, если передан null */ @Override public Task addTask(Task task) { @@ -65,7 +69,7 @@ public Task addTask(Task task) { Task createdTask = task.getCopy(); createdTask.setId(generateId()); tasks.put(createdTask.getId(), createdTask); - return createdTask; + return createdTask.getCopy(); } /** @@ -87,10 +91,11 @@ public void updateTask(Task task) { } /** - * Удаляет задачу по её id + * Удаляет задачу по её id из менеджера и истории */ @Override public void deleteTaskById(int id) { + historyManager.remove(id); tasks.remove(id); } @@ -103,25 +108,34 @@ public ArrayList getAllEpics() { } /** - * Удаляет все эпики вместе с подзадачами + * Удаляет все эпики вместе с подзадачами из менеджера и истории */ @Override public void deleteAllEpics() { + for (Integer subtaskId : subtasks.keySet()) { + historyManager.remove(subtaskId); + } + + for (Integer epicId : epics.keySet()) { + historyManager.remove(epicId); + } + epics.clear(); subtasks.clear(); } /** - * Возвращает эпик по его id. + * Возвращает копию эпика по его id. * Добавляет его в историю просмотра задач. */ @Override public Epic getEpicById(int id) { - Epic returnEpic = epics.get(id); - if (returnEpic != null) { - historyManager.add(returnEpic); + Epic returnedEpic = epics.get(id); + if (returnedEpic == null) { + return null; } - return returnEpic; + historyManager.add(returnedEpic); + return returnedEpic.getCopy(); } /** @@ -129,7 +143,7 @@ public Epic getEpicById(int id) { * Создаёт копию переданного эпика, присваивает уникальный ID и сохраняет в хранилище. * * @param epic объект эпика, который нужно добавить (может быть null) - * @return созданная копия эпика с присвоенным ID или null, если передан null + * @return копия созданного эпика с присвоенным ID или null, если передан null */ @Override public Epic addEpic(Epic epic) { @@ -138,8 +152,9 @@ public Epic addEpic(Epic epic) { } Epic createdEpic = epic.getCopy(); createdEpic.setId(generateId()); + createdEpic.deleteSubtasksIdList(); epics.put(createdEpic.getId(), createdEpic); - return createdEpic; + return createdEpic.getCopy(); } /** @@ -165,11 +180,12 @@ public void updateEpic(Epic epic) { } /** - * Удаляет эпик по его id. - * Вместе с ним удаляет подзадачи из хранилища, которые относились к этому эпику + * Удаляет эпик по его id из менеджера и истории. + * Вместе с ним удаляет подзадачи из менеджера и истории, которые относились к этому эпику */ @Override public void deleteEpicById(int id) { + historyManager.remove(id); epics.remove(id); ArrayList subtasksToRemove = new ArrayList<>(); for (Subtask subtask : subtasks.values()) { @@ -178,6 +194,7 @@ public void deleteEpicById(int id) { } } for (Integer subtaskId : subtasksToRemove) { + historyManager.remove(subtaskId); subtasks.remove(subtaskId); } } @@ -192,11 +209,15 @@ public ArrayList getAllSubtasks() { /** * Удаляет все подзадачи: - * - из хранилища + * - из менеджера и истории * - из эпиков */ @Override public void deleteAllSubtasks() { + for (Integer subtaskId : subtasks.keySet()) { + historyManager.remove(subtaskId); + } + subtasks.clear(); for (Epic epic : epics.values()) { epic.deleteSubtasksIdList(); @@ -205,16 +226,17 @@ public void deleteAllSubtasks() { } /** - * Возвращает подзадачу по её id. + * Возвращает копию подзадачи по её id. * Добавляет её в историю просмотра задач. */ @Override public Subtask getSubtaskById(int id) { - Subtask returnSubtask = subtasks.get(id); - if (returnSubtask != null) { - historyManager.add(returnSubtask); + Subtask returnedSubtask = subtasks.get(id); + if (returnedSubtask == null) { + return null; } - return returnSubtask; + historyManager.add(returnedSubtask); + return returnedSubtask.getCopy(); } /** @@ -224,23 +246,25 @@ public Subtask getSubtaskById(int id) { * Обновляет статус эпика. * * @param subtask объект подзадачи, которую нужно добавить (может быть null) - * @return созданная копия подзадачи с присвоенным ID или null, если передан null + * @return копия созданной подзадачи с присвоенным ID или null, если передан null */ @Override public Subtask addSubtask(Subtask subtask) { - if (subtask == null || subtask.getEpicId() == subtask.getId()) { + if (subtask == null) { return null; } + Epic epic = epics.get(subtask.getEpicId()); + if (epic == null || subtask.getEpicId() == subtask.getId()) { + return null; + } Subtask createdSubtask = subtask.getCopy(); createdSubtask.setId(generateId()); subtasks.put(createdSubtask.getId(), createdSubtask); - Epic epic = epics.get(createdSubtask.getEpicId()); epic.addSubtaskId(createdSubtask.getId()); updateEpicStatus(epic); - - return createdSubtask; + return createdSubtask.getCopy(); } /** @@ -268,7 +292,7 @@ public void updateSubtask(Subtask subtask) { /** * Удаляет подзадачу по её id: * - из списка ID подзадач соответствующего эпика - * - из хранилища + * - из менеджера и истории */ @Override public void deleteSubtaskById(int id) { @@ -279,6 +303,8 @@ public void deleteSubtaskById(int id) { Epic epic = epics.get(subtask.getEpicId()); epic.deleteSubtaskId(id); updateEpicStatus(epic); + + historyManager.remove(id); subtasks.remove(id); } diff --git a/src/ru/yandex/javacourse/service/Node.java b/src/ru/yandex/javacourse/service/Node.java new file mode 100644 index 0000000..a0f8715 --- /dev/null +++ b/src/ru/yandex/javacourse/service/Node.java @@ -0,0 +1,13 @@ +package ru.yandex.javacourse.service; + +public class Node { + public T data; + public Node next; + public Node prev; + + public Node(Node prev, T data, Node next) { + this.data = data; + this.next = next; + this.prev = prev; + } +} \ No newline at end of file diff --git a/test/ru/yandex/javacourse/service/HistoryManagerTest.java b/test/ru/yandex/javacourse/service/HistoryManagerTest.java index 1778bc9..e97b69f 100644 --- a/test/ru/yandex/javacourse/service/HistoryManagerTest.java +++ b/test/ru/yandex/javacourse/service/HistoryManagerTest.java @@ -10,9 +10,10 @@ import static org.junit.jupiter.api.Assertions.*; class HistoryManagerTest { - private static final String TASK_NAME = "Задача 1"; - private static final String TASK_DESCRIPTION = "Первая задача"; - private static final String TASK_DESCRIPTION_UPDATED = "Обновлённая задача"; + private static final String TASK_NAME = "Задача"; + private static final String TASK_DESCRIPTION = "Описание задачи"; + private static final String TASK_DESCRIPTION_UPDATED = "Обновлённое описание задачи"; + private static final int TASK_ID = 1; Task task; HistoryManager historyManager = Managers.getDefaultHistory(); @@ -38,20 +39,44 @@ void test_Add_WhenTaskAddedToHistoryManager_ShouldReturnTrue() { } @Test - @DisplayName("Должен возвращать true, если менеджер хранит и старую версию задачи, и новую") - public void test_Add_AfterUpdatedTaskAddToHistoryManager_ShouldStoreBothVersions() { + @DisplayName("Должен возвращать true, если менеджер хранит только последнюю версию задачи") + public void test_Add_AfterUpdatedTaskAddToHistoryManager_ShouldStoreLastVersion() { //given historyManager.add(task); - Task updatedTask = new Task(task.getName(), TASK_DESCRIPTION_UPDATED); + Task updatedTask = task.getCopy(); + updatedTask.setDescription(TASK_DESCRIPTION_UPDATED); //when historyManager.add(updatedTask); List historyList = historyManager.getHistory(); //then - assertEquals(2,historyList.size(), "Обновлённая задача не добавлена."); - assertNotEquals(historyList.get(0).getDescription(), historyList.get(1).getDescription(), + assertEquals(1,historyList.size(), "История хранит больше одной версии задачи"); + assertNotEquals(task.getDescription(), historyList.get(0).getDescription(), "Менеджер хранит старую версию задачи"); } + @Test + @DisplayName("Должен возвращать true, если менеджер хранит только последнюю версию задачи") + public void test_Remove_AfterRemoveMiddleTask_ShouldRemainOrder() { + //given + task.setId(TASK_ID); + Task task2 = new Task(TASK_NAME + " " + (TASK_ID + 1), TASK_DESCRIPTION + " " + (TASK_ID + 1)); + task2.setId(TASK_ID + 1); + + Task task3 = new Task(TASK_NAME + " " + (TASK_ID + 2), TASK_DESCRIPTION + " " + (TASK_ID + 2)); + task3.setId(TASK_ID + 2); + + //when + historyManager.add(task); + historyManager.add(task2); + historyManager.add(task3); + historyManager.remove(task2.getId()); + List historyList = historyManager.getHistory(); + + //then + assertEquals(2,historyList.size(), "Из истории должна быть удалена одна задача"); + assertEquals(task3.getId(), historyList.get(1).getId(), "Вторая из середины не удалена"); + } + } \ No newline at end of file diff --git a/test/ru/yandex/javacourse/service/InMemoryHistoryManagerTest.java b/test/ru/yandex/javacourse/service/InMemoryHistoryManagerTest.java new file mode 100644 index 0000000..d8ba884 --- /dev/null +++ b/test/ru/yandex/javacourse/service/InMemoryHistoryManagerTest.java @@ -0,0 +1,63 @@ +package ru.yandex.javacourse.service; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import ru.yandex.javacourse.model.Task; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class InMemoryHistoryManagerTest { + private static final String TASK_NAME = "Задача 1"; + private static final String TASK_DESCRIPTION = "Первая задача"; + private static final String TASK_NAME_2 = "Задача 2"; + private static final String TASK_DESCRIPTION_2 = "Вторая задача"; + private static final Integer TASK_ID = 1; + private static final Integer TASK_ID_2 = 2; + + Task task; + HistoryManager historyManager = Managers.getDefaultHistory(); + + @BeforeEach + @DisplayName("Cоздаёт перед каждым тестом новую задачу") + public void create() { + task = new Task(TASK_NAME,TASK_DESCRIPTION); + } + + @Test + @DisplayName("Должен возвращать true, если удалось удалить задачу из истории") + void test_Remove_WhenTaskRemoveInHistoryManager_HistoryShouldBeEmpty() { + //given + historyManager.add(task); + + //when + historyManager.remove(task.getId()); + final List history = historyManager.getHistory(); + + //then + assertTrue(history.isEmpty(), "После удаления задачи история должна быть пустой."); + } + + @Test + @DisplayName("Должен возвращать true, если при повторном добавлении задача переместилась в конец истории") + void test_Add_TaskAddedTwiceToHistoryManager_ShouldBeLast() { + //given + task.setId(TASK_ID); + Task task2 = new Task(TASK_NAME_2,TASK_DESCRIPTION_2); + task2.setId(TASK_ID_2); + + //when + historyManager.add(task); + historyManager.add(task2); + historyManager.add(task); + final List history = historyManager.getHistory(); + + //then + assertEquals(2, history.size(), "После добавления задач история должна быть без дублей."); + assertEquals(task.getId(),history.get(history.size() - 1).getId(), "При повторном добавлении задачи " + + "она должна оказаться в конце истории"); + } +} diff --git a/test/ru/yandex/javacourse/service/InMemoryTaskManagerTest.java b/test/ru/yandex/javacourse/service/InMemoryTaskManagerTest.java index 9d0bf68..b752615 100644 --- a/test/ru/yandex/javacourse/service/InMemoryTaskManagerTest.java +++ b/test/ru/yandex/javacourse/service/InMemoryTaskManagerTest.java @@ -13,6 +13,8 @@ class InMemoryTaskManagerTest { private static final String TASK_NAME = "Задача"; private static final String TASK_DESCRIPTION = "Новая задача"; private static final int PREDEFINED_TASK_ID = 99; + private static final String TASK_NAME_UPDATED = "Обновлённая задача"; + private static final String TASK_DESCRIPTION_UPDATED = "Новая задача"; private static final String EPIC_NAME = "Эпик"; private static final String EPIC_DESCRIPTION = "Новый эпик"; private static final String SUBTASK_NAME = "Подзадача"; @@ -98,4 +100,105 @@ public void test_AddTask_WhenTaskHasPredefinedId_ShouldGenerateNewId() { } + @Test + @DisplayName("Должен сохранять задачу в неизменном виде после добавления в менеджер") + public void test_AddTask_WhenTaskUpdatedAfterAddToTaskManager_TaskShouldRemainUnchanged() { + //given + Task task = taskManager.addTask(new Task(TASK_NAME,TASK_DESCRIPTION)); + + //when + task.setName(TASK_NAME_UPDATED); + task.setDescription(TASK_DESCRIPTION_UPDATED); + + //then + Task findTask = taskManager.getTaskById(task.getId()); + assertEquals(TASK_NAME, findTask.getName(), "Задачи не совпадают по name."); + assertEquals(TASK_DESCRIPTION, findTask.getDescription(), "Задачи не совпадают по description."); + } + + @Test + @DisplayName("При удалении задачи из менеджера она должна быть удалена из истории") + public void test_DeleteTaskById_WhenTaskRemoved_HistoryShouldBeEmpty() { + //given + Task task = taskManager.addTask(new Task(TASK_NAME,TASK_DESCRIPTION)); + taskManager.getTaskById(task.getId()); + + //when + taskManager.deleteTaskById(task.getId()); + + //then + final List history = taskManager.getHistory(); + assertEquals(0,history.size(), "История после удаления задачи должна быть пустой"); + } + + @Test + @DisplayName("При удалении эпика из менеджера он должен быть удален из истории") + public void test_DeleteEpicById_WhenEpicRemoved_HistoryShouldBeEmpty() { + //given + Epic epic = taskManager.addEpic(new Epic(EPIC_NAME,EPIC_DESCRIPTION)); + taskManager.getEpicById(epic.getId()); + + //when + taskManager.deleteEpicById(epic.getId()); + + //then + final List history = taskManager.getHistory(); + assertEquals(0,history.size(), "История после удаления эпика должна быть пустой"); + } + + @Test + @DisplayName("При удалении подзадачи из менеджера она должна быть удален из истории") + public void test_DeleteSubtaskById_WhenSubtaskRemoved_HistoryShouldBeEmpty() { + //given + Epic epic = taskManager.addEpic(new Epic(EPIC_NAME,EPIC_DESCRIPTION)); + Subtask subtask = taskManager.addSubtask(new Subtask(SUBTASK_NAME,SUBTASK_DESCRIPTION, + epic.getId())); + taskManager.getSubtaskById(subtask.getId()); + + + //when + taskManager.deleteSubtaskById(subtask.getId()); + + //then + final List history = taskManager.getHistory(); + assertEquals(0,history.size(), "История после удаления подзадачи должна быть пустой"); + } + + @Test + @DisplayName("При удалении подзадач из менеджера она должна быть удален из списка id подзадач эпика") + public void test_DeleteAllSubtask_WhenSubtasksRemoved_EpicSubtasksIdListShouldBeEmpty() { + //given + Epic epic = taskManager.addEpic(new Epic(EPIC_NAME,EPIC_DESCRIPTION)); + Subtask subtask1 = taskManager.addSubtask(new Subtask(SUBTASK_NAME,SUBTASK_DESCRIPTION, + epic.getId())); + Subtask subtask2 = taskManager.addSubtask(new Subtask(SUBTASK_NAME,SUBTASK_DESCRIPTION, + epic.getId())); + + + //when + taskManager.deleteAllSubtasks(); + + //then + assertEquals(0,epic.getSubtasksIdList().size(), "После удаления подзадач внутри эпиков" + + " не должно оставаться неактуальных id подзадач"); + } + + @Test + @DisplayName("При удалении эпика из менеджера его подзадачи должны быть удалены из списка подзадач") + public void test_DeleteEpicById_WhenSEpicRemoved_SubtasksShouldBeEmpty() { + //given + Epic epic = taskManager.addEpic(new Epic(EPIC_NAME,EPIC_DESCRIPTION)); + Subtask subtask1 = taskManager.addSubtask(new Subtask(SUBTASK_NAME,SUBTASK_DESCRIPTION, + epic.getId())); + Subtask subtask2 = taskManager.addSubtask(new Subtask(SUBTASK_NAME,SUBTASK_DESCRIPTION, + epic.getId())); + + + //when + taskManager.deleteEpicById(epic.getId()); + List subtasks = taskManager.getAllSubtasks(); + + //then + assertEquals(0,subtasks.size(), "После удаления эпика список подзадач должен быть очищен"); + } } \ No newline at end of file