From 45430e9859766dad9296f33f90ad3ff1fbc31506 Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Sat, 13 Sep 2025 18:21:32 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D1=81=20=D0=94=D0=B0=D1=82=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B8=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87.=20=D0=A0=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=20=D0=BF=D0=BE=20=D0=B2=D1=80=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/exceptions/TaskValidationException.java | 7 ++ src/managers/InMemoryTaskManager.java | 91 ++++++++++++++++++--- src/tasks/Epic.java | 12 +++ src/tasks/Task.java | 36 ++++++++ 4 files changed, 134 insertions(+), 12 deletions(-) create mode 100644 src/exceptions/TaskValidationException.java diff --git a/src/exceptions/TaskValidationException.java b/src/exceptions/TaskValidationException.java new file mode 100644 index 0000000..7b353ec --- /dev/null +++ b/src/exceptions/TaskValidationException.java @@ -0,0 +1,7 @@ +package exceptions; + +public class TaskValidationException extends RuntimeException { + public TaskValidationException(String message) { + super(message); + } +} diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 6275519..7794692 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -1,21 +1,21 @@ package managers; +import exceptions.TaskValidationException; import tasks.Epic; import tasks.Subtask; import tasks.Task; import tasks.TaskStatus; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; public class InMemoryTaskManager implements TaskManager { private int idCounter = 0; protected final Map taskList = new HashMap<>(); protected final Map epicList = new HashMap<>(); protected final Map subtaskList = new HashMap<>(); - + protected final Set prioritizedTasks = new TreeSet<>(Comparator.comparing(Task::getStartTime)); private final HistoryManager historyManager = Managers.getDefaultHistory(); @Override @@ -29,14 +29,22 @@ public ArrayList getEpicList() { } @Override - public ArrayList getEpicSubtask(Integer epicId) { //Выводит список подзадач эпика - ArrayList currentEpic = new ArrayList<>(); + public List getEpicSubtask(Integer epicId) { //Выводит список подзадач эпика + /*List currentEpic = new ArrayList<>(); for (Subtask subtask : subtaskList.values()) { if (subtask.getEpicId() == epicId) { currentEpic.add(subtask); } } - return currentEpic; + return currentEpic; */ + Epic epic = epicList.get(epicId); + if (epic == null) { + return null; + } + List epicSub = getAllSubtask(); + return epicSub.stream() + .filter(subtask -> subtask.getEpicId() == epicId) + .collect(Collectors.toList()); } @Override @@ -59,7 +67,7 @@ public void deleteAllSubtask() { } subtaskList.clear(); for (Epic epic : epicList.values()) { //идем по списку эпиков - checkStatus(epic); + updateEpic(epic); } } @@ -81,19 +89,22 @@ public void deleteEpicSubtask(Epic epic) { //удаление подзадача for (Subtask subtask : subtaskList.values()) { if (subtask.getEpicId() == epic.getId()) { idToRemove.add(subtask.getId()); + delete(subtask); } } for (Integer key : idToRemove) { subtaskList.remove(key); historyManager.remove(key); } - checkStatus(epic); + updateEpic(epic); } @Override public void removeTaskForId(Integer id) { taskList.remove(id); + delete(taskList.get(id)); historyManager.remove(id); + } @Override @@ -104,6 +115,7 @@ public void removeEpicForId(Integer id) { for (Subtask subtask : subtaskList.values()) { //ищем подзадачи по id удаляемого эпика if (subtask.getEpicId() == id) { idToRemove.add(subtask.getId()); + delete(subtask); } } for (Integer key : idToRemove) { @@ -116,8 +128,10 @@ public void removeEpicForId(Integer id) { public void removeSubtaskForId(Integer id) { int epicId = subtaskList.get(id).getEpicId(); subtaskList.remove(id); + delete(subtaskList.get(id)); checkStatus(epicList.get(epicId));//проверяем статус эпика из которого удалили подзадачу historyManager.remove(id); + updateEpic(epicList.get(epicId)); } @Override @@ -143,6 +157,7 @@ public void addTask(Task task) { idCounter++; task.setId(idCounter); taskList.put(task.getId(), task); + add(task); } @Override @@ -159,7 +174,8 @@ public void addSubtask(Subtask subtask) { subtask.setId(idCounter); int currentEpicId = subtask.getEpicId(); subtaskList.put(subtask.getId(), subtask); - checkStatus(epicList.get(currentEpicId)); //проверка статуса эпика после добавления подзадачи + add(subtask); + updateEpic(epicList.get(currentEpicId)); } @Override @@ -175,8 +191,11 @@ public void updateSubtask(Subtask subtask) { oldSubtask.setTitle(subtask.getTitle()); oldSubtask.setDescription(subtask.getDescription()); + + delete(oldSubtask); subtaskList.put(id, oldSubtask); - checkStatus(epicList.get(epicId)); //проверка статуса эпика + add(oldSubtask); + updateEpic(epicList.get(epicId)); } @Override @@ -188,6 +207,8 @@ public void updateEpic(Epic epic) { oldEpic.setDescription(epic.getDescription()); epicList.put(id, oldEpic); + checkStatus(epic); + updateEpicDuration(epic); } public void checkStatus(Epic epic) { @@ -228,4 +249,50 @@ public List getHistory() { public void deleteHistory() { historyManager.deleteHistory(); } + + public List getPrioritizedTasks() { + return new ArrayList<>(prioritizedTasks); + } + + public void updateEpicDuration(Epic epic) { + List sub = getEpicSubtask(epic.getId()); + sub.stream() + .forEachOrdered(subtask -> { + if (epic.getStartTime() == null || epic.getStartTime().isAfter(subtask.getStartTime())) { + epic.setStartTime(subtask.getStartTime()); + } + if (epic.getEndTime() == null || epic.getEndTime().isBefore(subtask.getEndTime())) { + epic.setEndTime(subtask.getEndTime()); + } + epic.setDuration(epic.getDuration().plus(subtask.getDuration())); + }); + } + + public boolean isCrossed(Task task1, Task task2) { + LocalDateTime start1 = task1.getStartTime(); + LocalDateTime start2 = task1.getStartTime(); + + LocalDateTime end1 = task1.getEndTime(); + LocalDateTime end2 = task1.getEndTime(); + + return !start1.isAfter(end2) || !start2.isAfter(end1); + } + + private void add(Task newTask) { + prioritizedTasks.stream() + .filter(task -> isCrossed(newTask, task)) + .findFirst() + .ifPresentOrElse( + task -> { + String message = "Задача пересекается с задачей с id: " + task.getId() + " с началом: " + + task.getStartTime() + "и концом: " + task.getEndTime(); + throw new TaskValidationException(message); + }, + () -> prioritizedTasks.add(newTask) + ); + } + + private void delete(Task task) { + prioritizedTasks.remove(task); + } } \ No newline at end of file diff --git a/src/tasks/Epic.java b/src/tasks/Epic.java index 4691ef2..5b80ae5 100644 --- a/src/tasks/Epic.java +++ b/src/tasks/Epic.java @@ -1,6 +1,9 @@ package tasks; +import java.time.LocalDateTime; + public class Epic extends Task { + private LocalDateTime endTime; public Epic(String title, String description, TaskStatus status) { super(title, description, status); } @@ -19,4 +22,13 @@ public String toString() { ", status=" + getStatus() + '}'; } + + @Override + public LocalDateTime getEndTime() { + return endTime; + } + + public void setEndTime(LocalDateTime endTime) { + this.endTime = endTime; + } } \ No newline at end of file diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 6850f7a..dac1cbd 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -1,10 +1,15 @@ package tasks; +import java.time.Duration; +import java.time.LocalDateTime; + public class Task { private String title; private String description; private int id; private TaskStatus status; + private Duration duration; + private LocalDateTime startTime; public Task(String title, String description, TaskStatus status) { this.title = title; @@ -12,11 +17,22 @@ public Task(String title, String description, TaskStatus status) { this.status = status; } + public Task(String title, String description, int id, TaskStatus status, Duration duration, LocalDateTime startTime) { + this.title = title; + this.description = description; + this.id = id; + this.status = status; + this.duration = duration; + this.startTime = startTime; + } + public Task(Task task) { this.id = task.id; this.title = task.title; this.description = task.description; this.status = task.status; + this.duration = task.duration; + this.startTime = task.startTime; } public TaskStatus getStatus() { @@ -64,4 +80,24 @@ public void setTitle(String title) { public void setDescription(String description) { this.description = description; } + + public LocalDateTime getEndTime() { + return startTime.plus(duration); + } + + public LocalDateTime getStartTime() { + return startTime; + } + + public Duration getDuration() { + return duration; + } + + public void setDuration(Duration duration) { + this.duration = duration; + } + + public void setStartTime(LocalDateTime startTime) { + this.startTime = startTime; + } } From 0646008eb591eafd2969c47489cca6af3f1d450c Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Sun, 14 Sep 2025 14:06:47 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D1=81=20=D0=94=D0=B0=D1=82=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B8=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=20=D0=B4=D0=BB=D1=8F=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D0=B2=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=20=D0=B8=20=D0=B8=D0=B7=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/Task.txt | 8 ++++---- src/managers/FileBackedTaskManager.java | 23 ++++++++++++++++++++--- src/managers/InMemoryTaskManager.java | 4 ++++ src/tasks/Subtask.java | 8 ++++++++ src/tasks/Task.java | 5 ++--- 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/files/Task.txt b/files/Task.txt index b8137ec..38d4bee 100644 --- a/files/Task.txt +++ b/files/Task.txt @@ -1,4 +1,4 @@ -id,type,name,status,description,epic -1,TASK,Task001,NEW,Description,Task, -2,EPIC,Epic001,NEW,Description,Epic, -3,SUBTASK,Subtask001,NEW,Description,Subtask,2 +id,type,name,status,description,class,epicId,startTime,duration,endTime +1,TASK,Task001,NEW,Description,Task,Null,Null,Null,Null +2,EPIC,Epic001,NEW,Description,Epic,2,2025-01-01T10:00,70,2025-01-01T11:10 +3,SUBTASK,Subtask001,NEW,Description,Subtask,2,2025-01-01T10:00,70,2025-01-01T11:10 diff --git a/src/managers/FileBackedTaskManager.java b/src/managers/FileBackedTaskManager.java index c1562ff..3fb61ec 100644 --- a/src/managers/FileBackedTaskManager.java +++ b/src/managers/FileBackedTaskManager.java @@ -3,6 +3,8 @@ import exceptions.ManagerSaveException; import tasks.*; import java.io.*; +import java.time.Duration; +import java.time.LocalDateTime; public class FileBackedTaskManager extends InMemoryTaskManager { private final File tasks; @@ -14,7 +16,7 @@ public FileBackedTaskManager(File file) { public void save() { try (BufferedWriter writer = new BufferedWriter(new FileWriter(tasks))) { if (tasks.length() == 0) { //прописываем первую строку - writer.write("id,type,name,status,description,epic\n"); + writer.write("id,type,name,status,description,class,epicId,startTime,duration,endTime\n"); } for (Task task : getTaskList()) { writer.write(toString(task)); @@ -67,7 +69,18 @@ public String toString(Task task) { stringBuilder.append(task.getDescription() + ","); stringBuilder.append(task.getClass().getSimpleName() + ","); if (task.getClass() == Subtask.class) { - stringBuilder.append(((Subtask) task).getEpicId()); + stringBuilder.append(((Subtask) task).getEpicId() + ","); + } else if (task.getClass() == Epic.class) { + stringBuilder.append(task.getId() + ","); + } else { + stringBuilder.append("Null,"); + } + if (task.getStartTime() != null && task.getEndTime() != null && task.getDuration() != null) { + stringBuilder.append(task.getStartTime() + ","); + stringBuilder.append(task.getDuration().toMinutes() + ","); + stringBuilder.append(task.getEndTime()); + } else { + stringBuilder.append("Null,Null,Null"); } return stringBuilder.toString(); } @@ -81,10 +94,14 @@ public static Task fromString(String value) { return task; } else if (TaskType.valueOf(str[1]) == (TaskType.EPIC)) { Epic task = new Epic(str[2], str[4], TaskStatus.valueOf(str[3])); + task.setDuration(Duration.ofMinutes(Integer.parseInt(str[8]))); + task.setStartTime(LocalDateTime.parse(str[7])); task.setId(Integer.parseInt(str[0])); return task; } else { Subtask task = new Subtask(str[2], str[4], Integer.parseInt(str[6]), TaskStatus.valueOf(str[3])); + task.setDuration(Duration.ofMinutes(Integer.parseInt(str[8]))); + task.setStartTime(LocalDateTime.parse(str[7])); task.setId(Integer.parseInt(str[0])); return task; } @@ -133,7 +150,7 @@ public static void main(String[] args) { fileBackedTaskManager.addTask(task001); Epic epic001 = new Epic("Epic001", "Description",TaskStatus.NEW); fileBackedTaskManager.addEpic(epic001); - Subtask subtask001 = new Subtask("Subtask001", "Description", epic001.getId(), TaskStatus.NEW); + Subtask subtask001 = new Subtask("Subtask001", "Description", epic001.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); fileBackedTaskManager.addSubtask(subtask001); fileBackedTaskManager.deleteAllEpic(); fileBackedTaskManager.deleteAllSubtask(); diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 7794692..f3afc9a 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -257,6 +257,7 @@ public List getPrioritizedTasks() { public void updateEpicDuration(Epic epic) { List sub = getEpicSubtask(epic.getId()); sub.stream() + .filter(subtask -> subtask.getStartTime() != null) .forEachOrdered(subtask -> { if (epic.getStartTime() == null || epic.getStartTime().isAfter(subtask.getStartTime())) { epic.setStartTime(subtask.getStartTime()); @@ -279,6 +280,9 @@ public boolean isCrossed(Task task1, Task task2) { } private void add(Task newTask) { + if (newTask.getStartTime() == null) { + return; + } prioritizedTasks.stream() .filter(task -> isCrossed(newTask, task)) .findFirst() diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index be7d695..80caeed 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -1,5 +1,8 @@ package tasks; +import java.time.Duration; +import java.time.LocalDateTime; + public class Subtask extends Task { private final int epicId; @@ -8,6 +11,11 @@ public Subtask(String title, String description, int epicId, TaskStatus status) this.epicId = epicId; } + public Subtask(String title, String description, int epicId, TaskStatus status, Duration duration, LocalDateTime startTime) { + super(title, description, status, duration, startTime); + this.epicId = epicId; + } + public int getEpicId() { return epicId; } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index dac1cbd..fc60d5f 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -8,7 +8,7 @@ public class Task { private String description; private int id; private TaskStatus status; - private Duration duration; + private Duration duration = Duration.ZERO; private LocalDateTime startTime; public Task(String title, String description, TaskStatus status) { @@ -17,10 +17,9 @@ public Task(String title, String description, TaskStatus status) { this.status = status; } - public Task(String title, String description, int id, TaskStatus status, Duration duration, LocalDateTime startTime) { + public Task(String title, String description, TaskStatus status, Duration duration, LocalDateTime startTime) { this.title = title; this.description = description; - this.id = id; this.status = status; this.duration = duration; this.startTime = startTime; From 336376ffe92bd8aea9c26cb87ea365bbf8dc4079 Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Sun, 14 Sep 2025 23:45:44 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BA=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/Task.txt | 5 +++-- src/managers/FileBackedTaskManager.java | 20 +++++++++++++++----- src/managers/InMemoryTaskManager.java | 18 ++++++++++++------ 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/files/Task.txt b/files/Task.txt index 38d4bee..24a570a 100644 --- a/files/Task.txt +++ b/files/Task.txt @@ -1,4 +1,5 @@ id,type,name,status,description,class,epicId,startTime,duration,endTime -1,TASK,Task001,NEW,Description,Task,Null,Null,Null,Null -2,EPIC,Epic001,NEW,Description,Epic,2,2025-01-01T10:00,70,2025-01-01T11:10 +1,TASK,Task001,NEW,Description,Task,Null,2024-02-02T11:00,60,2024-02-02T12:00 +2,EPIC,Epic001,NEW,Description,Epic,2,2025-01-01T10:00,140,2025-01-01T12:30 3,SUBTASK,Subtask001,NEW,Description,Subtask,2,2025-01-01T10:00,70,2025-01-01T11:10 +4,SUBTASK,Subtask002,NEW,Description,Subtask,2,2025-01-01T11:20,70,2025-01-01T12:30 diff --git a/src/managers/FileBackedTaskManager.java b/src/managers/FileBackedTaskManager.java index 3fb61ec..5e7eb05 100644 --- a/src/managers/FileBackedTaskManager.java +++ b/src/managers/FileBackedTaskManager.java @@ -90,18 +90,26 @@ public static Task fromString(String value) { if (TaskType.valueOf(str[1]) == (TaskType.TASK)) { Task task = new Task(str[2], str[4], TaskStatus.valueOf(str[3])); + if (str[8] == null || str[7] == null) { + task.setDuration(Duration.ofMinutes(Integer.parseInt(str[8]))); + task.setStartTime(LocalDateTime.parse(str[7])); + } task.setId(Integer.parseInt(str[0])); return task; } else if (TaskType.valueOf(str[1]) == (TaskType.EPIC)) { Epic task = new Epic(str[2], str[4], TaskStatus.valueOf(str[3])); - task.setDuration(Duration.ofMinutes(Integer.parseInt(str[8]))); - task.setStartTime(LocalDateTime.parse(str[7])); + if (str[8] == null || str[7] == null) { + task.setDuration(Duration.ofMinutes(Integer.parseInt(str[8]))); + task.setStartTime(LocalDateTime.parse(str[7])); + } task.setId(Integer.parseInt(str[0])); return task; } else { Subtask task = new Subtask(str[2], str[4], Integer.parseInt(str[6]), TaskStatus.valueOf(str[3])); - task.setDuration(Duration.ofMinutes(Integer.parseInt(str[8]))); - task.setStartTime(LocalDateTime.parse(str[7])); + if (str[8] == null || str[7] == null) { + task.setDuration(Duration.ofMinutes(Integer.parseInt(str[8]))); + task.setStartTime(LocalDateTime.parse(str[7])); + } task.setId(Integer.parseInt(str[0])); return task; } @@ -146,12 +154,14 @@ public void updateEpic(Epic epic) { public static void main(String[] args) { File file = new File("files/Task.txt"); FileBackedTaskManager fileBackedTaskManager = new FileBackedTaskManager(file); - Task task001 = new Task("Task001", "Description", TaskStatus.NEW); + Task task001 = new Task("Task001", "Description", TaskStatus.NEW, Duration.ofMinutes(60), LocalDateTime.of(2024, 2, 2, 11, 0)); fileBackedTaskManager.addTask(task001); Epic epic001 = new Epic("Epic001", "Description",TaskStatus.NEW); fileBackedTaskManager.addEpic(epic001); Subtask subtask001 = new Subtask("Subtask001", "Description", epic001.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); fileBackedTaskManager.addSubtask(subtask001); + Subtask subtask002 = new Subtask("Subtask002", "Description", epic001.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + fileBackedTaskManager.addSubtask(subtask002); fileBackedTaskManager.deleteAllEpic(); fileBackedTaskManager.deleteAllSubtask(); fileBackedTaskManager.deleteTaskList(); diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index f3afc9a..491a48e 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -6,6 +6,7 @@ import tasks.Task; import tasks.TaskStatus; +import java.time.Duration; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -265,18 +266,23 @@ public void updateEpicDuration(Epic epic) { if (epic.getEndTime() == null || epic.getEndTime().isBefore(subtask.getEndTime())) { epic.setEndTime(subtask.getEndTime()); } - epic.setDuration(epic.getDuration().plus(subtask.getDuration())); }); + Duration totalDuration = sub.stream() + .filter(subtask -> subtask.getStartTime() != null) + .map(Subtask::getDuration) + .reduce(Duration.ZERO, Duration::plus); + + epic.setDuration(totalDuration); } public boolean isCrossed(Task task1, Task task2) { LocalDateTime start1 = task1.getStartTime(); - LocalDateTime start2 = task1.getStartTime(); - LocalDateTime end1 = task1.getEndTime(); - LocalDateTime end2 = task1.getEndTime(); - return !start1.isAfter(end2) || !start2.isAfter(end1); + LocalDateTime start2 = task2.getStartTime(); + LocalDateTime end2 = task2.getEndTime(); + boolean notCrossed = start1.isAfter(end2) || start2.isAfter(end1); + return !notCrossed; } private void add(Task newTask) { @@ -289,7 +295,7 @@ private void add(Task newTask) { .ifPresentOrElse( task -> { String message = "Задача пересекается с задачей с id: " + task.getId() + " с началом: " - + task.getStartTime() + "и концом: " + task.getEndTime(); + + task.getStartTime() + " и концом: " + task.getEndTime(); throw new TaskValidationException(message); }, () -> prioritizedTasks.add(newTask) From c5efa3d657900f492872692b4bf0784f835647fb Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Tue, 16 Sep 2025 17:30:54 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BA=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5.=20?= =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/managers/FileBackedTaskManagerTest.java | 20 ++- test/managers/InMemoryTaskManagerTest.java | 50 ++++++-- test/managers/TaskManagerTest.java | 127 +++++++++++++++++++ 3 files changed, 178 insertions(+), 19 deletions(-) create mode 100644 test/managers/TaskManagerTest.java diff --git a/test/managers/FileBackedTaskManagerTest.java b/test/managers/FileBackedTaskManagerTest.java index 43bb1a8..a77092c 100644 --- a/test/managers/FileBackedTaskManagerTest.java +++ b/test/managers/FileBackedTaskManagerTest.java @@ -12,13 +12,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -public class FileBackedTaskManagerTest { +class FileBackedTaskManagerTest extends TaskManagerTest { File temp; FileBackedTaskManager taskManager; - @BeforeEach - public void createHistoryManager() { + @Override + protected FileBackedTaskManager createTaskManager() { { try { temp = File.createTempFile("Test", ".txt"); @@ -27,6 +27,12 @@ public void createHistoryManager() { } } taskManager = new FileBackedTaskManager(temp); + return taskManager; + } + + @BeforeEach + public void createHistoryManager() { + } @Test @@ -39,10 +45,10 @@ public void saveFile() { @Test @DisplayName("Сохранение файлов") public void saveTasksToFile() { - Task task001 = new Task ("Task001", "Description", TaskStatus.NEW); - taskManager.addTask(task001); - Task task002 = new Task ("Task002", "Description", TaskStatus.IN_PROGRESS); - taskManager.addTask(task002); + task1 = new Task ("Task001", "Description", TaskStatus.NEW); + taskManager.addTask(task1); + task2 = new Task ("Task002", "Description", TaskStatus.IN_PROGRESS); + taskManager.addTask(task2); assertTrue(temp.exists()); assertTrue(temp.length() > 0); } diff --git a/test/managers/InMemoryTaskManagerTest.java b/test/managers/InMemoryTaskManagerTest.java index 26f5718..0e7977c 100644 --- a/test/managers/InMemoryTaskManagerTest.java +++ b/test/managers/InMemoryTaskManagerTest.java @@ -1,31 +1,57 @@ package managers; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import tasks.Epic; +import tasks.Subtask; import tasks.Task; import tasks.TaskStatus; import static org.junit.jupiter.api.Assertions.*; -class InMemoryTaskManagerTest { +class InMemoryTaskManagerTest extends TaskManagerTest{ - TaskManager taskManager; + @Override + protected InMemoryTaskManager createTaskManager() { + return new InMemoryTaskManager(); + } @BeforeEach - public void createTaskManager() { - taskManager = Managers.getDefault(); + public void setUp() { + taskManager = createTaskManager(); } @Test - @DisplayName("Проверка присвоения разных id") - public void getDifferentTypes() { - Task task = new Task("Таск", "Тело таска", TaskStatus.NEW); - taskManager.addTask(task); - Epic epic = new Epic("Эпик", "Тело эпика",TaskStatus.NEW); + public void epicStatusTest() { + epic = new Epic("Эпик", "Тело эпика",TaskStatus.NEW); taskManager.addEpic(epic); - assertEquals(1, taskManager.getTaskForId(1).getId(), "Задача с этим id не найдена"); - assertEquals(2, taskManager.getEpicForId(2).getId(), "Задача с этим id не найдена"); + subtask1 = new Subtask("Sub1", "Description", epic.getId(), TaskStatus.NEW); + subtask2 = new Subtask("Sub2", "Description", epic.getId(), TaskStatus.NEW); + + taskManager.addSubtask(subtask1); + taskManager.addSubtask(subtask2); + + assertEquals(TaskStatus.NEW, epic.getStatus()); + + subtask1.setStatus(TaskStatus.DONE); + taskManager.updateSubtask(subtask1); + subtask2.setStatus(TaskStatus.DONE); + taskManager.updateSubtask(subtask2); + + assertEquals(TaskStatus.DONE, epic.getStatus()); + + subtask1.setStatus(TaskStatus.IN_PROGRESS); + taskManager.updateSubtask(subtask1); + subtask2.setStatus(TaskStatus.IN_PROGRESS); + taskManager.updateSubtask(subtask2); + + assertEquals(TaskStatus.IN_PROGRESS, epic.getStatus()); + + subtask1.setStatus(TaskStatus.NEW); + taskManager.updateSubtask(subtask1); + subtask2.setStatus(TaskStatus.DONE); + taskManager.updateSubtask(subtask2); + + assertEquals(TaskStatus.IN_PROGRESS, epic.getStatus()); } } \ No newline at end of file diff --git a/test/managers/TaskManagerTest.java b/test/managers/TaskManagerTest.java new file mode 100644 index 0000000..5553d2d --- /dev/null +++ b/test/managers/TaskManagerTest.java @@ -0,0 +1,127 @@ +package managers; + +import exceptions.TaskValidationException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import tasks.Epic; +import tasks.Subtask; +import tasks.Task; +import tasks.TaskStatus; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public abstract class TaskManagerTest { + protected T taskManager; + protected Epic epic; + protected Subtask subtask1; + protected Subtask subtask2; + protected Task task1; + protected Task task2; + + protected abstract T createTaskManager(); + + @BeforeEach + void setUp() { + taskManager = createTaskManager(); + } + + @Test + void createTask() { + task1 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); + taskManager.addTask(task1); + assertNotNull(task1.getId()); + assertEquals(task1, taskManager.getTaskForId(task1.getId())); + assertTrue(taskManager.getTaskList().contains(task1)); + } + + @Test + @DisplayName("Создание эпика и подзадачи") + void createEpicAndSub() { + epic = new Epic("Epic001", "Description",TaskStatus.NEW); + taskManager.addEpic(epic); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); + taskManager.addSubtask(subtask1); + assertNotNull(epic.getId()); + assertNotNull(subtask1.getId()); + assertTrue(taskManager.getEpicList().contains(epic)); + assertTrue(taskManager.getAllSubtask().contains(subtask1)); + } + + @Test + void deleteTask() { + task1 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); + taskManager.addTask(task1); + taskManager.removeTaskForId(task1.getId()); + assertFalse(taskManager.getTaskList().contains(task1)); + } + + @Test + void getEpicSubtasks() { + epic = new Epic("Epic001", "Description",TaskStatus.NEW); + taskManager.addEpic(epic); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); + subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + taskManager.addSubtask(subtask1); + taskManager.addSubtask(subtask2); + + List epicSubtasks = taskManager.getEpicSubtask(epic.getId()); + assertEquals(2, epicSubtasks.size()); + assertTrue(epicSubtasks.contains(subtask1)); + assertTrue(epicSubtasks.contains(subtask2)); + } + + @Test + @DisplayName("Проверка присвоения разных id") + void getDifferentTypesId() { + task1 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); + taskManager.addTask(task1); + task2 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); + taskManager.addTask(task2); + assertEquals(1, taskManager.getTaskForId(1).getId(), "Задача с этим id не найдена"); + assertEquals(2, taskManager.getTaskForId(2).getId(), "Задача с этим id не найдена"); + } + + @Test + void tasksWithoutTimeDoNotConflict() { + task1 = new Task("Task 1", "Description", TaskStatus.NEW, null, null); + task2 = new Task("Task 2", "Description", TaskStatus.NEW, null, null); + + assertDoesNotThrow(() -> { + taskManager.addTask(task1); + taskManager.addTask(task2); + }); + } + + @Test + void notCrossedDates() { + epic = new Epic("Epic001", "Description",TaskStatus.NEW); + taskManager.addEpic(epic); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); + subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + + assertDoesNotThrow(() -> { + taskManager.addSubtask(subtask1); + taskManager.addSubtask(subtask2); + }); + } + + @Test + void isCrossedDates() { + epic = new Epic("Epic001", "Description",TaskStatus.NEW); + taskManager.addEpic(epic); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 0)); + subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + + taskManager.addSubtask(subtask1); + + assertThrows(TaskValidationException.class, () -> { + taskManager.addSubtask(subtask2); + }); + } +} \ No newline at end of file From f2c1cff63bbab2ec5f057b93b0581b1466ca342d Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Tue, 16 Sep 2025 17:42:28 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BA=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5.=20?= =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/managers/TaskManagerTest.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/test/managers/TaskManagerTest.java b/test/managers/TaskManagerTest.java index 5553d2d..1795afa 100644 --- a/test/managers/TaskManagerTest.java +++ b/test/managers/TaskManagerTest.java @@ -45,7 +45,8 @@ void createTask() { void createEpicAndSub() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); - subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); taskManager.addSubtask(subtask1); assertNotNull(epic.getId()); assertNotNull(subtask1.getId()); @@ -65,8 +66,10 @@ void deleteTask() { void getEpicSubtasks() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); - subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); - subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); + subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); taskManager.addSubtask(subtask1); taskManager.addSubtask(subtask2); @@ -102,8 +105,10 @@ void tasksWithoutTimeDoNotConflict() { void notCrossedDates() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); - subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); - subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); + subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); assertDoesNotThrow(() -> { taskManager.addSubtask(subtask1); @@ -115,8 +120,10 @@ void notCrossedDates() { void isCrossedDates() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); - subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 0)); - subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 0)); + subtask2 = new Subtask("Subtask002", "Description", epic.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); taskManager.addSubtask(subtask1); From d5c34de9011e5ccfc013d79d0aed7365e07a9e21 Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Tue, 16 Sep 2025 17:46:42 +0300 Subject: [PATCH 6/8] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20Che?= =?UTF-8?q?ckStyle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/managers/FileBackedTaskManager.java | 9 ++++++--- src/tasks/Subtask.java | 3 ++- src/tasks/Task.java | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/managers/FileBackedTaskManager.java b/src/managers/FileBackedTaskManager.java index 5e7eb05..7dd3743 100644 --- a/src/managers/FileBackedTaskManager.java +++ b/src/managers/FileBackedTaskManager.java @@ -154,13 +154,16 @@ public void updateEpic(Epic epic) { public static void main(String[] args) { File file = new File("files/Task.txt"); FileBackedTaskManager fileBackedTaskManager = new FileBackedTaskManager(file); - Task task001 = new Task("Task001", "Description", TaskStatus.NEW, Duration.ofMinutes(60), LocalDateTime.of(2024, 2, 2, 11, 0)); + Task task001 = new Task("Task001", "Description", TaskStatus.NEW, + Duration.ofMinutes(60), LocalDateTime.of(2024, 2, 2, 11, 0)); fileBackedTaskManager.addTask(task001); Epic epic001 = new Epic("Epic001", "Description",TaskStatus.NEW); fileBackedTaskManager.addEpic(epic001); - Subtask subtask001 = new Subtask("Subtask001", "Description", epic001.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); + Subtask subtask001 = new Subtask("Subtask001", "Description", epic001.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 10, 0)); fileBackedTaskManager.addSubtask(subtask001); - Subtask subtask002 = new Subtask("Subtask002", "Description", epic001.getId(), TaskStatus.NEW, Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); + Subtask subtask002 = new Subtask("Subtask002", "Description", epic001.getId(), TaskStatus.NEW, + Duration.ofMinutes(70), LocalDateTime.of(2025, 1, 1, 11, 20)); fileBackedTaskManager.addSubtask(subtask002); fileBackedTaskManager.deleteAllEpic(); fileBackedTaskManager.deleteAllSubtask(); diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index 80caeed..3ce4c1c 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -11,7 +11,8 @@ public Subtask(String title, String description, int epicId, TaskStatus status) this.epicId = epicId; } - public Subtask(String title, String description, int epicId, TaskStatus status, Duration duration, LocalDateTime startTime) { + public Subtask(String title, String description, int epicId, TaskStatus status, + Duration duration, LocalDateTime startTime) { super(title, description, status, duration, startTime); this.epicId = epicId; } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index fc60d5f..b36413d 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -17,7 +17,8 @@ public Task(String title, String description, TaskStatus status) { this.status = status; } - public Task(String title, String description, TaskStatus status, Duration duration, LocalDateTime startTime) { + public Task(String title, String description, TaskStatus status, + Duration duration, LocalDateTime startTime) { this.title = title; this.description = description; this.status = status; From 76cf0e3e222007a1ba02574f942d9ce41b728a2c Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Tue, 16 Sep 2025 17:48:50 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20Che?= =?UTF-8?q?ckStyle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tasks/Epic.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tasks/Epic.java b/src/tasks/Epic.java index 5b80ae5..f4ac60e 100644 --- a/src/tasks/Epic.java +++ b/src/tasks/Epic.java @@ -4,6 +4,7 @@ public class Epic extends Task { private LocalDateTime endTime; + public Epic(String title, String description, TaskStatus status) { super(title, description, status); } From 97c8c013f856af97e4072936b098eecdaa635960 Mon Sep 17 00:00:00 2001 From: Denis Panasyuk Date: Wed, 17 Sep 2025 10:45:53 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=92=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=81=D0=BE=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/managers/InMemoryTaskManager.java | 11 +++----- test/managers/FileBackedTaskManagerTest.java | 12 +++------ test/managers/InMemoryHistoryManagerTest.java | 1 - test/managers/InMemoryTaskManagerTest.java | 11 ++------ test/managers/TaskManagerTest.java | 25 +++++++++++-------- test/tasks/EpicTest.java | 2 +- test/tasks/SubtaskTest.java | 2 +- test/tasks/TaskTest.java | 3 +-- 8 files changed, 27 insertions(+), 40 deletions(-) diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 491a48e..bf4470a 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -31,13 +31,6 @@ public ArrayList getEpicList() { @Override public List getEpicSubtask(Integer epicId) { //Выводит список подзадач эпика - /*List currentEpic = new ArrayList<>(); - for (Subtask subtask : subtaskList.values()) { - if (subtask.getEpicId() == epicId) { - currentEpic.add(subtask); - } - } - return currentEpic; */ Epic epic = epicList.get(epicId); if (epic == null) { return null; @@ -57,6 +50,7 @@ public ArrayList getAllSubtask() { public void deleteTaskList() { for (Integer id : taskList.keySet()) { historyManager.remove(id); + delete(taskList.get(id)); } taskList.clear(); } @@ -65,6 +59,7 @@ public void deleteTaskList() { public void deleteAllSubtask() { for (Integer id : subtaskList.keySet()) { historyManager.remove(id); + delete(subtaskList.get(id)); } subtaskList.clear(); for (Epic epic : epicList.values()) { //идем по списку эпиков @@ -76,10 +71,12 @@ public void deleteAllSubtask() { public void deleteAllEpic() { for (Integer id : epicList.keySet()) { historyManager.remove(id); + delete(epicList.get(id)); } epicList.clear(); for (Integer id : subtaskList.keySet()) { historyManager.remove(id); + delete(subtaskList.get(id)); } subtaskList.clear(); } diff --git a/test/managers/FileBackedTaskManagerTest.java b/test/managers/FileBackedTaskManagerTest.java index a77092c..1601e05 100644 --- a/test/managers/FileBackedTaskManagerTest.java +++ b/test/managers/FileBackedTaskManagerTest.java @@ -1,6 +1,5 @@ package managers; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import tasks.Task; @@ -30,21 +29,16 @@ protected FileBackedTaskManager createTaskManager() { return taskManager; } - @BeforeEach - public void createHistoryManager() { - - } - @Test @DisplayName("Сохранение пустого файла") - public void saveFile() { + public void testSaveFile() { taskManager.save(); assertTrue(temp.exists()); } @Test @DisplayName("Сохранение файлов") - public void saveTasksToFile() { + public void testSaveTasksToFile() { task1 = new Task ("Task001", "Description", TaskStatus.NEW); taskManager.addTask(task1); task2 = new Task ("Task002", "Description", TaskStatus.IN_PROGRESS); @@ -55,7 +49,7 @@ public void saveTasksToFile() { @Test @DisplayName("Загрузка файлов") - public void loadFile() { + public void testLoadFile() { FileBackedTaskManager taskManager1 = FileBackedTaskManager.loadFromFile(temp); assertEquals(taskManager1.getTaskList().size(), taskManager.getTaskList().size()); } diff --git a/test/managers/InMemoryHistoryManagerTest.java b/test/managers/InMemoryHistoryManagerTest.java index d1f7883..82c977f 100644 --- a/test/managers/InMemoryHistoryManagerTest.java +++ b/test/managers/InMemoryHistoryManagerTest.java @@ -1,6 +1,5 @@ package managers; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/test/managers/InMemoryTaskManagerTest.java b/test/managers/InMemoryTaskManagerTest.java index 0e7977c..9f4b510 100644 --- a/test/managers/InMemoryTaskManagerTest.java +++ b/test/managers/InMemoryTaskManagerTest.java @@ -1,28 +1,21 @@ package managers; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import tasks.Epic; import tasks.Subtask; -import tasks.Task; import tasks.TaskStatus; import static org.junit.jupiter.api.Assertions.*; -class InMemoryTaskManagerTest extends TaskManagerTest{ +class InMemoryTaskManagerTest extends TaskManagerTest { @Override protected InMemoryTaskManager createTaskManager() { return new InMemoryTaskManager(); } - @BeforeEach - public void setUp() { - taskManager = createTaskManager(); - } - @Test - public void epicStatusTest() { + public void testEpicStatus() { epic = new Epic("Эпик", "Тело эпика",TaskStatus.NEW); taskManager.addEpic(epic); subtask1 = new Subtask("Sub1", "Description", epic.getId(), TaskStatus.NEW); diff --git a/test/managers/TaskManagerTest.java b/test/managers/TaskManagerTest.java index 1795afa..a74cbda 100644 --- a/test/managers/TaskManagerTest.java +++ b/test/managers/TaskManagerTest.java @@ -4,7 +4,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; import tasks.Epic; import tasks.Subtask; import tasks.Task; @@ -16,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.*; -public abstract class TaskManagerTest { +public abstract class TaskManagerTest { protected T taskManager; protected Epic epic; protected Subtask subtask1; @@ -32,7 +31,8 @@ void setUp() { } @Test - void createTask() { + @DisplayName("Создание задачи") + void testCreateTask() { task1 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); taskManager.addTask(task1); assertNotNull(task1.getId()); @@ -42,7 +42,7 @@ void createTask() { @Test @DisplayName("Создание эпика и подзадачи") - void createEpicAndSub() { + void testCreateEpicAndSub() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, @@ -55,7 +55,8 @@ void createEpicAndSub() { } @Test - void deleteTask() { + @DisplayName("Проверка удаления задачи") + void testDeleteTask() { task1 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); taskManager.addTask(task1); taskManager.removeTaskForId(task1.getId()); @@ -63,7 +64,8 @@ void deleteTask() { } @Test - void getEpicSubtasks() { + @DisplayName("Проверка получения эпика и подзадач") + void testGetEpicSubtasks() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, @@ -81,7 +83,7 @@ void getEpicSubtasks() { @Test @DisplayName("Проверка присвоения разных id") - void getDifferentTypesId() { + void testGetDifferentTypesId() { task1 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); taskManager.addTask(task1); task2 = new Task("Переезд", "переезд в другой город", TaskStatus.NEW); @@ -91,7 +93,8 @@ void getDifferentTypesId() { } @Test - void tasksWithoutTimeDoNotConflict() { + @DisplayName("Проверка что задачи без даты не конфликтуют") + void testTasksWithoutTimeDoNotConflict() { task1 = new Task("Task 1", "Description", TaskStatus.NEW, null, null); task2 = new Task("Task 2", "Description", TaskStatus.NEW, null, null); @@ -102,7 +105,8 @@ void tasksWithoutTimeDoNotConflict() { } @Test - void notCrossedDates() { + @DisplayName("Проверка условия когда задачи не пересекаются") + void testNotCrossedDates() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, @@ -117,7 +121,8 @@ void notCrossedDates() { } @Test - void isCrossedDates() { + @DisplayName("Проверка когда задачи пересекаются") + void testIsCrossedDates() { epic = new Epic("Epic001", "Description",TaskStatus.NEW); taskManager.addEpic(epic); subtask1 = new Subtask("Subtask001", "Description", epic.getId(), TaskStatus.NEW, diff --git a/test/tasks/EpicTest.java b/test/tasks/EpicTest.java index 51682dd..27c315f 100644 --- a/test/tasks/EpicTest.java +++ b/test/tasks/EpicTest.java @@ -21,7 +21,7 @@ public void createTaskManager() { @Test @DisplayName("Добавление эпика") - void addNewEpic() { + void testAddNewEpic() { Epic epic = new Epic("Эпик", "Тело эпика",TaskStatus.NEW); taskManager.addEpic(epic); final int epicId = epic.getId(); diff --git a/test/tasks/SubtaskTest.java b/test/tasks/SubtaskTest.java index f78f15c..8f58dbf 100644 --- a/test/tasks/SubtaskTest.java +++ b/test/tasks/SubtaskTest.java @@ -21,7 +21,7 @@ public void createTaskManager() { @Test @DisplayName("Добавление подзадачи") - void addNewSubtask() { + void testAddNewSubtask() { Epic epic = new Epic("Эпик", "Тело эпика",TaskStatus.NEW); taskManager.addEpic(epic); Subtask subtask = new Subtask("подзадача", "тело", epic.getId(), TaskStatus.NEW); diff --git a/test/tasks/TaskTest.java b/test/tasks/TaskTest.java index 3e9f27f..4603537 100644 --- a/test/tasks/TaskTest.java +++ b/test/tasks/TaskTest.java @@ -1,6 +1,5 @@ package tasks; -import managers.HistoryManager; import managers.Managers; import managers.TaskManager; import org.junit.jupiter.api.BeforeEach; @@ -22,7 +21,7 @@ public void createTaskManager() { @Test @DisplayName("Добавление задачи") - void addNewTask() { + void testAddNewTask() { Task task = new Task("Таск", "Тело таска",TaskStatus.NEW); taskManager.addTask(task); final int taskId = task.getId();