diff --git a/src/Main.java b/src/Main.java index 381251a..8534615 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,10 +1,10 @@ -import managers.FileBackedTaskManager; import statuses.*; import managers.TaskManager; import tasks.*; import util.Managers; -import java.io.File; +import java.time.Duration; +import java.time.LocalDateTime; public class Main { @@ -13,186 +13,187 @@ public static void main(String[] args) { TaskManager inMemoryTaskManager = Managers.getDefault(); TaskManager fileBackedTaskManager = Managers.getDefaultFileBackend(); // printHistoryDeleteTaskWorkExample(inMemoryTaskManager); - printWorkingExampleWithFile(fileBackedTaskManager); +// printWorkingExampleWithFile(fileBackedTaskManager); // printWorkingExampleFromFile(file); + printWorkinExamplePrioritizedTasks(inMemoryTaskManager); } - private static void printWorkingExample(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); - manager.addEpic(new Epic("Покрасить волосы", "На праздник")); - manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); - System.out.println("Задачи: "); - for (Task task : manager.getTasks()) { - System.out.println(task); - } - System.out.println("Эпики:"); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подазадачи эпика - Написать курсовую работу"); - for (Subtask subtask : manager.getEpicSubtasks(2)) { - System.out.println(subtask); - } - System.out.println("Подзадачи эпика - Покрасить волосы"); - for (Subtask subtask : manager.getEpicSubtasks(7)) { - System.out.println(subtask); - } - - manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3)); - manager.updateSubtask(new Subtask("Купить краску", "Для выступления", StatusTask.IN_PROGRESS, 7, 8)); - manager.deleteSubtask(4); - System.out.println(); - System.out.println("После выполнения работ!"); - System.out.println("Эпики:"); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подазадачи эпика - Написать курсовую работу"); - for (Subtask subtask : manager.getEpicSubtasks(2)) { - System.out.println(subtask); - } - System.out.println("Подзадачи эпика - Покрасить волосы"); - for (Subtask subtask : manager.getEpicSubtasks(7)) { - System.out.println(subtask); - } - - System.out.println("Обновляем эпик"); - manager.updateEpic(new Epic("Покрасить волосы", "На праздник (обновлен)", 7)); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подзадачи эпика - Покрасить волосы"); - for (Subtask subtask : manager.getEpicSubtasks(7)) { - System.out.println(subtask); - } - } - - private static void printAllTasks(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); - manager.addEpic(new Epic("Покрасить волосы", "На праздник")); - manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); - System.out.println("Задачи:"); - for (Task task : manager.getTasks()) { - System.out.println(task); - } - System.out.println("Эпики:"); - for (Task epic : manager.getEpics()) { - System.out.println(epic); - - for (Task task : manager.getEpicSubtasks(epic.getId())) { - System.out.println("--> " + task); - } - } - System.out.println("Подзадачи:"); - for (Task subtask : manager.getSubtasks()) { - System.out.println(subtask); - } - - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - } - - private static void printHistoryWorkExample(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); - manager.getTask(1); - manager.getTask(1); - manager.getTask(1); - manager.getEpic(2); - manager.getSubtask(3); - manager.getEpic(2); - manager.getSubtask(3); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - } - - private static void printHistoryDeleteTaskWorkExample(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); - - manager.addTask(new Task("Сделать ДЗ", "Сделать ДЗ за 1 час")); - manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 3)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 3)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 3)); - manager.addEpic(new Epic("Сделать проект по 6 спринту яндекс", "Выполнить все подзадачи")); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getTask(2); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getEpic(3); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getEpic(7); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getTask(1); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getSubtask(4); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getSubtask(6); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.getEpic(2); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - - manager.deleteTask(1); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - manager.deleteEpic(3); - System.out.println("История:"); - for (Task task : manager.getHistory()) { - System.out.println(task); - } - } +// private static void printWorkingExample(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); +// manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); +// manager.addEpic(new Epic("Покрасить волосы", "На праздник")); +// manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); +// System.out.println("Задачи: "); +// for (Task task : manager.getTasks()) { +// System.out.println(task); +// } +// System.out.println("Эпики:"); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подазадачи эпика - Написать курсовую работу"); +// for (Subtask subtask : manager.getEpicSubtasks(2)) { +// System.out.println(subtask); +// } +// System.out.println("Подзадачи эпика - Покрасить волосы"); +// for (Subtask subtask : manager.getEpicSubtasks(7)) { +// System.out.println(subtask); +// } +// +// manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3)); +// manager.updateSubtask(new Subtask("Купить краску", "Для выступления", StatusTask.IN_PROGRESS, 7, 8)); +// manager.deleteSubtask(4); +// System.out.println(); +// System.out.println("После выполнения работ!"); +// System.out.println("Эпики:"); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подазадачи эпика - Написать курсовую работу"); +// for (Subtask subtask : manager.getEpicSubtasks(2)) { +// System.out.println(subtask); +// } +// System.out.println("Подзадачи эпика - Покрасить волосы"); +// for (Subtask subtask : manager.getEpicSubtasks(7)) { +// System.out.println(subtask); +// } +// +// System.out.println("Обновляем эпик"); +// manager.updateEpic(new Epic("Покрасить волосы", "На праздник (обновлен)", 7)); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подзадачи эпика - Покрасить волосы"); +// for (Subtask subtask : manager.getEpicSubtasks(7)) { +// System.out.println(subtask); +// } +// } +// +// private static void printAllTasks(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); +// manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); +// manager.addEpic(new Epic("Покрасить волосы", "На праздник")); +// manager.addSubtask(new Subtask("Купить краску", "Для выступления", 7)); +// System.out.println("Задачи:"); +// for (Task task : manager.getTasks()) { +// System.out.println(task); +// } +// System.out.println("Эпики:"); +// for (Task epic : manager.getEpics()) { +// System.out.println(epic); +// +// for (Task task : manager.getEpicSubtasks(epic.getId())) { +// System.out.println("--> " + task); +// } +// } +// System.out.println("Подзадачи:"); +// for (Task subtask : manager.getSubtasks()) { +// System.out.println(subtask); +// } +// +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// } +// +// private static void printHistoryWorkExample(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); +// manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 2)); +// manager.getTask(1); +// manager.getTask(1); +// manager.getTask(1); +// manager.getEpic(2); +// manager.getSubtask(3); +// manager.getEpic(2); +// manager.getSubtask(3); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// } +// +// private static void printHistoryDeleteTaskWorkExample(TaskManager manager) { +// manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); +// +// manager.addTask(new Task("Сделать ДЗ", "Сделать ДЗ за 1 час")); +// manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); +// manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 3)); +// manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 3)); +// manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 3)); +// manager.addEpic(new Epic("Сделать проект по 6 спринту яндекс", "Выполнить все подзадачи")); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getTask(2); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getEpic(3); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getEpic(7); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getTask(1); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getSubtask(4); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getSubtask(6); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.getEpic(2); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// +// manager.deleteTask(1); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// manager.deleteEpic(3); +// System.out.println("История:"); +// for (Task task : manager.getHistory()) { +// System.out.println(task); +// } +// } private static void printWorkingExampleWithFile(TaskManager manager) { - manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут", Duration.ofMinutes(100), LocalDateTime.now())); manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); - manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); - manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); - manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); + manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2, Duration.ofMinutes(150), LocalDateTime.now())); + manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2, Duration.ofMinutes(180), LocalDateTime.now())); + manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2, Duration.ofMinutes(120), LocalDateTime.now())); manager.addEpic(new Epic("Покрасить волосы", "На праздник")); - manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 6)); + manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 6, Duration.ofMinutes(60), LocalDateTime.now())); System.out.println("Задачи:"); for (Task task : manager.getTasks()) { System.out.println(task); @@ -205,8 +206,7 @@ private static void printWorkingExampleWithFile(TaskManager manager) { for (Subtask subtask : manager.getSubtasks()) { System.out.println(subtask); } - manager.updateTask(new Task("Выгулять псину", "Погулять с Джеком 40 минут", 1)); - manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3)); + manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3, Duration.ofMinutes(150), LocalDateTime.now())); System.out.println("После выполнения работ:"); System.out.println("Задачи:"); for (Task task : manager.getTasks()) { @@ -222,7 +222,7 @@ private static void printWorkingExampleWithFile(TaskManager manager) { } manager.deleteSubtask(3); manager.deleteEpic(2); - manager.updateSubtask(new Subtask("Оформить реферат", "Для выступления", StatusTask.DONE, 6, 7)); + manager.updateSubtask(new Subtask("Оформить реферат", "Для выступления", StatusTask.DONE, 6, 7, Duration.ofMinutes(60), LocalDateTime.now())); System.out.println("После выполнения работ:"); System.out.println("Задачи:"); for (Task task : manager.getTasks()) { @@ -238,26 +238,37 @@ private static void printWorkingExampleWithFile(TaskManager manager) { } } - private static void printWorkingExampleFromFile(File file) { - FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(file); - System.out.println("Задачи:"); - for (Task task : manager.getTasks()) { - System.out.println(task); - } - System.out.println("Эпики:"); - for (Epic epic : manager.getEpics()) { - System.out.println(epic); - } - System.out.println("Подзадачи:"); - for (Subtask subtask : manager.getSubtasks()) { - System.out.println(subtask); - } - manager.addTask(new Task("Тест1", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест2", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест3", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест4", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест5", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест6", "Погулять с Джеком 20 минут")); - manager.addTask(new Task("Тест7", "Погулять с Джеком 20 минут")); + private static void printWorkinExamplePrioritizedTasks(TaskManager manager) { + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут", Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 0))); + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут3.4")); + manager.addTask(new Task("Выгулять собаку2", "Погулять с Джеком 20 минут2", Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 10))); + manager.addTask(new Task("Выгулять собаку3", "Погулять с Джеком 20 минут3", Duration.ofMinutes(100), LocalDateTime.of(2025, 7, 2, 9, 0))); + manager.addTask(new Task("Выгулять собаку4", "Погулять с Джеком 20 минут4", Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 0))); + manager.addEpic(new Epic("Выгулять собаку5", "Погулять с Джеком 20 минут5")); + manager.addSubtask(new Subtask("Выгулять собаку6", "Погулять с Джеком 20 минут6", 6, Duration.ofMinutes(100), LocalDateTime.of(2025, 6, 2, 10, 0))); + manager.getPrioritizedTasks().forEach(System.out::println); } + +// private static void printWorkingExampleFromFile(File file) { +// FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(file); +// System.out.println("Задачи:"); +// for (Task task : manager.getTasks()) { +// System.out.println(task); +// } +// System.out.println("Эпики:"); +// for (Epic epic : manager.getEpics()) { +// System.out.println(epic); +// } +// System.out.println("Подзадачи:"); +// for (Subtask subtask : manager.getSubtasks()) { +// System.out.println(subtask); +// } +// manager.addTask(new Task("Тест1", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест2", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест3", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест4", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест5", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест6", "Погулять с Джеком 20 минут")); +// manager.addTask(new Task("Тест7", "Погулять с Джеком 20 минут")); +// } } diff --git a/src/managers/FileBackedTaskManager.java b/src/managers/FileBackedTaskManager.java index 1ff4866..0bbf33b 100644 --- a/src/managers/FileBackedTaskManager.java +++ b/src/managers/FileBackedTaskManager.java @@ -105,9 +105,9 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFr try (BufferedReader buffer = new BufferedReader(new FileReader(file))) { FileBackedTaskManager manager = new FileBackedTaskManager(); ArrayList tasks = new ArrayList<>(buffer.lines().toList()); - String header = "id,type,name,status,description,epic"; + String header = "id,type,name,status,description,epic,duration,start_time,end_time"; tasks.remove(header); - for (String task : tasks) { + tasks.forEach(task -> { String[] taskInfo = task.split(","); switch (TaskType.valueOf(taskInfo[1])) { case TaskType.TASK: @@ -122,7 +122,7 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFr default: System.out.println("Не определена задача в файле"); } - } + }); return manager; } catch (IOException e) { throw new ManagerLoadFromFileException("Возникла ошибка при загрузке данных из файла", file); @@ -132,7 +132,7 @@ public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFr private void save() throws ManagerSaveException { try (FileWriter writer = new FileWriter(managerFile)) { - String header = "id,type,name,status,description,epic\n"; + String header = "id,type,name,status,description,epic,duration,start_time,end_time\n"; writer.write(header); for (Task task : getTasks()) { writer.write(String.format("%s\n", task.toString())); diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 1af140a..0a00b1c 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -4,9 +4,10 @@ import tasks.*; import util.Managers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; public class InMemoryTaskManager implements TaskManager { private final HashMap tasks = new HashMap<>(); @@ -14,6 +15,9 @@ public class InMemoryTaskManager implements TaskManager { private final HashMap epics = new HashMap<>(); private final HistoryManager historyManager = Managers.getDefaultHistory(); private int taskId = 0; + private final Comparator comparator = Comparator.comparing(Task::getStartTime, + Comparator.nullsLast(Comparator.naturalOrder())); + private final TreeSet prioritizedTasks = new TreeSet<>(comparator); @Override public ArrayList getTasks() { @@ -54,12 +58,8 @@ public Epic getEpic(int id) { @Override public ArrayList getEpicSubtasks(int epicId) { Epic epic = epics.get(epicId); - ArrayList epicSubtasks = new ArrayList<>(); if (epic != null) { - for (Integer subtaskId : epic.getSubtasks()) { - epicSubtasks.add(subtasks.get(subtaskId)); - } - return epicSubtasks; + return epic.getSubtasks().stream().map(subtasks::get).collect(Collectors.toCollection(ArrayList::new)); } else { System.out.println("Эпик не найден!"); return null; @@ -74,14 +74,18 @@ public List getHistory() { @Override public void addTask(Task task) { - if (task.getId() == 0) { + if (isIntersectionTaskTime(task)) { + System.out.println("Задача пересекается по времени с другими"); + } else if (task.getId() == 0) { do { taskId++; task.setId(taskId); } while (checkContainsAllTasks(task)); tasks.put(taskId, task); + prioritizedTasks.add(task); } else if (!checkContainsAllTasks(task)) { tasks.put(task.getId(), task); + prioritizedTasks.add(task); } else { System.out.println("Данные с таким id существуют в списке"); } @@ -90,19 +94,25 @@ public void addTask(Task task) { @Override public void addSubtask(Subtask subtask) { Epic epic = epics.get(subtask.getEpicId()); - if (epic != null) { + if (isIntersectionTaskTime(subtask)) { + System.out.println("Подзадача пересекается по времени с другими"); + } else if (epic != null) { if (subtask.getId() == 0) { do { taskId++; subtask.setId(taskId); } while (checkContainsAllTasks(subtask)); subtasks.put(taskId, subtask); + prioritizedTasks.add(subtask); epic.addSubtask(subtask); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } else if (!checkContainsAllTasks(subtask)) { subtasks.put(subtask.getId(), subtask); + prioritizedTasks.add(subtask); epic.addSubtask(subtask); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } else { System.out.println("Данные с таким id существуют в списке"); } @@ -113,7 +123,9 @@ public void addSubtask(Subtask subtask) { @Override public void addEpic(Epic epic) { - if (epic.getId() == 0) { + if (isIntersectionTaskTime(epic)) { + System.out.println("Эпик пересекается по времени с другими"); + } else if (epic.getId() == 0) { do { taskId++; epic.setId(taskId); @@ -129,6 +141,7 @@ public void addEpic(Epic epic) { @Override public void deleteTask(int id) { + prioritizedTasks.remove(tasks.get(id)); tasks.remove(id); historyManager.remove(id); } @@ -140,7 +153,9 @@ public void deleteSubtask(int id) { Epic epic = epics.get(subtask.getEpicId()); epic.removeSubtask(id); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } + prioritizedTasks.remove(subtask); subtasks.remove(id); historyManager.remove(id); } @@ -150,44 +165,40 @@ public void deleteEpic(int id) { Epic epic = epics.remove(id); historyManager.remove(id); if (epic != null) { - for (Integer subtaskId : epic.getSubtasks()) { + epic.getSubtasks().forEach(subtaskId -> { + prioritizedTasks.remove(subtasks.get(subtaskId)); subtasks.remove(subtaskId); historyManager.remove(subtaskId); - } + }); } - - } @Override public void clearTasks() { - for (Integer taskId : tasks.keySet()) { - historyManager.remove(taskId); - } + tasks.values().forEach(prioritizedTasks::remove); + tasks.keySet().forEach(historyManager::remove); tasks.clear(); } @Override public void clearSubtasks() { - for (Epic epic : epics.values()) { + epics.values().forEach(epic -> { epic.clearSubtaskList(); epic.setStatus(StatusTask.NEW); - } - for (Integer subtaskId : subtasks.keySet()) { - historyManager.remove(subtaskId); - } + }); + subtasks.values().forEach(prioritizedTasks::remove); + subtasks.keySet().forEach(historyManager::remove); subtasks.clear(); } @Override public void clearEpics() { - for (Epic epic : epics.values()) { + epics.values().forEach(epic -> { historyManager.remove(epic.getId()); - for (Integer subtaskId : epic.getSubtasks()) { - historyManager.remove(subtaskId); - } - } + epic.getSubtasks().forEach(historyManager::remove); + }); epics.clear(); + subtasks.values().forEach(prioritizedTasks::remove); subtasks.clear(); } @@ -198,7 +209,8 @@ public void updateTask(Task task) { System.out.println("Не существует такой задачи"); return; } - + prioritizedTasks.remove(tasks.get(id)); + prioritizedTasks.add(task); tasks.put(id, task); } @@ -209,9 +221,11 @@ public void updateSubtask(Subtask subtask) { System.out.println("Не существует такой подзадачи!"); return; } - + prioritizedTasks.remove(subtasks.get(id)); + prioritizedTasks.add(subtask); subtasks.put(id, subtask); updateEpicStatus(subtask.getEpicId()); + updateEpicTimeInfo(subtask.getEpicId()); } @@ -228,6 +242,12 @@ public void updateEpic(Epic epic) { epics.put(id, epic); } + @Override + public TreeSet getPrioritizedTasks() { + return prioritizedTasks.stream().filter(task -> Objects.nonNull(task.getStartTime())) + .collect(Collectors.toCollection(() -> new TreeSet<>(comparator))); + } + private boolean checkContainsAllTasks(T task) { if (task == null) { return false; @@ -256,4 +276,30 @@ private void updateEpicStatus(int epicId) { } + private void updateEpicTimeInfo(int epicId) { + Epic epic = epics.get(epicId); + LocalDateTime epicStartTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId) + .getStartTime()).filter(Objects::nonNull).min(Comparator.naturalOrder()).orElse(null); + LocalDateTime epicEndTime = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId) + .getEndTime()).filter(Objects::nonNull).max(Comparator.naturalOrder()).orElse(null); + Duration epicDuration = epic.getSubtasks().stream().map(subtaskId -> subtasks.get(subtaskId).getDuration()) + .filter(Objects::nonNull).reduce(Duration.ZERO, Duration::plus); + epic.setStartTime(epicStartTime); + epic.setEndTime(epicEndTime); + epic.setDuration(epicDuration); + } + + private boolean isIntersectionTaskTime(Task task) { + if (!Objects.nonNull(task.getStartTime()) && !Objects.nonNull(task.getEndTime())) { + return false; + } else { + List intersectionsTasks = getPrioritizedTasks().stream().filter(prioritezedTask -> + Objects.nonNull(prioritezedTask.getEndTime())) + .filter(prioritizedTask -> (prioritizedTask.getStartTime().isBefore(task.getStartTime()) + && prioritizedTask.getEndTime().isAfter(task.getStartTime())) || + (prioritizedTask.getStartTime().equals(task.getStartTime()) && prioritizedTask.getEndTime().equals(task.getEndTime()))).toList(); + return !intersectionsTasks.isEmpty(); + } + } + } diff --git a/src/managers/TaskManager.java b/src/managers/TaskManager.java index e3389cb..b3144cb 100644 --- a/src/managers/TaskManager.java +++ b/src/managers/TaskManager.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.TreeSet; public interface TaskManager { ArrayList getTasks(); @@ -22,6 +23,8 @@ public interface TaskManager { List getHistory(); + TreeSet getPrioritizedTasks(); + void addTask(Task task); void addSubtask(Subtask subtask); diff --git a/src/tasks/Epic.java b/src/tasks/Epic.java index 4a2a247..e7edde3 100644 --- a/src/tasks/Epic.java +++ b/src/tasks/Epic.java @@ -2,6 +2,8 @@ import statuses.StatusTask; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.ArrayList; public class Epic extends Task { @@ -13,6 +15,21 @@ public Epic(String name, String description, StatusTask status, int id) { this.subtasks = new ArrayList<>(); } + public Epic(String name, String description, StatusTask status, int id, Duration duration, LocalDateTime startTime) { + super(name, description, status, id, duration, startTime); + this.subtasks = new ArrayList<>(); + } + + public Epic(String name, String description, StatusTask status, int id, Duration duration) { + super(name, description, status, id, duration); + this.subtasks = new ArrayList<>(); + } + + public Epic(String name, String description, StatusTask status, int id, LocalDateTime startTime) { + super(name, description, status, id, startTime); + this.subtasks = new ArrayList<>(); + } + public Epic(String name, String description, int id) { super(name, description, id); this.subtasks = new ArrayList<>(); @@ -50,12 +67,24 @@ public void setSubtasks(ArrayList subtasks) { public static Epic fromString(String value) { String[] taskInfo = value.split(","); - return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + if (taskInfo[6].equals("null") && taskInfo[7].equals("null")) { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + } else if (taskInfo[6].equals("null")) { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + LocalDateTime.parse(taskInfo[7])); + } else if (taskInfo[7].equals("null")) { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6])); + } else { + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + } } @Override public String toString() { - return String.format("%d,%s,%s,%s,%s,", id, type, name, status, description); + return String.format("%d,%s,%s,%s,%s,,%s,%s,%s", id, type, name, status, description, duration, startTime, + endTime); } private boolean checkNotContainsSubtask(Subtask subtask) { diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index 2644e9b..e37379e 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -2,10 +2,45 @@ import statuses.StatusTask; +import java.time.Duration; +import java.time.LocalDateTime; + public class Subtask extends Task { protected TaskType type = TaskType.SUBTASK; private int epicId; + public Subtask(String name, String description, StatusTask status, int epicId, int id, Duration duration, + LocalDateTime startTime) { + super(name, description, status, id, duration, startTime); + this.epicId = epicId; + } + + public Subtask(String name, String description, StatusTask status, int epicId, int id, Duration duration) { + super(name, description, status, id, duration); + this.epicId = epicId; + } + + public Subtask(String name, String description, StatusTask status, int epicId, int id, LocalDateTime startTime) { + super(name, description, status, id, startTime); + this.epicId = epicId; + } + + public Subtask(String name, String description, StatusTask status, int epicId, Duration duration, + LocalDateTime startTime) { + super(name, description, status, duration, startTime); + this.epicId = epicId; + } + + public Subtask(String name, String description, int epicId, Duration duration, LocalDateTime startTime) { + super(name, description, duration, startTime); + this.epicId = epicId; + } + + public Subtask(String name, String description, int epicId, int id, Duration duration, LocalDateTime startTime) { + super(name, description, id, duration, startTime); + this.epicId = epicId; + } + public Subtask(String name, String description, StatusTask status, int epicId, int id) { super(name, description, status, id); this.epicId = epicId; @@ -16,13 +51,13 @@ public Subtask(String name, String description, StatusTask status, int epicId) { this.epicId = epicId; } - public Subtask(String name, String description, int epicId) { - super(name, description); + public Subtask(String name, String description, int epicId, int id) { + super(name, description, id); this.epicId = epicId; } - public Subtask(String name, String description, int epicId, int id) { - super(name, description, id); + public Subtask(String name, String description, int epicId) { + super(name, description); this.epicId = epicId; } @@ -36,12 +71,24 @@ public void setEpicId(int epicId) { public static Subtask fromString(String value) { String[] taskInfo = value.split(","); - return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), - Integer.parseInt(taskInfo[0])); + if (taskInfo[6].equals("null") && taskInfo[7].equals("null")) { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0])); + } else if (taskInfo[6].equals("null")) { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0]), LocalDateTime.parse(taskInfo[7])); + } else if (taskInfo[7].equals("null")) { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0]), Duration.parse(taskInfo[6])); + } else { + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0]), Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + } } @Override public String toString() { - return String.format("%d,%s,%s,%s,%s,%d", id, type, name, status, description, epicId); + return String.format("%d,%s,%s,%s,%s,%d,%s,%s,%s", id, type, name, status, description, epicId, duration, + startTime, endTime); } } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 640a8cf..4cb2a03 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -2,6 +2,8 @@ import statuses.StatusTask; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.Objects; public class Task { @@ -10,6 +12,63 @@ public class Task { protected StatusTask status; protected int id; protected TaskType type = TaskType.TASK; + protected Duration duration; + protected LocalDateTime startTime; + protected LocalDateTime endTime; + + public Task(String name, String description, StatusTask status, int id, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = status; + this.id = id; + this.duration = Duration.ofMinutes(duration.toMinutes()); + this.startTime = startTime; + this.endTime = startTime.plus(duration); + } + + public Task(String name, String description, StatusTask status, int id, Duration duration) { + this.name = name; + this.description = description; + this.status = status; + this.id = id; + this.duration = Duration.ofMinutes(duration.toMinutes()); + } + + public Task(String name, String description, StatusTask status, int id, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = status; + this.id = id; + this.startTime = startTime; + } + + public Task(String name, String description, StatusTask status, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = status; + this.duration = Duration.ofMinutes(duration.toMinutes()); + this.startTime = startTime; + this.endTime = startTime.plus(duration); + } + + public Task(String name, String description, int id, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.id = id; + this.status = StatusTask.NEW; + this.duration = Duration.ofMinutes(duration.toMinutes()); + this.startTime = startTime; + this.endTime = startTime.plus(duration); + } + + public Task(String name, String description, Duration duration, LocalDateTime startTime) { + this.name = name; + this.description = description; + this.status = StatusTask.NEW; + this.duration = Duration.ofMinutes(duration.toMinutes()); + this.startTime = startTime; + this.endTime = startTime.plus(duration); + } public Task(String name, String description, StatusTask status, int id) { this.name = name; @@ -53,6 +112,18 @@ public int getId() { return id; } + public Duration getDuration() { + return duration; + } + + public LocalDateTime getStartTime() { + return startTime; + } + + public LocalDateTime getEndTime() { + return endTime; + } + public void setName(String name) { this.name = name; } @@ -69,15 +140,39 @@ public void setStatus(StatusTask status) { this.status = status; } + public void setDuration(Duration duration) { + this.duration = duration; + } + + public void setStartTime(LocalDateTime startTime) { + this.startTime = startTime; + } + + public void setEndTime(LocalDateTime endTime) { + this.endTime = endTime; + } public static Task fromString(String value) { String[] taskInfo = value.split(","); - return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + if (taskInfo[6].equals("null") && taskInfo[7].equals("null")) { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + } else if (taskInfo[6].equals("null")) { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + LocalDateTime.parse(taskInfo[7])); + } else if (taskInfo[7].equals("null")) { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6])); + } else { + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0]), + Duration.parse(taskInfo[6]), LocalDateTime.parse(taskInfo[7])); + } } @Override public String toString() { - return String.format("%d,%s,%s,%s,%s,", id, type, name, status, description); + // TODO: Поработать над форматом вывода duration, startTime, endTime + return String.format("%d,%s,%s,%s,%s,,%s,%s,%s", id, type, name, status, description, duration, startTime, + endTime); } @Override @@ -86,11 +181,13 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; Task task = (Task) o; if (id == task.id) return true; - return Objects.equals(name, task.name) && Objects.equals(description, task.description) && status == task.status; + return Objects.equals(name, task.name) && Objects.equals(description, task.description) && status == task.status + && Objects.equals(duration, task.duration) && Objects.equals(startTime, task.startTime) + && Objects.equals(endTime, task.endTime); } @Override public int hashCode() { - return Objects.hash(name, description, status, id); + return Objects.hash(name, description, status, id, duration, startTime, endTime); } } diff --git a/test/EpicTest.java b/test/EpicTest.java index 965f382..ec4ec26 100644 --- a/test/EpicTest.java +++ b/test/EpicTest.java @@ -5,19 +5,27 @@ import tasks.Epic; import tasks.Subtask; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class EpicTest { Epic epic; Subtask subtask1; Subtask subtask2; Subtask subtask3; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeEach void setUp() { epic = new Epic("TestEpic", "TestDescription", 1); - subtask1 = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 0, 2); - subtask2 = new Subtask("TestSubtask2", "TestDescription2", StatusTask.DONE, 0, 3); - subtask3 = new Subtask("TestSubtask3", "TestDescription3", StatusTask.IN_PROGRESS, 0, 4); + subtask1 = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 0, 2, duration1, startTime1); + subtask2 = new Subtask("TestSubtask2", "TestDescription2", StatusTask.DONE, 0, 3, duration1, startTime1); + subtask3 = new Subtask("TestSubtask3", "TestDescription3", StatusTask.IN_PROGRESS, 0, 4, duration1, startTime1); } @Test @@ -62,13 +70,13 @@ void clearSubtaskList() { @Test void epicToString() { - Assertions.assertEquals("1,EPIC,TestEpic,NEW,TestDescription,", epic.toString()); + Assertions.assertEquals("1,EPIC,TestEpic,NEW,TestDescription,,null,null,null", epic.toString()); } @Test void epicFromString() { - Epic epic1 = Epic.fromString("1,EPIC,TestEpic,NEW,TestDescription,"); - Epic epic2 = Epic.fromString("5,EPIC,TestEpic2,NEW,TestDescription,"); + Epic epic1 = Epic.fromString("1,EPIC,TestEpic,NEW,TestDescription,,null,null,null"); + Epic epic2 = Epic.fromString("5,EPIC,TestEpic2,NEW,TestDescription,,null,null,null"); Assertions.assertEquals(epic, epic1); Assertions.assertNotEquals(epic, epic2); } diff --git a/test/FileBackendTaskManagerTest.java b/test/FileBackendTaskManagerTest.java index 150f56d..be801a1 100644 --- a/test/FileBackendTaskManagerTest.java +++ b/test/FileBackendTaskManagerTest.java @@ -8,10 +8,14 @@ import tasks.Task; import java.io.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; public class FileBackendTaskManagerTest { - String header = "id,type,name,status,description,epic"; + String header = "id,type,name,status,description,epic,duration,start_time,end_time"; FileBackedTaskManager manager; File testTmpFile; Task task1; @@ -22,19 +26,32 @@ public class FileBackendTaskManagerTest { Subtask subtask1; Subtask subtask2; Subtask subtask3; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025, 2, 5), + LocalTime.of(10, 0)); + LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025, 2, 6), + LocalTime.of(10, 0)); + LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025, 2, 7), + LocalTime.of(10, 0)); + LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025, 2, 8), + LocalTime.of(10, 0)); + LocalDateTime startTime6 = LocalDateTime.of(LocalDate.of(2025, 2, 9), + LocalTime.of(10, 0)); @BeforeEach public void setUp() throws IOException { testTmpFile = File.createTempFile("manager", ".csv"); manager = new FileBackedTaskManager(testTmpFile); - task1 = new Task("TestName1", "TestDescription1"); - task2 = new Task("TestName4", "TestDescription4"); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2"); epic2 = new Epic("TestName5", "TestDescription5"); epic3 = new Epic("TestName6", "TestDescription6"); - subtask2 = new Subtask("TestName8", "TestDescription8", 4); - subtask3 = new Subtask("TestName9", "TestDescription9", 5); + subtask2 = new Subtask("TestName8", "TestDescription8", 4, duration1, startTime1); + subtask3 = new Subtask("TestName9", "TestDescription9", 5, duration1, startTime2); } @AfterEach @@ -61,7 +78,7 @@ public void loadManagerFromEmptyFile() { public void saveTasksFileFromManager() { manager.addTask(task1); manager.addEpic(epic1); - manager.addSubtask(new Subtask("TestName7", "TestDescription7", 2)); + manager.addSubtask(new Subtask("TestName7", "TestDescription7", 2, duration1, startTime3)); try (BufferedReader buffer = new BufferedReader(new FileReader(testTmpFile))) { ArrayList tasks = new ArrayList<>(buffer.lines().toList()); tasks.remove(header); @@ -79,10 +96,10 @@ public void saveTasksFileFromManager() { @Test public void loadTasksFromFileToManager() { - task1 = new Task("TestName1", "TestDescription1", 1); - task2 = new Task("TestName4", "TestDescription4", 2); + task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2", 3); - subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime3); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); writer.write(String.format("%s\n", task1.toString())); @@ -102,10 +119,10 @@ public void loadTasksFromFileToManager() { @Test public void loadTasksFromFileToManagerAddOtherTasks() { - task1 = new Task("TestName1", "TestDescription1", 1); - task2 = new Task("TestName4", "TestDescription4", 2); + task1 = new Task("TestName1", "TestDescription1", 1, duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", 2, duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2", 3); - subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4, duration1, startTime3); try (FileWriter writer = new FileWriter(testTmpFile)) { writer.write(String.format("%s\n", header)); writer.write(String.format("%s\n", task1.toString())); @@ -117,10 +134,10 @@ public void loadTasksFromFileToManagerAddOtherTasks() { } FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(testTmpFile); - Task task3 = new Task("TestName1", "TestDescription1"); - Task task4 = new Task("TestName4", "TestDescription4"); + Task task3 = new Task("TestName1", "TestDescription1", duration1, startTime4); + Task task4 = new Task("TestName4", "TestDescription4", duration1, startTime5); Epic epic4 = new Epic("TestName4", "TestDescription4"); - Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7); + Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7, duration1, startTime6); manager.addTask(task3); manager.addTask(task4); manager.addEpic(epic4); diff --git a/test/InMemoryHistoryManagerTest.java b/test/InMemoryHistoryManagerTest.java index 373780b..c2dd8e7 100644 --- a/test/InMemoryHistoryManagerTest.java +++ b/test/InMemoryHistoryManagerTest.java @@ -5,6 +5,11 @@ import org.junit.jupiter.api.Test; import tasks.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class InMemoryHistoryManagerTest { InMemoryHistoryManager manager; @@ -20,21 +25,24 @@ public class InMemoryHistoryManagerTest { static Subtask subtask10; static Subtask subtask11; static Subtask subtask12; + static Duration duration1 = Duration.ofMinutes(100); + static LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeAll public static void setup() { - task1 = new Task("Task1", "Description1", 1); - task2 = new Task("Task2", "Description2", 2); - task3 = new Task("Task3", "Description3", 3); + task1 = new Task("Task1", "Description1", 1, duration1, startTime1); + task2 = new Task("Task2", "Description2", 2, duration1, startTime1); + task3 = new Task("Task3", "Description3", 3, duration1, startTime1); epic4 = new Epic("Epic4", "Description4", 4); epic5 = new Epic("Epic5", "Description5", 5); epic6 = new Epic("Epic6", "Description6", 6); - subtask7 = new Subtask("Subtask7", "Description7", 4, 7); - subtask8 = new Subtask("Subtask8", "Description8", 5, 8); - subtask9 = new Subtask("Subtask9", "Description9", 6, 9); - subtask10 = new Subtask("Subtask10", "Description10", 4, 10); - subtask11 = new Subtask("Subtask11", "Description11", 5, 11); - subtask12 = new Subtask("Subtask12", "Description12", 6, 12); + subtask7 = new Subtask("Subtask7", "Description7", 4, 7, duration1, startTime1); + subtask8 = new Subtask("Subtask8", "Description8", 5, 8, duration1, startTime1); + subtask9 = new Subtask("Subtask9", "Description9", 6, 9, duration1, startTime1); + subtask10 = new Subtask("Subtask10", "Description10", 4, 10, duration1, startTime1); + subtask11 = new Subtask("Subtask11", "Description11", 5, 11, duration1, startTime1); + subtask12 = new Subtask("Subtask12", "Description12", 6, 12, duration1, startTime1); } @BeforeEach diff --git a/test/InMemoryTaskManagerTest.java b/test/InMemoryTaskManagerTest.java index cccd063..5202974 100644 --- a/test/InMemoryTaskManagerTest.java +++ b/test/InMemoryTaskManagerTest.java @@ -5,6 +5,10 @@ import statuses.StatusTask; import tasks.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; @@ -23,12 +27,32 @@ public class InMemoryTaskManagerTest { Subtask subtask4; Subtask subtask5; Subtask subtask6; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025, 2, 5), + LocalTime.of(10, 0)); + LocalDateTime startTime3 = LocalDateTime.of(LocalDate.of(2025, 2, 6), + LocalTime.of(10, 0)); + LocalDateTime startTime4 = LocalDateTime.of(LocalDate.of(2025, 2, 7), + LocalTime.of(10, 0)); + LocalDateTime startTime5 = LocalDateTime.of(LocalDate.of(2025, 2, 8), + LocalTime.of(10, 0)); + LocalDateTime startTime6 = LocalDateTime.of(LocalDate.of(2025, 2, 9), + LocalTime.of(10, 0)); + LocalDateTime startTime7 = LocalDateTime.of(LocalDate.of(2025, 2, 10), + LocalTime.of(10, 0)); + LocalDateTime startTime8 = LocalDateTime.of(LocalDate.of(2025, 2, 11), + LocalTime.of(10, 0)); + LocalDateTime startTime9 = LocalDateTime.of(LocalDate.of(2025, 2, 12), + LocalTime.of(10, 0)); + @BeforeEach public void setUp() { manager = new InMemoryTaskManager(); - task1 = new Task("TestName1", "TestDescription1"); - task2 = new Task("TestName4", "TestDescription4"); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName4", "TestDescription4", duration1, startTime2); epic1 = new Epic("TestName2", "TestDescription2"); epic2 = new Epic("TestName5", "TestDescription5"); epic3 = new Epic("TestName6", "TestDescription6"); @@ -38,7 +62,7 @@ public void setUp() { public void createIdForTask() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime3); manager.addSubtask(subtask1); Assertions.assertEquals(1, task1.getId()); Assertions.assertEquals(2, epic1.getId()); @@ -51,7 +75,7 @@ public void addTasks() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime3); manager.addSubtask(subtask1); Assertions.assertEquals(2, manager.getTasks().size()); Assertions.assertEquals(2, manager.getEpics().size()); @@ -59,11 +83,41 @@ public void addTasks() { Assertions.assertEquals(1, manager.getEpic(3).getSubtasks().size()); } + @Test + public void addTaskWithTimeIntersection() { + manager.addTask(task1); + task2 = new Task("TestName2", "TestDescription2", duration1, LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 5))); + manager.addTask(task2); + Assertions.assertEquals(1, manager.getTasks().size()); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime1); + Assertions.assertEquals(1, manager.getTasks().size()); + task4 = new Task("TestName4", "TestDescription4", duration1, startTime2); + manager.addTask(task4); + Assertions.assertEquals(2, manager.getTasks().size()); + } + + @Test + public void addSubtaskWithTimeIntersection() { + manager.addEpic(epic1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + manager.addSubtask(subtask1); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 5))); + manager.addSubtask(subtask2); + Assertions.assertEquals(1, manager.getSubtasks().size()); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + Assertions.assertEquals(1, manager.getSubtasks().size()); + subtask4 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime2); + manager.addSubtask(subtask4); + Assertions.assertEquals(2, manager.getSubtasks().size()); + } + @Test public void addSubtaskInEpic() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); manager.addSubtask(subtask2); Assertions.assertEquals(1, subtask1.getEpicId()); @@ -77,13 +131,39 @@ public void addSubtaskInEpic() { public void getTasksById() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); Assertions.assertEquals(task1, manager.getTask(1)); Assertions.assertEquals(epic1, manager.getEpic(2)); Assertions.assertEquals(subtask1, manager.getSubtask(3)); } + @Test + public void getPrioritizedTasksAndSubtasks() { + manager.addEpic(epic1); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addTask(task1); + manager.addTask(task3); + manager.addSubtask(subtask3); + ArrayList prioritizedTasks = new ArrayList<>(manager.getPrioritizedTasks()); + ArrayList expectedPrioritizedTasks = new ArrayList<>(); + expectedPrioritizedTasks.add(task1); + expectedPrioritizedTasks.add(task2); + expectedPrioritizedTasks.add(task3); + expectedPrioritizedTasks.add(subtask1); + expectedPrioritizedTasks.add(subtask2); + expectedPrioritizedTasks.add(subtask3); + Assertions.assertEquals(expectedPrioritizedTasks, prioritizedTasks); + } + @Test public void deleteTaskById() { manager.addTask(task1); @@ -99,8 +179,8 @@ public void deleteTaskById() { @Test public void deleteSubtaskById() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.deleteSubtask(2); @@ -117,8 +197,8 @@ public void deleteSubtaskById() { @Test public void deleteEpicByIdAndDeleteEpicSubtasks() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.deleteEpic(1); @@ -126,14 +206,54 @@ public void deleteEpicByIdAndDeleteEpicSubtasks() { Assertions.assertEquals(0, manager.getSubtasks().size()); } + @Test + public void deleteTasksAndSubtasksInPrioritized() { + manager.addEpic(epic1); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addTask(task1); + manager.addTask(task3); + manager.addSubtask(subtask3); + manager.deleteTask(5); + manager.deleteSubtask(4); + ArrayList expectedPrioritizedTasks = new ArrayList<>(); + expectedPrioritizedTasks.add(task2); + expectedPrioritizedTasks.add(task3); + expectedPrioritizedTasks.add(subtask2); + expectedPrioritizedTasks.add(subtask3); + ArrayList prioritizedTasks = new ArrayList<>(manager.getPrioritizedTasks()); + Assertions.assertEquals(expectedPrioritizedTasks, prioritizedTasks); + + } + + @Test + public void deleteSubtasksInPrioritizedWhenEpicDelete() { + manager.addEpic(epic1); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addSubtask(subtask3); + manager.deleteEpic(1); + Assertions.assertTrue(manager.getPrioritizedTasks().isEmpty()); + } + @Test public void clearTasks() { manager.addTask(task1); manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.clearTasks(); @@ -152,9 +272,9 @@ public void clearEpicsWithSubtasks() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId()); - subtask3 = new Subtask("TestName8", "TestDescription8", epic2.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic2.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName8", "TestDescription8", epic2.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -167,9 +287,9 @@ public void clearEpicsWithSubtasks() { public void clearSubtasksWithEpicUpdate() { manager.addEpic(epic1); manager.addEpic(epic2); - subtask1 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", StatusTask.IN_PROGRESS, epic1.getId()); - subtask3 = new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic2.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", StatusTask.IN_PROGRESS, epic1.getId(), duration1, startTime2); + subtask3 = new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic2.getId(), duration1, startTime3); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -182,14 +302,54 @@ public void clearSubtasksWithEpicUpdate() { Assertions.assertEquals(StatusTask.NEW, epic2.getStatus()); } + @Test + public void clearTasksAndSubtasksInPrioritized() { + manager.addEpic(epic1); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addTask(task1); + manager.addTask(task3); + manager.addSubtask(subtask3); + manager.clearTasks(); + manager.clearSubtasks(); + Assertions.assertTrue(manager.getPrioritizedTasks().isEmpty()); + } + + @Test + public void clearSubtasksInPrioritizedWhenClearEpics() { + manager.addEpic(epic1); + manager.addEpic(epic2); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime2); + subtask3 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime3); + subtask4 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask5 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime5); + subtask6 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addSubtask(subtask5); + manager.addSubtask(subtask4); + manager.addSubtask(subtask1); + manager.addSubtask(subtask3); + manager.addSubtask(subtask2); + manager.addSubtask(subtask6); + manager.clearEpics(); + Assertions.assertTrue(manager.getPrioritizedTasks().isEmpty()); + } + @Test public void updateTasks() { manager.addTask(task1); manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime2); manager.addSubtask(subtask1); - manager.updateTask(new Task("TestName1Updated", "TestDescription1Updated", StatusTask.IN_PROGRESS, 1)); + manager.updateTask(new Task("TestName1Updated", "TestDescription1Updated", StatusTask.IN_PROGRESS, 1, duration1, startTime1)); Assertions.assertEquals("TestName1Updated", manager.getTask(1).getName()); Assertions.assertEquals("TestDescription1Updated", manager.getTask(1).getDescription()); Assertions.assertEquals(StatusTask.IN_PROGRESS, manager.getTask(1).getStatus()); @@ -199,7 +359,7 @@ public void updateTasks() { Assertions.assertEquals("TestDescription2Updated", manager.getEpic(2).getDescription()); Assertions.assertEquals(StatusTask.NEW, manager.getEpic(2).getStatus()); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3", epic1.getId(), 3)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3", epic1.getId(), 3, duration1, startTime1)); Assertions.assertEquals("TestName3Updated", manager.getSubtask(3).getName()); Assertions.assertEquals("TestDescription3", manager.getSubtask(3).getDescription()); Assertions.assertEquals(StatusTask.NEW, manager.getSubtask(3).getStatus()); @@ -208,32 +368,60 @@ public void updateTasks() { @Test public void updateSubtaskAndEpicStatus() { manager.addEpic(epic1); - subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId()); - subtask3 = new Subtask("TestName8", "TestDescription8", epic1.getId()); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime1); + subtask2 = new Subtask("TestName7", "TestDescription7", epic1.getId(), duration1, startTime1); + subtask3 = new Subtask("TestName8", "TestDescription8", epic1.getId(), duration1, startTime1); manager.addSubtask(subtask1); manager.addSubtask(subtask2); manager.addSubtask(subtask3); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.IN_PROGRESS, epic1.getId(), 2)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.IN_PROGRESS, epic1.getId(), 2, duration1, startTime1)); Assertions.assertEquals(StatusTask.IN_PROGRESS, epic1.getStatus()); - manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.DONE, epic1.getId(), 3)); - manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic1.getId(), 4)); + manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.DONE, epic1.getId(), 3, duration1, startTime1)); + manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.DONE, epic1.getId(), 4, duration1, startTime1)); Assertions.assertEquals(StatusTask.IN_PROGRESS, epic1.getStatus()); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.DONE, epic1.getId(), 2)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.DONE, epic1.getId(), 2, duration1, startTime1)); Assertions.assertEquals(StatusTask.DONE, epic1.getStatus()); - manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.NEW, epic1.getId(), 2)); - manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.NEW, epic1.getId(), 3)); - manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.NEW, epic1.getId(), 4)); + manager.updateSubtask(new Subtask("TestName3Updated", "TestDescription3Updated", StatusTask.NEW, epic1.getId(), 2, duration1, startTime1)); + manager.updateSubtask(new Subtask("TestName7", "TestDescription7", StatusTask.NEW, epic1.getId(), 3, duration1, startTime1)); + manager.updateSubtask(new Subtask("TestName8", "TestDescription8", StatusTask.NEW, epic1.getId(), 4, duration1, startTime1)); Assertions.assertEquals(StatusTask.NEW, epic1.getStatus()); } + @Test + public void updateTaskAndSubtaskInPrioritizedList() { + manager.addEpic(epic1); + task1 = new Task("TestName1", "TestDescription1", duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", duration1, startTime2); + task3 = new Task("TestName3", "TestDescription3", duration1, startTime3); + subtask1 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask2 = new Subtask("TestName4", "TestDescription4", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName5", "TestDescription5", epic1.getId(), duration1, startTime6); + manager.addTask(task2); + manager.addSubtask(subtask2); + manager.addSubtask(subtask1); + manager.addTask(task1); + manager.addTask(task3); + manager.addSubtask(subtask3); + manager.updateTask(new Task("TestName1", "TestDescription1", 5, duration1, startTime7)); + manager.updateSubtask(new Subtask("TestName4", "TestDescription4", epic1.getId(), 3, duration1, startTime8)); + ArrayList prioritizedTasks = new ArrayList<>(manager.getPrioritizedTasks()); + ArrayList expectedPrioritizedTasks = new ArrayList<>(); + expectedPrioritizedTasks.add(task2); + expectedPrioritizedTasks.add(task3); + expectedPrioritizedTasks.add(subtask1); + expectedPrioritizedTasks.add(subtask3); + expectedPrioritizedTasks.add(task1); + expectedPrioritizedTasks.add(subtask2); + Assertions.assertEquals(expectedPrioritizedTasks, prioritizedTasks); + } + @Test public void getHistoryTasks() { - task3 = new Task("TestName9", "TestDescription9"); - task4 = new Task("TestName10", "TestDescription10"); + task3 = new Task("TestName9", "TestDescription9", duration1, startTime3); + task4 = new Task("TestName10", "TestDescription10", duration1, startTime4); epic3 = new Epic("TestName3", "TestDescription3"); manager.addTask(task1); manager.addTask(task2); @@ -243,11 +431,11 @@ public void getHistoryTasks() { manager.addEpic(epic2); manager.addEpic(epic3); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId()); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId()); - subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId()); - subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId()); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime5); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime6); + subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime7); + subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime8); + subtask6 = new Subtask("TestName6", "TestDescription6", epic3.getId(), duration1, startTime9); manager.addSubtask(subtask2); manager.addSubtask(subtask3); @@ -286,10 +474,10 @@ public void deleteTaskdeleteTaskInHistory() { manager.addTask(task2); manager.addEpic(epic1); manager.addEpic(epic2); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId()); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId()); - subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId()); - subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId()); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime3); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); + subtask4 = new Subtask("TestName4", "TestDescription4", epic2.getId(), duration1, startTime5); + subtask5 = new Subtask("TestName5", "TestDescription5", epic2.getId(), duration1, startTime6); manager.addSubtask(subtask2); manager.addSubtask(subtask3); manager.addSubtask(subtask4); @@ -320,8 +508,8 @@ public void clearTasksAndHistory() { manager.addTask(task1); manager.addTask(task2); manager.addEpic(epic1); - subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId()); - subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId()); + subtask2 = new Subtask("TestName2", "TestDescription2", epic1.getId(), duration1, startTime3); + subtask3 = new Subtask("TestName3", "TestDescription3", epic1.getId(), duration1, startTime4); manager.addSubtask(subtask2); manager.addSubtask(subtask3); manager.getTask(1); @@ -343,8 +531,8 @@ public void clearTasksAndHistory() { Assertions.assertTrue(manager.getHistory().isEmpty()); Assertions.assertEquals(expectedHistory, manager.getHistory()); manager.addEpic(epic3); - subtask3 = new Subtask("TestName4", "TestDescription4", epic3.getId()); - subtask4 = new Subtask("TestName5", "TestDescription5", epic3.getId()); + subtask3 = new Subtask("TestName4", "TestDescription4", epic3.getId(), duration1, startTime3); + subtask4 = new Subtask("TestName5", "TestDescription5", epic3.getId(), duration1, startTime4); manager.addSubtask(subtask3); manager.addSubtask(subtask4); manager.getEpic(6); diff --git a/test/ManagersTest.java b/test/ManagersTest.java index 9753402..5177f65 100644 --- a/test/ManagersTest.java +++ b/test/ManagersTest.java @@ -5,14 +5,24 @@ import tasks.Task; import util.Managers; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class ManagersTest { @Test public void getDefault() { + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); + LocalDateTime startTime2 = LocalDateTime.of(LocalDate.of(2025, 2, 5), + LocalTime.of(10, 0)); TaskManager manager = Managers.getDefault(); Assertions.assertNotNull(manager); - manager.addTask(new Task("Task1", "Descr1")); - manager.addTask(new Task("Task2", "Descr2")); + manager.addTask(new Task("Task1", "Descr1", duration1, startTime1)); + manager.addTask(new Task("Task2", "Descr2", duration1, startTime2)); manager.addEpic(new Epic("Epic1", "Descr1")); manager.addEpic(new Epic("Epic2", "Descr2")); Assertions.assertEquals("Task1", manager.getTasks().getFirst().getName()); diff --git a/test/SubtaskTest.java b/test/SubtaskTest.java index 910c591..547e993 100644 --- a/test/SubtaskTest.java +++ b/test/SubtaskTest.java @@ -5,25 +5,33 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class SubtaskTest { Subtask subtask; Epic epic; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeEach void setUp() { epic = new Epic("TestEpic", "TestDescription", 1); - subtask = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 1, 2); + subtask = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 1, 2, duration1, startTime1); } @Test void subtaskToString() { - Assertions.assertEquals("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1", subtask.toString()); + Assertions.assertEquals("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1,PT1H40M,2025-02-04T10:00,2025-02-04T11:40", subtask.toString()); } @Test void subtaskFromString() { - Subtask subtask1 = Subtask.fromString("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1"); - Subtask subtask2 = Subtask.fromString("5,SUBTASK,TestSubtask5,NEW,TestDescription,1"); + Subtask subtask1 = Subtask.fromString("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1,PT1H40M,2025-02-04T10:00"); + Subtask subtask2 = Subtask.fromString("5,SUBTASK,TestSubtask5,NEW,TestDescription,1,PT1H40M,2025-02-04T10:00"); Assertions.assertEquals(subtask, subtask1); Assertions.assertNotEquals(subtask, subtask2); } diff --git a/test/TaskTest.java b/test/TaskTest.java index 23402bc..6c81f60 100644 --- a/test/TaskTest.java +++ b/test/TaskTest.java @@ -4,6 +4,11 @@ import statuses.StatusTask; import tasks.*; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + public class TaskTest { Task task1; Task task2; @@ -14,16 +19,19 @@ public class TaskTest { Epic epic1; Epic epic2; Epic epic3; + Duration duration1 = Duration.ofMinutes(100); + LocalDateTime startTime1 = LocalDateTime.of(LocalDate.of(2025, 2, 4), + LocalTime.of(10, 0)); @BeforeEach void setUp() { - task1 = new Task("TestName1", "TestDescription1", StatusTask.NEW, 1); - task2 = new Task("TestName2", "TestDescription2", StatusTask.NEW, 2); - task3 = new Task("TestName3", "TestDescription3", StatusTask.NEW, 1); - subtask1 = new Subtask("TestName1", "TestDescription1", StatusTask.NEW, 0, 3); - subtask2 = new Subtask("TestName2", "TestDescription2", StatusTask.NEW, 0, 4); - subtask3 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, 0, 3); + task1 = new Task("TestName1", "TestDescription1", StatusTask.NEW, 1, duration1, startTime1); + task2 = new Task("TestName2", "TestDescription2", StatusTask.NEW, 2, duration1, startTime1); + task3 = new Task("TestName3", "TestDescription3", StatusTask.NEW, 1, duration1, startTime1); + subtask1 = new Subtask("TestName1", "TestDescription1", StatusTask.NEW, 0, 3, duration1, startTime1); + subtask2 = new Subtask("TestName2", "TestDescription2", StatusTask.NEW, 0, 4, duration1, startTime1); + subtask3 = new Subtask("TestName3", "TestDescription3", StatusTask.NEW, 0, 3, duration1, startTime1); epic1 = new Epic("TestName1", "TestDescription1", 5); epic2 = new Epic("TestName2", "TestDescription2", 6); epic3 = new Epic("TestName3", "TestDescription3", 5); @@ -45,12 +53,12 @@ void shouldNotEqualsIsDifferentIds() { @Test void taskToString() { - Assertions.assertEquals("1,TASK,TestName1,NEW,TestDescription1,", task1.toString()); + Assertions.assertEquals("1,TASK,TestName1,NEW,TestDescription1,,PT1H40M,2025-02-04T10:00,2025-02-04T11:40", task1.toString()); } @Test void taskFromString() { - Task task = Task.fromString("1,TASK,TestName1,NEW,TestDescription1,"); + Task task = Task.fromString("1,TASK,TestName1,NEW,TestDescription1,,PT1H40M,2025-02-04T10:00"); Assertions.assertEquals(task1, task); Assertions.assertNotEquals(task2, task); }