From f452ba4bfb2e53cfc990a4e26e7a3eedb8256a9d Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 05:54:17 +0300 Subject: [PATCH 01/10] feat: changed HistoryManager logic and modifed InMemoryTaskManager with new logi --- src/Main.java | 22 +++++ src/managers/InMemoryHistoryManager.java | 26 ------ src/managers/InMemoryTaskManager.java | 31 ++++++- src/managers/Managers.java | 3 + .../{ => history}/HistoryManager.java | 4 +- .../history/InMemoryHistoryManager.java | 86 +++++++++++++++++++ src/managers/history/Node.java | 25 ++++++ test/managers/InMemoryHistoryManagerTest.java | 1 + 8 files changed, 170 insertions(+), 28 deletions(-) delete mode 100644 src/managers/InMemoryHistoryManager.java rename src/managers/{ => history}/HistoryManager.java (73%) create mode 100644 src/managers/history/InMemoryHistoryManager.java create mode 100644 src/managers/history/Node.java diff --git a/src/Main.java b/src/Main.java index 0c765af..25a9d58 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,7 +1,29 @@ +import managers.InMemoryTaskManager; +import managers.TaskManager; +import model.Epic; +import model.Status; +import model.SubTask; +import model.Task; public class Main { public static void main(String[] args) { + TaskManager manager = new InMemoryTaskManager(); + for (int i = 1; i <= 3; i++) { + manager.addEpic(new Epic(i + "", "d", Status.NEW)); + } + manager.addSubTask(new SubTask(4 + "", "d", Status.NEW,1)); + manager.getEpic(2); + manager.getEpic(1); + manager.getEpic(3); + manager.getEpic(1); + manager.getEpic(2); + manager.getEpic(1); + manager.getEpic(3); + manager.getSubTask(4); + + manager.clearSubTasks(); + System.out.println(manager.getHistory());; } } diff --git a/src/managers/InMemoryHistoryManager.java b/src/managers/InMemoryHistoryManager.java deleted file mode 100644 index 0439dcf..0000000 --- a/src/managers/InMemoryHistoryManager.java +++ /dev/null @@ -1,26 +0,0 @@ -package managers; - -import model.Task; - -import java.util.LinkedList; -import java.util.List; - -public class InMemoryHistoryManager implements HistoryManager { - - private final LinkedList history = new LinkedList<>(); - private final int MAX_HISTORY_CAPACITY = 10; - - @Override - public void addTask(Task task) { - - if (history.size() == MAX_HISTORY_CAPACITY) { - history.removeFirst(); - } - history.add(task); - } - - @Override - public List getHistory() { - return new LinkedList<>(history); - } -} diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 8e9b5d3..0c8396a 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -1,5 +1,6 @@ package managers; +import managers.history.HistoryManager; import model.Epic; import model.Status; import model.SubTask; @@ -150,11 +151,13 @@ public void deleteTask(int id) { if (!tasks.containsKey(id)) { return; } + historyManager.remove(id); // удаляем из истории tasks.remove(id); } @Override public void clearTasks() { + clearHistoryTasks(); tasks.clear(); } @@ -163,18 +166,24 @@ public void deleteEpic(int id) { if (!epics.containsKey(id)) { return; } - Epic epic = epics.get(id); for (Integer subtaskId : epic.getSubtaskIds()) { // удаляем из основной таблицы подзадач каждую подзадачу эпика subtasks.remove(subtaskId); + historyManager.remove(subtaskId); // удаляем из истории } + + historyManager.remove(id); // удаляем из истории epics.remove(id); + } @Override public void clearEpics() { + clearHistoryEpics(); epics.clear(); + + clearHistorySubTasks(); subtasks.clear(); } @@ -190,17 +199,37 @@ public void deleteSubTask(int id) { epic.deleteSubTask(id); updateEpicStatus(epic); + historyManager.remove(id); // удаляем из истории subtasks.remove(id); } @Override public void clearSubTasks() { + clearHistorySubTasks(); subtasks.clear(); for (Epic epic : epics.values()) { epic.clearSubtasks(); // статус эпика обновляется внутри метода } } + private void clearHistoryTasks() { + for (Integer id : tasks.keySet()) { + historyManager.remove(id); + } + } + + private void clearHistoryEpics() { + for (Integer id : epics.keySet()) { + historyManager.remove(id); + } + } + + private void clearHistorySubTasks() { + for (Integer id : subtasks.keySet()) { + historyManager.remove(id); + } + } + @Override public List getHistory() { return historyManager.getHistory(); diff --git a/src/managers/Managers.java b/src/managers/Managers.java index 99b8662..24c98dc 100644 --- a/src/managers/Managers.java +++ b/src/managers/Managers.java @@ -1,5 +1,8 @@ package managers; +import managers.history.HistoryManager; +import managers.history.InMemoryHistoryManager; + public class Managers { public static TaskManager getDefault() { diff --git a/src/managers/HistoryManager.java b/src/managers/history/HistoryManager.java similarity index 73% rename from src/managers/HistoryManager.java rename to src/managers/history/HistoryManager.java index 167b664..dacd43a 100644 --- a/src/managers/HistoryManager.java +++ b/src/managers/history/HistoryManager.java @@ -1,4 +1,4 @@ -package managers; +package managers.history; import model.Task; @@ -8,6 +8,8 @@ public interface HistoryManager { void addTask(Task task); + void remove(int id); + List getHistory(); } diff --git a/src/managers/history/InMemoryHistoryManager.java b/src/managers/history/InMemoryHistoryManager.java new file mode 100644 index 0000000..a1db8db --- /dev/null +++ b/src/managers/history/InMemoryHistoryManager.java @@ -0,0 +1,86 @@ +package managers.history; + +import model.Task; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class InMemoryHistoryManager implements HistoryManager { + private Node head; + private Node tail; + + private final HashMap history = new HashMap<>(); + + @Override + public void addTask(Task task) { + int id = task.getTaskId(); + remove(id); + history.put(id, linkLast(task)); + } + + + @Override + public void remove(int id) { + Node node = history.remove(id); + if (node == null) { + return; + } + removeNode(node); + } + + @Override + public List getHistory() { + return getTasks(); + } + + private Node linkLast(Task task) { + Node newNode = new Node(tail, task, null); + + if (tail == null) { + // инициализируем голову, теперь она будет хранить всю последовательность + head = newNode; + } else { + // добавляем новый узел к текущему хвосту + tail.next = newNode; + } + tail = newNode; // переопределяем хвост + + return newNode; + } + + private void removeNode(Node node) { + Node next = node.next; + Node prev = node.prev; + + if (prev == null) { + // переопределяем голову на второй элемент последовательности + head = next; + } else { + // привязываем предыдущий узел к последующему (минуя текущий) + prev.next = next; + } + + if (next == null) { + // переопределяем хвост на предпоследний элемент последовательности + tail = prev; + } else { + // привязываем к последующему узлу предыдущий (минуя текущий) + next.prev = prev; + } + + } + + private List getTasks() { + List tasks = new ArrayList<>(); + Node current = head; // копия головы, чтобы избежать потери головы + + // проходим через всю последовательность и добавляем задачу в список + while (current != null) { + tasks.add(current.task); + current = current.next; + } + + return tasks; + } +} diff --git a/src/managers/history/Node.java b/src/managers/history/Node.java new file mode 100644 index 0000000..95db426 --- /dev/null +++ b/src/managers/history/Node.java @@ -0,0 +1,25 @@ +package managers.history; + +import model.Task; + +class Node { + /* так как весь класс объявлен package-private, + * то нет нужды указывать модификаторы доступа для полей*/ + final Task task; + Node prev; + Node next; + + public Node(Node prev, Task task, Node next) { + this.task = task; + this.prev = prev; + this.next = next; + } + + @Override + public String toString() { + return String.format("task=%s, next=%s", + this.task, + this.next); + } + +} diff --git a/test/managers/InMemoryHistoryManagerTest.java b/test/managers/InMemoryHistoryManagerTest.java index 255d947..bc828bb 100644 --- a/test/managers/InMemoryHistoryManagerTest.java +++ b/test/managers/InMemoryHistoryManagerTest.java @@ -1,5 +1,6 @@ package managers; +import managers.history.HistoryManager; import model.Epic; import model.Status; import model.SubTask; From 32d8a3eba3c63d5be7624c1541d82ae7f4c57d50 Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 06:18:31 +0300 Subject: [PATCH 02/10] spell fix --- src/managers/history/InMemoryHistoryManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/managers/history/InMemoryHistoryManager.java b/src/managers/history/InMemoryHistoryManager.java index a1db8db..ae38b3e 100644 --- a/src/managers/history/InMemoryHistoryManager.java +++ b/src/managers/history/InMemoryHistoryManager.java @@ -73,7 +73,7 @@ private void removeNode(Node node) { private List getTasks() { List tasks = new ArrayList<>(); - Node current = head; // копия головы, чтобы избежать потери головы + Node current = head; // копия головы, чтобы избежать потери // проходим через всю последовательность и добавляем задачу в список while (current != null) { From e7509f688807476d85bc90c20367fa5dc6bddb78 Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 18:23:02 +0300 Subject: [PATCH 03/10] fix: add null check to --- src/managers/history/InMemoryHistoryManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/managers/history/InMemoryHistoryManager.java b/src/managers/history/InMemoryHistoryManager.java index ae38b3e..7b4e55d 100644 --- a/src/managers/history/InMemoryHistoryManager.java +++ b/src/managers/history/InMemoryHistoryManager.java @@ -14,6 +14,9 @@ public class InMemoryHistoryManager implements HistoryManager { @Override public void addTask(Task task) { + if(task == null){ + return; + } int id = task.getTaskId(); remove(id); history.put(id, linkLast(task)); @@ -80,7 +83,6 @@ private List getTasks() { tasks.add(current.task); current = current.next; } - return tasks; } } From e8dd2357b89c128e4ac11dba7d383d69d04ce8f0 Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 18:55:40 +0300 Subject: [PATCH 04/10] spell fix --- test/managers/InMemoryTaskManagerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/managers/InMemoryTaskManagerTest.java b/test/managers/InMemoryTaskManagerTest.java index aac9b63..937d744 100644 --- a/test/managers/InMemoryTaskManagerTest.java +++ b/test/managers/InMemoryTaskManagerTest.java @@ -122,7 +122,7 @@ public void shouldContainSubtaskIdInEpic() { @Test public void subTasksSizeInEpicShouldBeEqualWithSize() { - // проверяем, что количетсво сабтасков в эпике равно добавленным сабтаскам + // проверяем, что количество сабтасков в эпике равно добавленным сабтаскам assertEquals(2, manager.getSubTasksFromEpic(epicId).size()); assertEquals(2, manager.getEpic(epicId).getSubtaskIds().size()); } From 0451081f403242a806551eb238ac54c9441b10b8 Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 18:55:46 +0300 Subject: [PATCH 05/10] clear Main --- src/Main.java | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/src/Main.java b/src/Main.java index 25a9d58..1ef8157 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,29 +1,6 @@ -import managers.InMemoryTaskManager; -import managers.TaskManager; -import model.Epic; -import model.Status; -import model.SubTask; -import model.Task; - public class Main { public static void main(String[] args) { - TaskManager manager = new InMemoryTaskManager(); - for (int i = 1; i <= 3; i++) { - manager.addEpic(new Epic(i + "", "d", Status.NEW)); - } - manager.addSubTask(new SubTask(4 + "", "d", Status.NEW,1)); - - manager.getEpic(2); - manager.getEpic(1); - manager.getEpic(3); - manager.getEpic(1); - manager.getEpic(2); - manager.getEpic(1); - manager.getEpic(3); - manager.getSubTask(4); - manager.clearSubTasks(); - System.out.println(manager.getHistory());; } } From 8d26fee579be94e3962fa7321f8d683b021afd4c Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 19:00:45 +0300 Subject: [PATCH 06/10] added new tests for new functionality, deleted old tests --- test/managers/InMemoryHistoryManagerTest.java | 121 +++++++++++++++--- 1 file changed, 104 insertions(+), 17 deletions(-) diff --git a/test/managers/InMemoryHistoryManagerTest.java b/test/managers/InMemoryHistoryManagerTest.java index bc828bb..5724e3a 100644 --- a/test/managers/InMemoryHistoryManagerTest.java +++ b/test/managers/InMemoryHistoryManagerTest.java @@ -7,12 +7,11 @@ import model.Task; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.*; class InMemoryHistoryManagerTest { - private final HistoryManager manager = Managers.getDefaultHistory(); + private final HistoryManager historyManager = Managers.getDefaultHistory(); @Test public void shouldAddAnyTask() { @@ -24,28 +23,116 @@ public void shouldAddAnyTask() { SubTask subtask = new SubTask("subtask", "test", Status.NEW, 2); subtask.setTaskId(3); - manager.addTask(task); - manager.addTask(epic); - manager.addTask(subtask); + historyManager.addTask(task); + historyManager.addTask(epic); + historyManager.addTask(subtask); - assertTrue(manager.getHistory().contains(task)); - assertTrue(manager.getHistory().contains(epic)); - assertTrue(manager.getHistory().contains(subtask)); + assertTrue(historyManager.getHistory().contains(task)); + assertTrue(historyManager.getHistory().contains(epic)); + assertTrue(historyManager.getHistory().contains(subtask)); } @Test - public void shouldDeleteFirstAndAddLastWhenMaxLimit() { - for (int i = 0; i < 10; i++) { - manager.addTask(new Task(i+"", i+"", Status.NEW)); + public void shouldBeUniqueInHistoryWhenWasAddedAgain() { + for (int i = 1; i <= 3; i++) { + Task task = new Task(i + "", "test", Status.NEW); + task.setTaskId(i); + historyManager.addTask(task); } - Task first = manager.getHistory().getFirst(); + int id = 2; + Task task = new Task(id + "", "again", Status.NEW); + task.setTaskId(id); + historyManager.addTask(task); - Task last = new Task(11+"", 11+"", Status.NEW); - manager.addTask(last); + int expected = 1; + int actual = 0; + for (Task t : historyManager.getHistory()) { + if (t.getTaskId() == id) { + actual++; + } + } + assertEquals(expected, actual); + } + + @Test + public void shouldBeLastInHistoryWhenWasAddedAgain() { + for (int i = 1; i <= 3; i++) { + Task task = new Task(i + "", "test", Status.NEW); + task.setTaskId(i); + historyManager.addTask(task); + } + + Task task = new Task(1 + "", "again", Status.NEW); + task.setTaskId(1); + historyManager.addTask(task); + + assertEquals(historyManager.getHistory().getLast(), task); + } + + @Test + public void shouldNotContainWhenDeletedFromTaskManager() { + TaskManager taskManager = Managers.getDefault(); + Task task = new Task("title", "demo", Status.NEW); + taskManager.addTask(task); + taskManager.getTask(1); + + taskManager.deleteTask(1); + + assertFalse(taskManager.getHistory().contains(task)); + + } + + @Test + public void shouldBeEmptyWhenTasksClearedFromTaskManager() { + TaskManager taskManager = Managers.getDefault(); + for (int i = 1; i <= 10; i++) { + taskManager.addTask(new Task("title", "demo", Status.NEW)); + taskManager.getTask(i); + } + taskManager.clearTasks(); + assertTrue(taskManager.getHistory().isEmpty()); + } - assertFalse(manager.getHistory().contains(first)); - assertTrue(manager.getHistory().contains(last)); + @Test + public void shouldBeEmptyWhenEpicsClearedFromTaskManager() { + TaskManager taskManager = Managers.getDefault(); + for (int i = 1; i <= 10; i++) { + taskManager.addEpic(new Epic("title", "demo", Status.NEW)); + taskManager.getEpic(i); + } + taskManager.clearEpics(); + assertTrue(taskManager.getHistory().isEmpty()); + } + + @Test + public void shouldBeEmptyWhenSubtasksClearedFromTaskManager() { + TaskManager taskManager = Managers.getDefault(); + taskManager.addEpic(new Epic("epic", "demo", Status.NEW)); + + for (int i = 2; i <= 10; i++) { + taskManager.addSubTask(new SubTask("title", "demo", Status.NEW, 1)); + taskManager.getSubTask(i); + } + taskManager.clearSubTasks(); + assertTrue(taskManager.getHistory().isEmpty()); } + + @Test + public void shouldBeEmptyWhenEpicsClearedFromTaskManagerAndHistoryContainsSubtasks() { + TaskManager taskManager = Managers.getDefault(); + for (int i = 1; i <= 10; i++) { + taskManager.addEpic(new Epic("title", "demo", Status.NEW)); + } + for (int i = 11; i <= 20; i++) { + taskManager.addSubTask(new SubTask("title", "demo", Status.NEW, i - 10)); + taskManager.getSubTask(i); + } + + taskManager.clearEpics(); + assertTrue(taskManager.getHistory().isEmpty()); + } + + } \ No newline at end of file From 043d9d954c2b0eb83b0f7d08754e791420033e2f Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 19:06:49 +0300 Subject: [PATCH 07/10] codeStyle fix --- src/model/Task.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/model/Task.java b/src/model/Task.java index e86312c..f1ba32b 100644 --- a/src/model/Task.java +++ b/src/model/Task.java @@ -27,7 +27,7 @@ public String getTitle() { return title; } - public void setTitle(String title){ + public void setTitle(String title) { this.title = title; } @@ -35,9 +35,10 @@ public String getDescription() { return description; } - public void setDescription(String description){ + public void setDescription(String description) { this.description = description; } + public Status getStatus() { return status; } From bb19b714252dede108e0f3800f90c64ca4cab44f Mon Sep 17 00:00:00 2001 From: Crodi Date: Sun, 3 Aug 2025 19:08:45 +0300 Subject: [PATCH 08/10] codeStyle fix --- src/managers/history/InMemoryHistoryManager.java | 2 +- src/managers/history/Node.java | 2 +- test/managers/ManagersTest.java | 4 ++-- test/model/SubTaskTest.java | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/managers/history/InMemoryHistoryManager.java b/src/managers/history/InMemoryHistoryManager.java index 7b4e55d..b43d3a0 100644 --- a/src/managers/history/InMemoryHistoryManager.java +++ b/src/managers/history/InMemoryHistoryManager.java @@ -14,7 +14,7 @@ public class InMemoryHistoryManager implements HistoryManager { @Override public void addTask(Task task) { - if(task == null){ + if (task == null) { return; } int id = task.getTaskId(); diff --git a/src/managers/history/Node.java b/src/managers/history/Node.java index 95db426..ae92feb 100644 --- a/src/managers/history/Node.java +++ b/src/managers/history/Node.java @@ -4,7 +4,7 @@ class Node { /* так как весь класс объявлен package-private, - * то нет нужды указывать модификаторы доступа для полей*/ + * то нет нужды указывать модификаторы доступа для полей*/ final Task task; Node prev; Node next; diff --git a/test/managers/ManagersTest.java b/test/managers/ManagersTest.java index b3fdd56..41c16dc 100644 --- a/test/managers/ManagersTest.java +++ b/test/managers/ManagersTest.java @@ -7,12 +7,12 @@ class ManagersTest { @Test - public void shouldBeNotNullWhenDefault(){ + public void shouldBeNotNullWhenDefault() { assertNotNull(Managers.getDefault()); } @Test - public void shouldBeNotNullWhenHistoryDefault(){ + public void shouldBeNotNullWhenHistoryDefault() { assertNotNull(Managers.getDefaultHistory()); } } \ No newline at end of file diff --git a/test/model/SubTaskTest.java b/test/model/SubTaskTest.java index 70c39e5..d6a17fb 100644 --- a/test/model/SubTaskTest.java +++ b/test/model/SubTaskTest.java @@ -7,8 +7,8 @@ class SubTaskTest { @Test void shouldBeEqualWhenIdEqual() { - SubTask subtask1 = new SubTask("test1", "test1", Status.NEW,2); - SubTask subTask2 = new SubTask("test2", "test2", Status.NEW,2); + SubTask subtask1 = new SubTask("test1", "test1", Status.NEW, 2); + SubTask subTask2 = new SubTask("test2", "test2", Status.NEW, 2); subtask1.setTaskId(1); // устанавливаем одинаковые id subTask2.setTaskId(1); From 7e051f82c3c83c9dbfb14bc2fa28855be8276570 Mon Sep 17 00:00:00 2001 From: Crodi Date: Mon, 4 Aug 2025 03:06:22 +0300 Subject: [PATCH 09/10] fix: add access level modifiers --- src/managers/history/Node.java | 11 +++++------ test/managers/InMemoryHistoryManagerTest.java | 2 +- test/managers/InMemoryTaskManagerTest.java | 2 +- test/managers/ManagersTest.java | 2 +- test/model/EpicTest.java | 4 ++-- test/model/SubTaskTest.java | 4 ++-- test/model/TaskTest.java | 4 ++-- 7 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/managers/history/Node.java b/src/managers/history/Node.java index ae92feb..7baf090 100644 --- a/src/managers/history/Node.java +++ b/src/managers/history/Node.java @@ -2,12 +2,11 @@ import model.Task; -class Node { - /* так как весь класс объявлен package-private, - * то нет нужды указывать модификаторы доступа для полей*/ - final Task task; - Node prev; - Node next; +public class Node { + + protected final Task task; + protected Node prev; + protected Node next; public Node(Node prev, Task task, Node next) { this.task = task; diff --git a/test/managers/InMemoryHistoryManagerTest.java b/test/managers/InMemoryHistoryManagerTest.java index 5724e3a..540ae7e 100644 --- a/test/managers/InMemoryHistoryManagerTest.java +++ b/test/managers/InMemoryHistoryManagerTest.java @@ -9,7 +9,7 @@ import static org.junit.jupiter.api.Assertions.*; -class InMemoryHistoryManagerTest { +public class InMemoryHistoryManagerTest { private final HistoryManager historyManager = Managers.getDefaultHistory(); diff --git a/test/managers/InMemoryTaskManagerTest.java b/test/managers/InMemoryTaskManagerTest.java index 937d744..dded598 100644 --- a/test/managers/InMemoryTaskManagerTest.java +++ b/test/managers/InMemoryTaskManagerTest.java @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.*; -class InMemoryTaskManagerTest { +public class InMemoryTaskManagerTest { private final TaskManager manager = Managers.getDefault(); private Task task; diff --git a/test/managers/ManagersTest.java b/test/managers/ManagersTest.java index 41c16dc..9020b6e 100644 --- a/test/managers/ManagersTest.java +++ b/test/managers/ManagersTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; -class ManagersTest { +public class ManagersTest { @Test public void shouldBeNotNullWhenDefault() { diff --git a/test/model/EpicTest.java b/test/model/EpicTest.java index 1c09cdf..5e365f2 100644 --- a/test/model/EpicTest.java +++ b/test/model/EpicTest.java @@ -3,10 +3,10 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -class EpicTest { +public class EpicTest { @Test - void shouldBeEqualWhenIdEqual() { + public void shouldBeEqualWhenIdEqual() { Epic epic1 = new Epic("test1", "test1", Status.NEW); Epic epic2 = new Epic("test2", "test2", Status.NEW); diff --git a/test/model/SubTaskTest.java b/test/model/SubTaskTest.java index d6a17fb..f032c10 100644 --- a/test/model/SubTaskTest.java +++ b/test/model/SubTaskTest.java @@ -3,10 +3,10 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -class SubTaskTest { +public class SubTaskTest { @Test - void shouldBeEqualWhenIdEqual() { + public void shouldBeEqualWhenIdEqual() { SubTask subtask1 = new SubTask("test1", "test1", Status.NEW, 2); SubTask subTask2 = new SubTask("test2", "test2", Status.NEW, 2); diff --git a/test/model/TaskTest.java b/test/model/TaskTest.java index d4da1d7..0051c12 100644 --- a/test/model/TaskTest.java +++ b/test/model/TaskTest.java @@ -3,10 +3,10 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -class TaskTest { +public class TaskTest { @Test - void shouldBeEqualWhenIdEqual() { + public void shouldBeEqualWhenIdEqual() { Task task1 = new Task("test1", "test1", Status.NEW); Task task2 = new Task("test2", "test2", Status.NEW); From c02147fa371c78c75c64ed6a240754f7cff9016c Mon Sep 17 00:00:00 2001 From: Crodi Date: Mon, 4 Aug 2025 03:17:37 +0300 Subject: [PATCH 10/10] fix: changed access level modifiers to private and add get and set methods --- .../history/InMemoryHistoryManager.java | 14 +++++----- src/managers/history/Node.java | 26 ++++++++++++++++--- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/managers/history/InMemoryHistoryManager.java b/src/managers/history/InMemoryHistoryManager.java index b43d3a0..6f8d3bb 100644 --- a/src/managers/history/InMemoryHistoryManager.java +++ b/src/managers/history/InMemoryHistoryManager.java @@ -45,7 +45,7 @@ private Node linkLast(Task task) { head = newNode; } else { // добавляем новый узел к текущему хвосту - tail.next = newNode; + tail.setNext(newNode); } tail = newNode; // переопределяем хвост @@ -53,15 +53,15 @@ private Node linkLast(Task task) { } private void removeNode(Node node) { - Node next = node.next; - Node prev = node.prev; + Node next = node.getNext(); + Node prev = node.getPrev(); if (prev == null) { // переопределяем голову на второй элемент последовательности head = next; } else { // привязываем предыдущий узел к последующему (минуя текущий) - prev.next = next; + prev.setNext(next); } if (next == null) { @@ -69,7 +69,7 @@ private void removeNode(Node node) { tail = prev; } else { // привязываем к последующему узлу предыдущий (минуя текущий) - next.prev = prev; + next.setPrev(prev); } } @@ -80,8 +80,8 @@ private List getTasks() { // проходим через всю последовательность и добавляем задачу в список while (current != null) { - tasks.add(current.task); - current = current.next; + tasks.add(current.getTask()); + current = current.getNext(); } return tasks; } diff --git a/src/managers/history/Node.java b/src/managers/history/Node.java index 7baf090..8485aa5 100644 --- a/src/managers/history/Node.java +++ b/src/managers/history/Node.java @@ -4,9 +4,9 @@ public class Node { - protected final Task task; - protected Node prev; - protected Node next; + private final Task task; + private Node prev; + private Node next; public Node(Node prev, Task task, Node next) { this.task = task; @@ -14,6 +14,26 @@ public Node(Node prev, Task task, Node next) { this.next = next; } + public Task getTask() { + return task; + } + + public Node getPrev() { + return prev; + } + + public void setPrev(Node prev) { + this.prev = prev; + } + + public Node getNext() { + return next; + } + + public void setNext(Node next) { + this.next = next; + } + @Override public String toString() { return String.format("task=%s, next=%s",