From b78c3abf1b5d3432fc8a74409cf4e6b441191daf Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Fri, 1 Nov 2024 06:25:34 +0300 Subject: [PATCH 01/10] =?UTF-8?q?=D0=9A=D0=BE=D1=81=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/Main.java | 60 +++++++++++------------- src/main/classes/Status.java | 4 +- src/main/classes/SubTask.java | 2 +- src/main/classes/Task.java | 3 +- src/main/service/HistoryManagerImpl.java | 2 +- 5 files changed, 31 insertions(+), 40 deletions(-) diff --git a/src/main/Main.java b/src/main/Main.java index a1ffa39..27f6084 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -17,27 +17,20 @@ public static void main(String[] args) { // 1. Формируем тестовые данные System.out.println(); System.out.println(" = 1 == Формируем тестовые данные ==="); - exampleTaskManagerService.addTask( - new Task(exampleTaskManagerService.getGlobalId(), "Работа", "Просто задача", - Status.NEW)); - exampleTaskManagerService.addEpic( - new Epic(exampleTaskManagerService.getGlobalId(), "Этапы", "Поэтапная работа", - Status.NEW, new ArrayList<>())); - exampleTaskManagerService.addSubTask( - new SubTask(exampleTaskManagerService.getGlobalId(), "Этап 1", "Подготовка к работе", - Status.NEW, 2)); - exampleTaskManagerService.addTask( - new Task(exampleTaskManagerService.getGlobalId(), "Отдых", "Поехать в отпуск", - Status.NEW)); - exampleTaskManagerService.addEpic( - new Epic(exampleTaskManagerService.getGlobalId(), "Обед", "Нужно утолить голод", - Status.NEW, new ArrayList<>())); - exampleTaskManagerService.addSubTask( - new SubTask(exampleTaskManagerService.getGlobalId(), "Закупка", "Надо в магазин", - Status.NEW, 5)); - exampleTaskManagerService.addSubTask( - new SubTask(exampleTaskManagerService.getGlobalId(), "Приготовление", "Немного постоять у плиты", - Status.NEW, 5)); + exampleTaskManagerService.addTask(new Task(exampleTaskManagerService.getGlobalId(), + "Работа", "Просто задача", Status.NEW)); + exampleTaskManagerService.addEpic(new Epic(exampleTaskManagerService.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>())); + exampleTaskManagerService.addSubTask(new SubTask(exampleTaskManagerService.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2)); + exampleTaskManagerService.addTask(new Task(exampleTaskManagerService.getGlobalId(), + "Отдых", "Поехать в отпуск", Status.NEW)); + exampleTaskManagerService.addEpic(new Epic(exampleTaskManagerService.getGlobalId(), + "Обед", "Нужно утолить голод", Status.NEW, new ArrayList<>())); + exampleTaskManagerService.addSubTask(new SubTask(exampleTaskManagerService.getGlobalId(), + "Закупка", "Надо в магазин", Status.NEW, 5)); + exampleTaskManagerService.addSubTask(new SubTask(exampleTaskManagerService.getGlobalId(), + "Приготовление", "Немного постоять у плиты", Status.NEW, 5)); System.out.println("============================"); System.out.println(); @@ -77,28 +70,29 @@ public static void main(String[] args) { System.out.println(" = 4 == Обновляем задачи ==="); // обновляем самостоятельную задачу "Работа System.out.println("было - " + exampleTaskManagerService.getTask(1)); - exampleTaskManagerService.updateTask(new Task(1, "Работа", "Работу работаем", Status.IN_PROGRESS)); + exampleTaskManagerService.updateTask(new Task(1, "Работа", + "Работу работаем", Status.IN_PROGRESS)); System.out.println("стало - " + exampleTaskManagerService.getTask(1)); System.out.println(); // обновляем эпик "Обед" для проверки изменения описания System.out.println("было - " + exampleTaskManagerService.getEpic(5)); - exampleTaskManagerService.updateEpic( - new Epic(5, "Обед", "Время покушать", Status.IN_PROGRESS, - new ArrayList<>() {{ - add(6); - add(7); - } - })); + exampleTaskManagerService.updateEpic(new Epic(5, "Обед", + "Время покушать", Status.IN_PROGRESS, new ArrayList<>() { + { + add(6); + add(7); + } + })); System.out.println("стало/было - " + exampleTaskManagerService.getEpic(5)); // обновляем эпику "Обед" его подзадачу для проверки изменения статуса эпика - exampleTaskManagerService.updateSubTask( - new SubTask(6, "Закупка", "Пошли в магазин", Status.IN_PROGRESS, 5)); + exampleTaskManagerService.updateSubTask(new SubTask(6, "Закупка", + "Пошли в магазин", Status.IN_PROGRESS, 5)); System.out.println("стало - " + exampleTaskManagerService.getEpic(5)); System.out.println(); // обновляем эпику "Этапы" его подзадачу для проверки изменения статуса эпика System.out.println("было - " + exampleTaskManagerService.getEpic(2)); - exampleTaskManagerService.updateSubTask( - new SubTask(3, "Этап 1", "Подготовка к работе", Status.DONE, 2)); + exampleTaskManagerService.updateSubTask(new SubTask(3, "Этап 1", + "Подготовка к работе", Status.DONE, 2)); System.out.println("стало - " + exampleTaskManagerService.getEpic(2)); System.out.println("============================"); System.out.println(); diff --git a/src/main/classes/Status.java b/src/main/classes/Status.java index ba468ff..e149cab 100644 --- a/src/main/classes/Status.java +++ b/src/main/classes/Status.java @@ -1,7 +1,5 @@ package main.classes;// Задаём параметры состояний задач public enum Status { - NEW, - IN_PROGRESS, - DONE + NEW, IN_PROGRESS, DONE } diff --git a/src/main/classes/SubTask.java b/src/main/classes/SubTask.java index 4ad1cb7..de00402 100644 --- a/src/main/classes/SubTask.java +++ b/src/main/classes/SubTask.java @@ -34,4 +34,4 @@ public int hashCode() { public String toString() { return "Sub" + super.toString().substring(0, super.toString().length() - 1) + ", idEpic=" + idEpic + "}"; } -} \ No newline at end of file +} diff --git a/src/main/classes/Task.java b/src/main/classes/Task.java index ca58187..83f3c21 100644 --- a/src/main/classes/Task.java +++ b/src/main/classes/Task.java @@ -56,8 +56,7 @@ public int hashCode() { @Override public String toString() { - return "Task{" + "id=" + id + ", name='" + name + '\'' + - ", description='" + description + '\'' + ", status=" + status + '}'; + return "Task{" + "id=" + id + ", name='" + name + '\'' + ", description='" + description + '\'' + ", status=" + status + '}'; } } diff --git a/src/main/service/HistoryManagerImpl.java b/src/main/service/HistoryManagerImpl.java index 4d93dba..f796cc1 100644 --- a/src/main/service/HistoryManagerImpl.java +++ b/src/main/service/HistoryManagerImpl.java @@ -85,4 +85,4 @@ public List getHistory() { return result; } -} \ No newline at end of file +} From 6846e4415c069393300100ef96f9f17180cb71a5 Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 06:47:32 +0300 Subject: [PATCH 02/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=9F=D0=B5=D1=80=D0=B2=D0=B8=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BE=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/main/Main.java | 161 ++++++---- src/main/classes/TypeTasks.java | 7 + src/main/service/FileBackedTaskManager.java | 211 +++++++++++++ ...anagerService.java => HistoryManager.java} | 2 +- src/main/service/HistoryManagerImpl.java | 2 +- ...agerImpl.java => InMemoryTaskManager.java} | 18 +- src/main/service/ManagerSaveException.java | 6 + src/main/service/Managers.java | 10 +- ...skManagerService.java => TaskManager.java} | 4 +- src/test/TestInFile.java | 277 ++++++++++++++++++ src/test/{TestCase.java => TestInMemory.java} | 6 +- test/TestInFile.java | 277 ++++++++++++++++++ test/{TestCase.java => TestInMemory.java} | 0 14 files changed, 903 insertions(+), 80 deletions(-) create mode 100644 src/main/classes/TypeTasks.java create mode 100644 src/main/service/FileBackedTaskManager.java rename src/main/service/{HistoryManagerService.java => HistoryManager.java} (79%) rename src/main/service/{TaskManagerImpl.java => InMemoryTaskManager.java} (94%) create mode 100644 src/main/service/ManagerSaveException.java rename src/main/service/{TaskManagerService.java => TaskManager.java} (95%) create mode 100644 src/test/TestInFile.java rename src/test/{TestCase.java => TestInMemory.java} (98%) create mode 100644 test/TestInFile.java rename test/{TestCase.java => TestInMemory.java} (100%) diff --git a/README.md b/README.md index e1920db..fd827ca 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ _java-kanban_ # Трекер задач -### Согласно задания спринта № 6. +### Согласно задания спринта № 7. ## выполнено Филипповских Сергеем _**Когорта-53**_ diff --git a/src/main/Main.java b/src/main/Main.java index 27f6084..2dadb37 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -4,96 +4,128 @@ import main.classes.Status; import main.classes.SubTask; import main.classes.Task; +import main.service.ManagerSaveException; import main.service.Managers; -import main.service.TaskManagerService; +import main.service.TaskManager; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; import java.util.ArrayList; public class Main { public static void main(String[] args) { - TaskManagerService exampleTaskManagerService = Managers.getDefault(); + + // Проверяем работу менеджера задач + Path testFile; + try { + testFile = File.createTempFile("test", ".csv").toPath(); + } catch (IOException e) { + throw new ManagerSaveException("Не удалось создать временный файл"); + } + TaskManager exampleTM1 = Managers.getFile(testFile); // 1. Формируем тестовые данные System.out.println(); System.out.println(" = 1 == Формируем тестовые данные ==="); - exampleTaskManagerService.addTask(new Task(exampleTaskManagerService.getGlobalId(), + exampleTM1.addTask(new Task(exampleTM1.getGlobalId(), "Работа", "Просто задача", Status.NEW)); - exampleTaskManagerService.addEpic(new Epic(exampleTaskManagerService.getGlobalId(), + exampleTM1.addEpic(new Epic(exampleTM1.getGlobalId(), "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>())); - exampleTaskManagerService.addSubTask(new SubTask(exampleTaskManagerService.getGlobalId(), + exampleTM1.addSubTask(new SubTask(exampleTM1.getGlobalId(), "Этап 1", "Подготовка к работе", Status.NEW, 2)); - exampleTaskManagerService.addTask(new Task(exampleTaskManagerService.getGlobalId(), + exampleTM1.addTask(new Task(exampleTM1.getGlobalId(), "Отдых", "Поехать в отпуск", Status.NEW)); - exampleTaskManagerService.addEpic(new Epic(exampleTaskManagerService.getGlobalId(), + exampleTM1.addEpic(new Epic(exampleTM1.getGlobalId(), "Обед", "Нужно утолить голод", Status.NEW, new ArrayList<>())); - exampleTaskManagerService.addSubTask(new SubTask(exampleTaskManagerService.getGlobalId(), + exampleTM1.addSubTask(new SubTask(exampleTM1.getGlobalId(), "Закупка", "Надо в магазин", Status.NEW, 5)); - exampleTaskManagerService.addSubTask(new SubTask(exampleTaskManagerService.getGlobalId(), + exampleTM1.addSubTask(new SubTask(exampleTM1.getGlobalId(), "Приготовление", "Немного постоять у плиты", Status.NEW, 5)); System.out.println("============================"); System.out.println(); // 2. Выводим списки System.out.println(" = 2 == Выводим списки ==="); - System.out.println(exampleTaskManagerService.getAllTasks()); // выводит все самостоятельные задачи - System.out.println(exampleTaskManagerService.getAllEpics()); // выводит все эпики - System.out.println(exampleTaskManagerService.getAllSubTasks()); // выводит все подзадачи + System.out.println(exampleTM1.getAllTasks()); // выводит все самостоятельные задачи + System.out.println(exampleTM1.getAllEpics()); // выводит все эпики + System.out.println(exampleTM1.getAllSubTasks()); // выводит все подзадачи System.out.println("============================"); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM1.getHistory()); + System.out.println("============================"); + System.out.println(); + + // считываем файл в новый экземпляр менеджера задач и проводим проверки с ним + TaskManager exampleTM2 = Managers.getFile(testFile); + + System.out.println("============================"); + System.out.println("Новый менеджер задач"); + System.out.println("============================"); + System.out.println(); + + // 2. Выводим списки + System.out.println(" = 2 == Выводим списки ==="); + System.out.println(exampleTM2.getAllTasks()); // выводит все самостоятельные задачи + System.out.println(exampleTM2.getAllEpics()); // выводит все эпики + System.out.println(exampleTM2.getAllSubTasks()); // выводит все подзадачи + System.out.println("============================"); + System.out.println(); + System.out.println("Выводим историю"); + System.out.println(exampleTM2.getHistory()); System.out.println("============================"); System.out.println(); // 3. Получаем объект по его id System.out.println(" = 3 == Получаем объект по его id ==="); - System.out.println(exampleTaskManagerService.getTask(4)); // выводит задачу по id + System.out.println(exampleTM2.getTask(4)); // выводит задачу по id System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println(); - System.out.println(exampleTaskManagerService.getTask(4)); // выводит задачу по id - System.out.println(exampleTaskManagerService.getEpic(5)); // выводит эпик по id + System.out.println(exampleTM2.getTask(4)); // выводит задачу по id + System.out.println(exampleTM2.getEpic(5)); // выводит эпик по id System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println(); - System.out.println(exampleTaskManagerService.getEpic(5)); // выводит эпик по id - System.out.println(exampleTaskManagerService.getSubTask(3)); // выводит подзадачу по id - System.out.println(exampleTaskManagerService.getTask(4)); // выводит задачу по id + System.out.println(exampleTM2.getEpic(5)); // выводит эпик по id + System.out.println(exampleTM2.getSubTask(3)); // выводит подзадачу по id + System.out.println(exampleTM2.getTask(4)); // выводит задачу по id System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println(); System.out.println(" = 4 == Обновляем задачи ==="); // обновляем самостоятельную задачу "Работа - System.out.println("было - " + exampleTaskManagerService.getTask(1)); - exampleTaskManagerService.updateTask(new Task(1, "Работа", + System.out.println("было - " + exampleTM2.getTask(1)); + exampleTM2.updateTask(new Task(1, "Работа", "Работу работаем", Status.IN_PROGRESS)); - System.out.println("стало - " + exampleTaskManagerService.getTask(1)); + System.out.println("стало - " + exampleTM2.getTask(1)); System.out.println(); // обновляем эпик "Обед" для проверки изменения описания - System.out.println("было - " + exampleTaskManagerService.getEpic(5)); - exampleTaskManagerService.updateEpic(new Epic(5, "Обед", + System.out.println("было - " + exampleTM2.getEpic(5)); + exampleTM2.updateEpic(new Epic(5, "Обед", "Время покушать", Status.IN_PROGRESS, new ArrayList<>() { { add(6); add(7); } })); - System.out.println("стало/было - " + exampleTaskManagerService.getEpic(5)); + System.out.println("стало/было - " + exampleTM2.getEpic(5)); // обновляем эпику "Обед" его подзадачу для проверки изменения статуса эпика - exampleTaskManagerService.updateSubTask(new SubTask(6, "Закупка", + exampleTM2.updateSubTask(new SubTask(6, "Закупка", "Пошли в магазин", Status.IN_PROGRESS, 5)); - System.out.println("стало - " + exampleTaskManagerService.getEpic(5)); + System.out.println("стало - " + exampleTM2.getEpic(5)); System.out.println(); // обновляем эпику "Этапы" его подзадачу для проверки изменения статуса эпика - System.out.println("было - " + exampleTaskManagerService.getEpic(2)); - exampleTaskManagerService.updateSubTask(new SubTask(3, "Этап 1", + System.out.println("было - " + exampleTM2.getEpic(2)); + exampleTM2.updateSubTask(new SubTask(3, "Этап 1", "Подготовка к работе", Status.DONE, 2)); - System.out.println("стало - " + exampleTaskManagerService.getEpic(2)); + System.out.println("стало - " + exampleTM2.getEpic(2)); System.out.println("============================"); System.out.println(); @@ -101,67 +133,66 @@ public static void main(String[] args) { // мне непонятно по ТЗ в каком виде должен быть этот список - есть два варианта System.out.println(" = 5 == Выводим список подзадач по id эпика ==="); System.out.println("перечисление id подзадач:"); - System.out.println(exampleTaskManagerService.getEpic(5).getIdSubTasks()); + System.out.println(exampleTM2.getEpic(5).getIdSubTasks()); System.out.println("перечисление самих подзадач:"); - System.out.println(exampleTaskManagerService.getEpicSubTasks(5)); + System.out.println(exampleTM2.getEpicSubTasks(5)); System.out.println("============================"); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println("============================"); System.out.println(); // 6. Тестируем удаление. System.out.println(" = 6 == Тестируем удаление по id ==="); - System.out.println("было - " + exampleTaskManagerService.getAllTasks()); - exampleTaskManagerService.deleteTask(1); // удаляем самостоятельную задачу - System.out.println("стало - " + exampleTaskManagerService.getAllTasks()); + System.out.println("было - " + exampleTM2.getAllTasks()); + exampleTM2.deleteTask(1); // удаляем самостоятельную задачу + System.out.println("стало - " + exampleTM2.getAllTasks()); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println(); - System.out.println("было - " + exampleTaskManagerService.getEpicSubTasks(5)); - System.out.println("было - " + exampleTaskManagerService.getEpic(5)); - exampleTaskManagerService.deleteSubTask(6); // Удаляем подзадачу эпика - System.out.println("стало - " + exampleTaskManagerService.getEpicSubTasks(5)); - System.out.println("стало - " + exampleTaskManagerService.getEpic(5)); + System.out.println("было - " + exampleTM2.getEpicSubTasks(5)); + System.out.println("было - " + exampleTM2.getEpic(5)); + exampleTM2.deleteSubTask(6); // Удаляем подзадачу эпика + System.out.println("стало - " + exampleTM2.getEpicSubTasks(5)); + System.out.println("стало - " + exampleTM2.getEpic(5)); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println(); - System.out.println("было - " + exampleTaskManagerService.getAllEpics()); - exampleTaskManagerService.deleteEpic(2); // Удаляем эпик со всеми подзадачами - System.out.println("стало - " + exampleTaskManagerService.getAllEpics()); + System.out.println("было - " + exampleTM2.getAllEpics()); + exampleTM2.deleteEpic(2); // Удаляем эпик со всеми подзадачами + System.out.println("стало - " + exampleTM2.getAllEpics()); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println("============================"); - // 7. Удаляем всё System.out.println(" = 7 == Удаляем всё ==="); - System.out.println("было - " + exampleTaskManagerService.getAllTasks()); // выводит все самостоятельные задачи - exampleTaskManagerService.deleteAllTasks(); - System.out.println("стало - " + exampleTaskManagerService.getAllTasks()); + System.out.println("было - " + exampleTM2.getAllTasks()); // выводит все самостоятельные задачи + exampleTM2.deleteAllTasks(); + System.out.println("стало - " + exampleTM2.getAllTasks()); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println(); - System.out.println("было - " + exampleTaskManagerService.getAllEpics()); // выводит все эпики - System.out.println("было - " + exampleTaskManagerService.getAllSubTasks()); // выводит все подзадачи - exampleTaskManagerService.deleteAllSubTasks(); - System.out.println("стало - " + exampleTaskManagerService.getAllEpics()); // выводит все эпики - System.out.println("стало - " + exampleTaskManagerService.getAllSubTasks()); + System.out.println("было - " + exampleTM2.getAllEpics()); // выводит все эпики + System.out.println("было - " + exampleTM2.getAllSubTasks()); // выводит все подзадачи + exampleTM2.deleteAllSubTasks(); + System.out.println("стало - " + exampleTM2.getAllEpics()); // выводит все эпики + System.out.println("стало - " + exampleTM2.getAllSubTasks()); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println(); - System.out.println("было - " + exampleTaskManagerService.getAllEpics()); // выводит все эпики - exampleTaskManagerService.deleteAllEpics(); - System.out.println("стало - " + exampleTaskManagerService.getAllEpics()); + System.out.println("было - " + exampleTM2.getAllEpics()); // выводит все эпики + exampleTM2.deleteAllEpics(); + System.out.println("стало - " + exampleTM2.getAllEpics()); System.out.println(); System.out.println("Выводим историю"); - System.out.println(exampleTaskManagerService.getHistory()); + System.out.println(exampleTM2.getHistory()); System.out.println("============================"); System.out.println(); diff --git a/src/main/classes/TypeTasks.java b/src/main/classes/TypeTasks.java new file mode 100644 index 0000000..2fff839 --- /dev/null +++ b/src/main/classes/TypeTasks.java @@ -0,0 +1,7 @@ +package main.classes; + +public enum TypeTasks { + TASK, + EPIC, + SUBTASK +} diff --git a/src/main/service/FileBackedTaskManager.java b/src/main/service/FileBackedTaskManager.java new file mode 100644 index 0000000..226041d --- /dev/null +++ b/src/main/service/FileBackedTaskManager.java @@ -0,0 +1,211 @@ +package main.service; + +import main.classes.*; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; + + +public class FileBackedTaskManager extends InMemoryTaskManager { + + public Path path; + + public FileBackedTaskManager(Path path) { + super(); + this.path = path; + this.loadFromFile(); + } + + public Path getPath() { + return path; + } + + public void loadFromFile() { + if(Files.exists(this.path)) { + try (BufferedReader br = Files.newBufferedReader(this.path, StandardCharsets.UTF_8)) { + // br.readLine(); + while (br.ready()) { + String line = br.readLine(); + Task loadTask = fromString(line); + + if (loadTask.getId() > globalId) { // если id больше чем globalId - присваиваем счётчику globalId значение id + globalId = loadTask.getId(); + } + + switch (loadTask.getClass().getSimpleName()) { + case "Task" -> task.put(loadTask.getId(), loadTask); + case "Epic" -> epic.put(loadTask.getId(), (Epic) loadTask); + case "SubTask" -> { + subTask.put(loadTask.getId(), (SubTask) loadTask); + epic.get(((SubTask) loadTask).getIdEpic()).addSubTask(loadTask.getId()); + } + } + globalId++; // увеличиваем счётчик globalId + } + } catch (IOException e) { + throw new ManagerSaveException("Не удалось восстановить данные из файла или указанный файл не найден"); + } + } + } + + public Task fromString(String value) { // метод обработки считываемой из файла строки + String[] str = value.split(","); + int id = Integer.parseInt(str[0]); + TypeTasks type = TypeTasks.valueOf(str[1]); + String name = str[2]; + Status status = Status.valueOf(str[3]); + String description = str[4]; + int idEpic = Integer.parseInt(str[5]); + switch (type) { + case TASK -> { + return new Task(id, name, description, status); + } + case EPIC -> { + return new Epic(id, name, description, status, new ArrayList<>()); + } + case SUBTASK -> { + return new SubTask(id, name, description, status, idEpic); + } + default -> { + return null; + } + } + } + + public void save() { + try (BufferedWriter bw = Files.newBufferedWriter(this.path, StandardCharsets.UTF_8)) { + // Записываем в файл Task + for (int key : task.keySet()) { + bw.write(toString(task.get(key))); + bw.newLine(); + } + // Записываем в файл Epic + for (int key : epic.keySet()) { + bw.write(toString(epic.get(key))); + bw.newLine(); + } + // Записываем в файл SubTask + for (int key : subTask.keySet()) { + bw.write(toString(subTask.get(key))); + bw.newLine(); + } + bw.flush(); + } catch (IOException e) { + throw new ManagerSaveException("Не удалось записать данные в файл"); + } + } + + public String toString(Task task) { // метод обработки считываемой из файла строки + String type =""; + int idEpic = 0; + switch (task.getClass().getSimpleName()) { + case "Task" -> type = "TASK"; + case "Epic" -> type = "EPIC"; + case "SubTask" -> { + type = "SUBTASK"; + idEpic = ((SubTask) task).getIdEpic(); + } + } + return (String) ( task.getId() + "," + type + "," + task.getName()+ "," + task.getStatus()+ "," + task.getDescription()+ "," + idEpic); + } + + // переопределение методов для сохранения данных в файле + + @Override + public boolean updateSubTask(SubTask subTaskNew) { + if (super.updateSubTask(subTaskNew)) { + save(); + return true; + } + return false; + } + + @Override + public boolean updateEpic(Epic epicNew) { + if (super.updateEpic(epicNew)) { + save(); + return true; + } + return false; + } + + @Override + public boolean updateTask(Task taskNew) { + if (super.updateTask(taskNew)) { + save(); + return true; + } + return false; + } + + @Override + public boolean deleteSubTask(int id) { + if (super.deleteSubTask(id)) { + save(); + return true; + } + return false; + } + + @Override + public boolean deleteEpic(int id) { + if (super.deleteEpic(id)) { + save(); + return true; + } + return false; + } + + @Override + public boolean deleteTask(int id) { + if (super.deleteTask(id)) { + save(); + return true; + } + return false; + } + + @Override + public void deleteAllEpics() { + super.deleteAllEpics(); + save(); + } + + @Override + public void deleteAllSubTasks() { + super.deleteAllSubTasks(); + save(); + } + + @Override + public void deleteAllTasks() { + super.deleteAllTasks(); + save(); + } + + @Override + public boolean addSubTask(SubTask subTaskNew) { + if (super.addSubTask(subTaskNew)) { + save(); + return true; + } + return false; + } + + @Override + public void addEpic(Epic epicNew) { + super.addEpic(epicNew); + save(); + } + + @Override + public void addTask(Task taskNew) { + super.addTask(taskNew); + save(); + } +} diff --git a/src/main/service/HistoryManagerService.java b/src/main/service/HistoryManager.java similarity index 79% rename from src/main/service/HistoryManagerService.java rename to src/main/service/HistoryManager.java index 8cddd77..7a271bf 100644 --- a/src/main/service/HistoryManagerService.java +++ b/src/main/service/HistoryManager.java @@ -4,7 +4,7 @@ import java.util.List; -public interface HistoryManagerService { +public interface HistoryManager { void add(Task task); diff --git a/src/main/service/HistoryManagerImpl.java b/src/main/service/HistoryManagerImpl.java index f796cc1..165dca0 100644 --- a/src/main/service/HistoryManagerImpl.java +++ b/src/main/service/HistoryManagerImpl.java @@ -4,7 +4,7 @@ import java.util.*; -public class HistoryManagerImpl implements HistoryManagerService { +public class HistoryManagerImpl implements HistoryManager { private final Map> history = new HashMap<>(); private Node first; private Node last; diff --git a/src/main/service/TaskManagerImpl.java b/src/main/service/InMemoryTaskManager.java similarity index 94% rename from src/main/service/TaskManagerImpl.java rename to src/main/service/InMemoryTaskManager.java index 0dd3a97..c4c55ec 100644 --- a/src/main/service/TaskManagerImpl.java +++ b/src/main/service/InMemoryTaskManager.java @@ -5,16 +5,17 @@ import main.classes.SubTask; import main.classes.Task; +import java.nio.file.Path; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -public class TaskManagerImpl implements TaskManagerService { - private int globalId = 1; // Глобальный счётчик всех задач - private final HashMap task = new HashMap<>(); - private final HashMap epic = new HashMap<>(); - private final HashMap subTask = new HashMap<>(); - private final HistoryManagerService history = Managers.getDefaultHistory(); +public class InMemoryTaskManager implements TaskManager { + protected int globalId = 1; // Глобальный счётчик всех задач + protected final HashMap task = new HashMap<>(); + protected final HashMap epic = new HashMap<>(); + protected final HashMap subTask = new HashMap<>(); + protected final HistoryManager history = Managers.getDefaultHistory(); // добавляем задачу @Override @@ -253,4 +254,9 @@ private void checkStatusEpic(int id) { public List getHistory() { return history.getHistory(); } + + @Override + public Path getPath() { + return null; + } } diff --git a/src/main/service/ManagerSaveException.java b/src/main/service/ManagerSaveException.java new file mode 100644 index 0000000..1449f40 --- /dev/null +++ b/src/main/service/ManagerSaveException.java @@ -0,0 +1,6 @@ +package main.service; + +public class ManagerSaveException extends RuntimeException { + public ManagerSaveException(String s) { + } +} diff --git a/src/main/service/Managers.java b/src/main/service/Managers.java index a0bdccc..f8cad19 100644 --- a/src/main/service/Managers.java +++ b/src/main/service/Managers.java @@ -1,9 +1,15 @@ package main.service; +import java.nio.file.Path; + public class Managers { - public static TaskManagerImpl getDefault() { - return new TaskManagerImpl(); + public static InMemoryTaskManager getDefault() { + return new InMemoryTaskManager(); + } + + public static FileBackedTaskManager getFile(Path path) { + return new FileBackedTaskManager(path); } public static HistoryManagerImpl getDefaultHistory() { diff --git a/src/main/service/TaskManagerService.java b/src/main/service/TaskManager.java similarity index 95% rename from src/main/service/TaskManagerService.java rename to src/main/service/TaskManager.java index 29e5d0f..017631f 100644 --- a/src/main/service/TaskManagerService.java +++ b/src/main/service/TaskManager.java @@ -4,10 +4,11 @@ import main.classes.SubTask; import main.classes.Task; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -public interface TaskManagerService { +public interface TaskManager { // добавляем задачу void addTask(Task taskNew); @@ -60,4 +61,5 @@ public interface TaskManagerService { List getHistory(); + Path getPath(); } diff --git a/src/test/TestInFile.java b/src/test/TestInFile.java new file mode 100644 index 0000000..db1455a --- /dev/null +++ b/src/test/TestInFile.java @@ -0,0 +1,277 @@ +package test; + +import main.classes.Epic; +import main.classes.Status; +import main.classes.SubTask; +import main.classes.Task; +import main.service.ManagerSaveException; +import main.service.Managers; +import main.service.TaskManager; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; + +class TestInFile { + + private static TaskManager testManager; + private static Task taskItem; + private static Epic epicItem; + private static SubTask subTaskItem; + + @BeforeEach + void initializeTaskManager() { + // Создаем пустой файл для менеджера задач + Path testFile; + try { + testFile = File.createTempFile("test", ".csv").toPath(); + } catch (IOException e) { + throw new ManagerSaveException("Не удалось создать временный файл"); + } + + // Проверяем что файл создан и он пустой + Assertions.assertTrue(Files.exists(testFile)); + try { + Assertions.assertEquals(0, Files.size(testFile)); + } catch (IOException e) { + throw new ManagerSaveException("Нет доступа к временному файлу"); + } + + // Проверяем создание менеджера через утилитарный класс, используем его в тестах + testManager = Managers.getFile(testFile); + + Assertions.assertNotNull(testManager); // проверяем что менеджер создан + Assertions.assertNotNull(testManager.getAllTasks()); // проверяем что список задач создан + Assertions.assertNotNull(testManager.getAllEpics()); // проверяем что список эпиков создан + Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список субзадач создан + Assertions.assertNotNull(testManager.getHistory()); // проверяем что история создана + + // Если при создании менеджера не было ошибок - значит пустой файл был считан и тест пройден. + + } + + @Test + void testFilesOperations() { + // Проверяем что менеджер сохраняет данные в файл + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // проверяем, что файл не пустой + try { + Assertions.assertNotEquals(0, Files.size(testManager.getPath())); + } catch (IOException e) { + throw new ManagerSaveException("Нет доступа к временному файлу"); + } + + // Считываем данные из файла в другой экземпляр менеджера + TaskManager testManager2 = Managers.getFile(testManager.getPath()); + + // Проверяем что данные из файла были считаны правильно и равны исходным + Assertions.assertEquals(testManager.getAllTasks(), testManager2.getAllTasks()); + Assertions.assertEquals(testManager.getAllEpics(), testManager2.getAllEpics()); + Assertions.assertEquals(testManager.getAllSubTasks(), testManager2.getAllSubTasks()); + // Проверяем идентичность полученные элементы из файла с исходными по всем значениям + Assertions.assertEquals(taskItem, testManager2.getTask(taskItem.getId())); + Assertions.assertEquals(epicItem, testManager2.getEpic(epicItem.getId())); + Assertions.assertEquals(subTaskItem, testManager2.getSubTask(subTaskItem.getId())); + + // Пройденные тесты говорят о правильности чтения из файла. + + // Удаляем содержимое второго экземпляра менеджера + testManager2.deleteAllSubTasks(); + testManager2.deleteAllEpics(); + testManager2.deleteAllTasks(); + // Проверяем что менеджер пустой + Assertions.assertTrue(testManager2.getAllTasks().isEmpty()); + Assertions.assertTrue(testManager2.getAllEpics().isEmpty()); + Assertions.assertTrue(testManager2.getAllSubTasks().isEmpty()); + // Проверяем, что файл второго менеджера пустой + try { + Assertions.assertEquals(0, Files.size(testManager2.getPath())); + } catch (IOException e) { + throw new ManagerSaveException("Нет доступа к временному файлу"); + } + + } + + @Test + void addItem() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // Проверяем, что globalId имеет последний свободный id номер + Assertions.assertEquals(4, testManager.getGlobalId()); + // Проверяем, что элементы добавлены в менеджер + // затем ищем элемент в менеджере по его id + // и сравниваем с элементом созданным в тесте + Assertions.assertEquals(taskItem, testManager.getTask(taskItem.getId())); + Assertions.assertEquals(epicItem, testManager.getEpic(epicItem.getId())); + Assertions.assertEquals(subTaskItem, testManager.getSubTask(subTaskItem.getId())); + + // Проверяем идентичность отправляемых элементов в менеджер с сохранёнными в менеджере по всем значениям + // Проверяем обычные задачи + Assertions.assertEquals(taskItem.getName(), testManager.getTask(taskItem.getId()).getName()); + Assertions.assertEquals(taskItem.getDescription(), testManager.getTask(taskItem.getId()).getDescription()); + Assertions.assertEquals(taskItem.getStatus(), testManager.getTask(taskItem.getId()).getStatus()); + // Проверяем эпики + Assertions.assertEquals(epicItem.getName(), testManager.getEpic(epicItem.getId()).getName()); + Assertions.assertEquals(epicItem.getDescription(), testManager.getEpic(epicItem.getId()).getDescription()); + Assertions.assertEquals(epicItem.getStatus(), testManager.getEpic(epicItem.getId()).getStatus()); + Assertions.assertEquals(epicItem.getIdSubTasks(), testManager.getEpic(epicItem.getId()).getIdSubTasks()); + // Проверяем подзадачи + Assertions.assertEquals(subTaskItem.getName(), testManager.getSubTask(subTaskItem.getId()).getName()); + Assertions.assertEquals(subTaskItem.getDescription(), + testManager.getSubTask(subTaskItem.getId()).getDescription()); + Assertions.assertEquals(subTaskItem.getStatus(), testManager.getSubTask(subTaskItem.getId()).getStatus()); + Assertions.assertEquals(subTaskItem.getIdEpic(), testManager.getSubTask(subTaskItem.getId()).getIdEpic()); + + } + + + @Test + void testItems() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // проверяем равенство элементов с одним и тем-же id + Task taskItem1 = testManager.getTask(1); + Task taskItem2 = testManager.getTask(1); + Assertions.assertEquals(taskItem1, taskItem2); + Epic epicItem1 = testManager.getEpic(2); + Epic epicItem2 = testManager.getEpic(2); + Assertions.assertEquals(epicItem1, epicItem2); + SubTask subTaskItem1 = testManager.getSubTask(3); + SubTask subTaskItem2 = testManager.getSubTask(3); + Assertions.assertEquals(subTaskItem1, subTaskItem2); + + } + + @Test + void testHistory1() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // Проверяем, что история пустая + Assertions.assertEquals(0, testManager.getHistory().size(), "История не пустая."); + // Добавляем элемент в историю при помощи запроса к менеджеру + Task taskItem1 = testManager.getTask(1); + // проверяем, что история изменилась на 1 + Assertions.assertEquals(1, testManager.getHistory().size(), "В историю не попала запись."); + // извлекаем из истории элемент + Task taskItem2 = testManager.getHistory().getLast(); + // Проверяем идентичность задачи менеджера и элемента истории + Assertions.assertEquals(taskItem1, taskItem2, "записи не соответствуют."); + // Изменяем содержимое задачи в менеджере, при этом проверяем, что нет конфликта при взаимодействии + // двух задач с одним id - происходит замена данных. + taskItem = new Task(1, + "Не работа", "Задача в работе", Status.IN_PROGRESS); + testManager.updateTask(taskItem); + // делаем запрос к задаче, для фиксации в истории этого запроса. + taskItem2 = testManager.getTask(1); + // Проверяем, что в истории только одна запись для задачи 1 + Assertions.assertEquals(1, testManager.getHistory().size(), "В истории не одна запись."); + // Сравниваем содержимое записи истории с содержимым задачи 1 до и после изменения. + // Первая запись не должна соответствовать taskItem1, а вторая должна соответствовать taskItem2. + Assertions.assertNotEquals(taskItem1, testManager.getHistory().getLast(), "записи соответствуют."); + Assertions.assertEquals(taskItem2, testManager.getHistory().getLast(), "записи не соответствуют."); + + } + + @Test + void testHistory2() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // Проверяем, что история пустая + Assertions.assertEquals(0, testManager.getHistory().size(), "История не пустая."); + // Добавляем 1 элемент в историю при помощи запроса к менеджеру + Task taskItem1 = testManager.getTask(1); + // проверяем, что история изменилась на 1 + Assertions.assertEquals(1, testManager.getHistory().size(), "В историю не попала 1 запись."); + // Добавляем 2 элемент в историю при помощи запроса к менеджеру + taskItem1 = testManager.getSubTask(3); + // проверяем, что история изменилась ещё на 1 + Assertions.assertEquals(2, testManager.getHistory().size(), "В историю не попала 2 запись."); + // Добавляем элемент в историю при помощи запроса к менеджеру + taskItem1 = testManager.getEpic(2); + // проверяем, что история изменилась ещё на 1 + Assertions.assertEquals(3, testManager.getHistory().size(), "В историю не попала 3 запись."); + // При помощи запросов к менеджеру проверяем - повторный запросы увеличили ли количество запросов в истории. + taskItem1 = testManager.getTask(1); + taskItem1 = testManager.getSubTask(3); + taskItem1 = testManager.getEpic(2); + // проверяем, что история осталась с 3 элементам. Что дублирования записей нет. + Assertions.assertEquals(3, testManager.getHistory().size(), "В истории появились дубли."); + // удаляем задачу и проверяем состояние истории - уменьшилась ли она, и есть ли запись с удалённой задачей. + testManager.deleteTask(1); + Assertions.assertEquals(2, testManager.getHistory().size(), "В истории не удалена запись."); + Assertions.assertNull(testManager.getTask(1), "Задача не удалена."); + // повторяем то-же самое с подзадачей и эпиком + testManager.deleteSubTask(3); + Assertions.assertEquals(1, testManager.getHistory().size(), "В истории не удалена запись."); + Assertions.assertNull(testManager.getSubTask(3), "Подзадача не удалена."); + testManager.deleteEpic(2); + Assertions.assertEquals(0, testManager.getHistory().size(), "В истории не удалена запись."); + Assertions.assertNull(testManager.getEpic(2), "Эпик не удален."); + } +} \ No newline at end of file diff --git a/src/test/TestCase.java b/src/test/TestInMemory.java similarity index 98% rename from src/test/TestCase.java rename to src/test/TestInMemory.java index dca6ff8..6d504ac 100644 --- a/src/test/TestCase.java +++ b/src/test/TestInMemory.java @@ -5,15 +5,15 @@ import main.classes.SubTask; import main.classes.Task; import main.service.Managers; -import main.service.TaskManagerService; +import main.service.TaskManager; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.ArrayList; -class TestCase { +class TestInMemory { - private static TaskManagerService testManager; + private static TaskManager testManager; private static Task taskItem; private static Epic epicItem; private static SubTask subTaskItem; diff --git a/test/TestInFile.java b/test/TestInFile.java new file mode 100644 index 0000000..db1455a --- /dev/null +++ b/test/TestInFile.java @@ -0,0 +1,277 @@ +package test; + +import main.classes.Epic; +import main.classes.Status; +import main.classes.SubTask; +import main.classes.Task; +import main.service.ManagerSaveException; +import main.service.Managers; +import main.service.TaskManager; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; + +class TestInFile { + + private static TaskManager testManager; + private static Task taskItem; + private static Epic epicItem; + private static SubTask subTaskItem; + + @BeforeEach + void initializeTaskManager() { + // Создаем пустой файл для менеджера задач + Path testFile; + try { + testFile = File.createTempFile("test", ".csv").toPath(); + } catch (IOException e) { + throw new ManagerSaveException("Не удалось создать временный файл"); + } + + // Проверяем что файл создан и он пустой + Assertions.assertTrue(Files.exists(testFile)); + try { + Assertions.assertEquals(0, Files.size(testFile)); + } catch (IOException e) { + throw new ManagerSaveException("Нет доступа к временному файлу"); + } + + // Проверяем создание менеджера через утилитарный класс, используем его в тестах + testManager = Managers.getFile(testFile); + + Assertions.assertNotNull(testManager); // проверяем что менеджер создан + Assertions.assertNotNull(testManager.getAllTasks()); // проверяем что список задач создан + Assertions.assertNotNull(testManager.getAllEpics()); // проверяем что список эпиков создан + Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список субзадач создан + Assertions.assertNotNull(testManager.getHistory()); // проверяем что история создана + + // Если при создании менеджера не было ошибок - значит пустой файл был считан и тест пройден. + + } + + @Test + void testFilesOperations() { + // Проверяем что менеджер сохраняет данные в файл + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // проверяем, что файл не пустой + try { + Assertions.assertNotEquals(0, Files.size(testManager.getPath())); + } catch (IOException e) { + throw new ManagerSaveException("Нет доступа к временному файлу"); + } + + // Считываем данные из файла в другой экземпляр менеджера + TaskManager testManager2 = Managers.getFile(testManager.getPath()); + + // Проверяем что данные из файла были считаны правильно и равны исходным + Assertions.assertEquals(testManager.getAllTasks(), testManager2.getAllTasks()); + Assertions.assertEquals(testManager.getAllEpics(), testManager2.getAllEpics()); + Assertions.assertEquals(testManager.getAllSubTasks(), testManager2.getAllSubTasks()); + // Проверяем идентичность полученные элементы из файла с исходными по всем значениям + Assertions.assertEquals(taskItem, testManager2.getTask(taskItem.getId())); + Assertions.assertEquals(epicItem, testManager2.getEpic(epicItem.getId())); + Assertions.assertEquals(subTaskItem, testManager2.getSubTask(subTaskItem.getId())); + + // Пройденные тесты говорят о правильности чтения из файла. + + // Удаляем содержимое второго экземпляра менеджера + testManager2.deleteAllSubTasks(); + testManager2.deleteAllEpics(); + testManager2.deleteAllTasks(); + // Проверяем что менеджер пустой + Assertions.assertTrue(testManager2.getAllTasks().isEmpty()); + Assertions.assertTrue(testManager2.getAllEpics().isEmpty()); + Assertions.assertTrue(testManager2.getAllSubTasks().isEmpty()); + // Проверяем, что файл второго менеджера пустой + try { + Assertions.assertEquals(0, Files.size(testManager2.getPath())); + } catch (IOException e) { + throw new ManagerSaveException("Нет доступа к временному файлу"); + } + + } + + @Test + void addItem() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // Проверяем, что globalId имеет последний свободный id номер + Assertions.assertEquals(4, testManager.getGlobalId()); + // Проверяем, что элементы добавлены в менеджер + // затем ищем элемент в менеджере по его id + // и сравниваем с элементом созданным в тесте + Assertions.assertEquals(taskItem, testManager.getTask(taskItem.getId())); + Assertions.assertEquals(epicItem, testManager.getEpic(epicItem.getId())); + Assertions.assertEquals(subTaskItem, testManager.getSubTask(subTaskItem.getId())); + + // Проверяем идентичность отправляемых элементов в менеджер с сохранёнными в менеджере по всем значениям + // Проверяем обычные задачи + Assertions.assertEquals(taskItem.getName(), testManager.getTask(taskItem.getId()).getName()); + Assertions.assertEquals(taskItem.getDescription(), testManager.getTask(taskItem.getId()).getDescription()); + Assertions.assertEquals(taskItem.getStatus(), testManager.getTask(taskItem.getId()).getStatus()); + // Проверяем эпики + Assertions.assertEquals(epicItem.getName(), testManager.getEpic(epicItem.getId()).getName()); + Assertions.assertEquals(epicItem.getDescription(), testManager.getEpic(epicItem.getId()).getDescription()); + Assertions.assertEquals(epicItem.getStatus(), testManager.getEpic(epicItem.getId()).getStatus()); + Assertions.assertEquals(epicItem.getIdSubTasks(), testManager.getEpic(epicItem.getId()).getIdSubTasks()); + // Проверяем подзадачи + Assertions.assertEquals(subTaskItem.getName(), testManager.getSubTask(subTaskItem.getId()).getName()); + Assertions.assertEquals(subTaskItem.getDescription(), + testManager.getSubTask(subTaskItem.getId()).getDescription()); + Assertions.assertEquals(subTaskItem.getStatus(), testManager.getSubTask(subTaskItem.getId()).getStatus()); + Assertions.assertEquals(subTaskItem.getIdEpic(), testManager.getSubTask(subTaskItem.getId()).getIdEpic()); + + } + + + @Test + void testItems() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // проверяем равенство элементов с одним и тем-же id + Task taskItem1 = testManager.getTask(1); + Task taskItem2 = testManager.getTask(1); + Assertions.assertEquals(taskItem1, taskItem2); + Epic epicItem1 = testManager.getEpic(2); + Epic epicItem2 = testManager.getEpic(2); + Assertions.assertEquals(epicItem1, epicItem2); + SubTask subTaskItem1 = testManager.getSubTask(3); + SubTask subTaskItem2 = testManager.getSubTask(3); + Assertions.assertEquals(subTaskItem1, subTaskItem2); + + } + + @Test + void testHistory1() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // Проверяем, что история пустая + Assertions.assertEquals(0, testManager.getHistory().size(), "История не пустая."); + // Добавляем элемент в историю при помощи запроса к менеджеру + Task taskItem1 = testManager.getTask(1); + // проверяем, что история изменилась на 1 + Assertions.assertEquals(1, testManager.getHistory().size(), "В историю не попала запись."); + // извлекаем из истории элемент + Task taskItem2 = testManager.getHistory().getLast(); + // Проверяем идентичность задачи менеджера и элемента истории + Assertions.assertEquals(taskItem1, taskItem2, "записи не соответствуют."); + // Изменяем содержимое задачи в менеджере, при этом проверяем, что нет конфликта при взаимодействии + // двух задач с одним id - происходит замена данных. + taskItem = new Task(1, + "Не работа", "Задача в работе", Status.IN_PROGRESS); + testManager.updateTask(taskItem); + // делаем запрос к задаче, для фиксации в истории этого запроса. + taskItem2 = testManager.getTask(1); + // Проверяем, что в истории только одна запись для задачи 1 + Assertions.assertEquals(1, testManager.getHistory().size(), "В истории не одна запись."); + // Сравниваем содержимое записи истории с содержимым задачи 1 до и после изменения. + // Первая запись не должна соответствовать taskItem1, а вторая должна соответствовать taskItem2. + Assertions.assertNotEquals(taskItem1, testManager.getHistory().getLast(), "записи соответствуют."); + Assertions.assertEquals(taskItem2, testManager.getHistory().getLast(), "записи не соответствуют."); + + } + + @Test + void testHistory2() { + + // Создаём элементы для добавления в менеджер + taskItem = new Task(testManager.getGlobalId(), + "Работа", "Просто задача", Status.NEW); + epicItem = new Epic(testManager.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>()); + subTaskItem = new SubTask(testManager.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2); + + // Добавляем элементы в менеджер + testManager.addTask(taskItem); + testManager.addEpic(epicItem); + testManager.addSubTask(subTaskItem); + + // Проверяем, что история пустая + Assertions.assertEquals(0, testManager.getHistory().size(), "История не пустая."); + // Добавляем 1 элемент в историю при помощи запроса к менеджеру + Task taskItem1 = testManager.getTask(1); + // проверяем, что история изменилась на 1 + Assertions.assertEquals(1, testManager.getHistory().size(), "В историю не попала 1 запись."); + // Добавляем 2 элемент в историю при помощи запроса к менеджеру + taskItem1 = testManager.getSubTask(3); + // проверяем, что история изменилась ещё на 1 + Assertions.assertEquals(2, testManager.getHistory().size(), "В историю не попала 2 запись."); + // Добавляем элемент в историю при помощи запроса к менеджеру + taskItem1 = testManager.getEpic(2); + // проверяем, что история изменилась ещё на 1 + Assertions.assertEquals(3, testManager.getHistory().size(), "В историю не попала 3 запись."); + // При помощи запросов к менеджеру проверяем - повторный запросы увеличили ли количество запросов в истории. + taskItem1 = testManager.getTask(1); + taskItem1 = testManager.getSubTask(3); + taskItem1 = testManager.getEpic(2); + // проверяем, что история осталась с 3 элементам. Что дублирования записей нет. + Assertions.assertEquals(3, testManager.getHistory().size(), "В истории появились дубли."); + // удаляем задачу и проверяем состояние истории - уменьшилась ли она, и есть ли запись с удалённой задачей. + testManager.deleteTask(1); + Assertions.assertEquals(2, testManager.getHistory().size(), "В истории не удалена запись."); + Assertions.assertNull(testManager.getTask(1), "Задача не удалена."); + // повторяем то-же самое с подзадачей и эпиком + testManager.deleteSubTask(3); + Assertions.assertEquals(1, testManager.getHistory().size(), "В истории не удалена запись."); + Assertions.assertNull(testManager.getSubTask(3), "Подзадача не удалена."); + testManager.deleteEpic(2); + Assertions.assertEquals(0, testManager.getHistory().size(), "В истории не удалена запись."); + Assertions.assertNull(testManager.getEpic(2), "Эпик не удален."); + } +} \ No newline at end of file diff --git a/test/TestCase.java b/test/TestInMemory.java similarity index 100% rename from test/TestCase.java rename to test/TestInMemory.java From 56bfec37405a5c7bebe1e1fde4e9a9f5243f7b4d Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 06:53:37 +0300 Subject: [PATCH 03/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BE=D0=BA=20Gita?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/Main.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/Main.java b/src/main/Main.java index 2dadb37..1ef0094 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -110,8 +110,7 @@ public static void main(String[] args) { System.out.println("было - " + exampleTM2.getEpic(5)); exampleTM2.updateEpic(new Epic(5, "Обед", "Время покушать", Status.IN_PROGRESS, new ArrayList<>() { - { - add(6); + { add(6); add(7); } })); From 7865fd4c51d82470a4fe194caab1a4e347c5db70 Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 06:56:12 +0300 Subject: [PATCH 04/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BE=D0=BA=20Gita?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/Main.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/Main.java b/src/main/Main.java index 1ef0094..e30c2ec 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -109,8 +109,7 @@ public static void main(String[] args) { // обновляем эпик "Обед" для проверки изменения описания System.out.println("было - " + exampleTM2.getEpic(5)); exampleTM2.updateEpic(new Epic(5, "Обед", - "Время покушать", Status.IN_PROGRESS, new ArrayList<>() { - { add(6); + "Время покушать", Status.IN_PROGRESS, new ArrayList<>() {{ add(6); add(7); } })); From 4391f0e6dca360d29f93cd448f1a0a5b035f270c Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 07:07:47 +0300 Subject: [PATCH 05/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BE=D0=BA=20Gita?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/Main.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/Main.java b/src/main/Main.java index e30c2ec..1ef0094 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -109,7 +109,8 @@ public static void main(String[] args) { // обновляем эпик "Обед" для проверки изменения описания System.out.println("было - " + exampleTM2.getEpic(5)); exampleTM2.updateEpic(new Epic(5, "Обед", - "Время покушать", Status.IN_PROGRESS, new ArrayList<>() {{ add(6); + "Время покушать", Status.IN_PROGRESS, new ArrayList<>() { + { add(6); add(7); } })); From 43126a3d5a6bfefe8ed352fc6dbe8b1a815d6ed6 Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 07:12:56 +0300 Subject: [PATCH 06/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BE=D0=BA=20Gita?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/Main.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/Main.java b/src/main/Main.java index 1ef0094..e30c2ec 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -109,8 +109,7 @@ public static void main(String[] args) { // обновляем эпик "Обед" для проверки изменения описания System.out.println("было - " + exampleTM2.getEpic(5)); exampleTM2.updateEpic(new Epic(5, "Обед", - "Время покушать", Status.IN_PROGRESS, new ArrayList<>() { - { add(6); + "Время покушать", Status.IN_PROGRESS, new ArrayList<>() {{ add(6); add(7); } })); From 4e489a78af1ed7c204efa9a14183beb8b445e091 Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 07:15:53 +0300 Subject: [PATCH 07/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BE=D0=BA=20Gita?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/service/FileBackedTaskManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/service/FileBackedTaskManager.java b/src/main/service/FileBackedTaskManager.java index 226041d..969d00b 100644 --- a/src/main/service/FileBackedTaskManager.java +++ b/src/main/service/FileBackedTaskManager.java @@ -26,7 +26,7 @@ public Path getPath() { } public void loadFromFile() { - if(Files.exists(this.path)) { + if (Files.exists(this.path)) { try (BufferedReader br = Files.newBufferedReader(this.path, StandardCharsets.UTF_8)) { // br.readLine(); while (br.ready()) { @@ -101,7 +101,7 @@ public void save() { } public String toString(Task task) { // метод обработки считываемой из файла строки - String type =""; + String type = ""; int idEpic = 0; switch (task.getClass().getSimpleName()) { case "Task" -> type = "TASK"; @@ -111,7 +111,7 @@ public String toString(Task task) { // метод обработки считы idEpic = ((SubTask) task).getIdEpic(); } } - return (String) ( task.getId() + "," + type + "," + task.getName()+ "," + task.getStatus()+ "," + task.getDescription()+ "," + idEpic); + return task.getId() + "," + type + "," + task.getName() + "," + task.getStatus() + "," + task.getDescription() + "," + idEpic; } // переопределение методов для сохранения данных в файле From 5bf2d2976bd916b10e2218ce76f9fae50196ab98 Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 07:32:36 +0300 Subject: [PATCH 08/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BE=D0=BA=20Gita?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/TestInMemory.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/TestInMemory.java b/test/TestInMemory.java index 3768b28..6d504ac 100644 --- a/test/TestInMemory.java +++ b/test/TestInMemory.java @@ -5,22 +5,22 @@ import main.classes.SubTask; import main.classes.Task; import main.service.Managers; -import main.service.TaskManagerService; +import main.service.TaskManager; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.ArrayList; -class TestCase { +class TestInMemory { - private static TaskManagerService testManager; + private static TaskManager testManager; private static Task taskItem; private static Epic epicItem; private static SubTask subTaskItem; @BeforeEach void initializeTaskManager() { - // Проверяем создание менеджера через утилитарный класс, используем его в тестах + // Проверяем создание менеджера через утилитарный класс, используем его в тестах testManager = Managers.getDefault(); Assertions.assertNotNull(testManager); // проверяем что менеджер создан Assertions.assertNotNull(testManager.getAllTasks()); // проверяем что список задач создан From 72c0253fc058f94476021f87d0c21a0fb7e9f41d Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 06:47:32 +0300 Subject: [PATCH 09/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/Main.java | 5 ++- src/main/service/FileBackedTaskManager.java | 30 ++++++++-------- src/main/service/InMemoryTaskManager.java | 4 +-- src/main/service/Managers.java | 6 ++-- src/main/service/TaskManager.java | 4 +-- src/test/TestInFile.java | 39 +++++++-------------- src/test/TestInMemory.java | 8 ++--- 7 files changed, 40 insertions(+), 56 deletions(-) diff --git a/src/main/Main.java b/src/main/Main.java index e30c2ec..01dbf7e 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -10,7 +10,6 @@ import java.io.File; import java.io.IOException; -import java.nio.file.Path; import java.util.ArrayList; public class Main { @@ -18,9 +17,9 @@ public class Main { public static void main(String[] args) { // Проверяем работу менеджера задач - Path testFile; + File testFile; try { - testFile = File.createTempFile("test", ".csv").toPath(); + testFile = File.createTempFile("test", ".csv"); } catch (IOException e) { throw new ManagerSaveException("Не удалось создать временный файл"); } diff --git a/src/main/service/FileBackedTaskManager.java b/src/main/service/FileBackedTaskManager.java index 969d00b..a5908d9 100644 --- a/src/main/service/FileBackedTaskManager.java +++ b/src/main/service/FileBackedTaskManager.java @@ -2,34 +2,32 @@ import main.classes.*; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.IOException; +import java.io.*; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.ArrayList; public class FileBackedTaskManager extends InMemoryTaskManager { - public Path path; + private final File file; - public FileBackedTaskManager(Path path) { + public FileBackedTaskManager(File file) { super(); - this.path = path; + this.file = file; this.loadFromFile(); } - public Path getPath() { - return path; + public File getFile() { + return file; } public void loadFromFile() { - if (Files.exists(this.path)) { - try (BufferedReader br = Files.newBufferedReader(this.path, StandardCharsets.UTF_8)) { - // br.readLine(); - while (br.ready()) { + + // если файл существует, то считываем из него данные + + if (this.file.exists()) { + try (BufferedReader br = new BufferedReader(new FileReader(this.file, StandardCharsets.UTF_8))) { + while (br.ready()) { String line = br.readLine(); Task loadTask = fromString(line); @@ -77,8 +75,8 @@ public Task fromString(String value) { // метод обработки счит } } - public void save() { - try (BufferedWriter bw = Files.newBufferedWriter(this.path, StandardCharsets.UTF_8)) { + private void save() { + try (BufferedWriter bw = new BufferedWriter(new FileWriter(this.file, StandardCharsets.UTF_8))) { // Записываем в файл Task for (int key : task.keySet()) { bw.write(toString(task.get(key))); diff --git a/src/main/service/InMemoryTaskManager.java b/src/main/service/InMemoryTaskManager.java index c4c55ec..6d1dcbe 100644 --- a/src/main/service/InMemoryTaskManager.java +++ b/src/main/service/InMemoryTaskManager.java @@ -5,7 +5,7 @@ import main.classes.SubTask; import main.classes.Task; -import java.nio.file.Path; +import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -256,7 +256,7 @@ public List getHistory() { } @Override - public Path getPath() { + public File getFile() { return null; } } diff --git a/src/main/service/Managers.java b/src/main/service/Managers.java index f8cad19..52a2296 100644 --- a/src/main/service/Managers.java +++ b/src/main/service/Managers.java @@ -1,6 +1,6 @@ package main.service; -import java.nio.file.Path; +import java.io.File; public class Managers { @@ -8,8 +8,8 @@ public static InMemoryTaskManager getDefault() { return new InMemoryTaskManager(); } - public static FileBackedTaskManager getFile(Path path) { - return new FileBackedTaskManager(path); + public static FileBackedTaskManager getFile(File file) { + return new FileBackedTaskManager(file); } public static HistoryManagerImpl getDefaultHistory() { diff --git a/src/main/service/TaskManager.java b/src/main/service/TaskManager.java index 017631f..1c234cd 100644 --- a/src/main/service/TaskManager.java +++ b/src/main/service/TaskManager.java @@ -4,7 +4,7 @@ import main.classes.SubTask; import main.classes.Task; -import java.nio.file.Path; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -61,5 +61,5 @@ public interface TaskManager { List getHistory(); - Path getPath(); + File getFile(); } diff --git a/src/test/TestInFile.java b/src/test/TestInFile.java index db1455a..5de1ce7 100644 --- a/src/test/TestInFile.java +++ b/src/test/TestInFile.java @@ -13,8 +13,6 @@ import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.ArrayList; class TestInFile { @@ -27,20 +25,17 @@ class TestInFile { @BeforeEach void initializeTaskManager() { // Создаем пустой файл для менеджера задач - Path testFile; + File testFile; try { - testFile = File.createTempFile("test", ".csv").toPath(); + testFile = File.createTempFile("test", ".csv"); } catch (IOException e) { throw new ManagerSaveException("Не удалось создать временный файл"); } // Проверяем что файл создан и он пустой - Assertions.assertTrue(Files.exists(testFile)); - try { - Assertions.assertEquals(0, Files.size(testFile)); - } catch (IOException e) { - throw new ManagerSaveException("Нет доступа к временному файлу"); - } + Assertions.assertNotNull(testFile); + // Проверяем что файл пустой + Assertions.assertEquals(0, testFile.length()); // Проверяем создание менеджера через утилитарный класс, используем его в тестах testManager = Managers.getFile(testFile); @@ -48,7 +43,7 @@ void initializeTaskManager() { Assertions.assertNotNull(testManager); // проверяем что менеджер создан Assertions.assertNotNull(testManager.getAllTasks()); // проверяем что список задач создан Assertions.assertNotNull(testManager.getAllEpics()); // проверяем что список эпиков создан - Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список субзадач создан + Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список подзадач создан Assertions.assertNotNull(testManager.getHistory()); // проверяем что история создана // Если при создании менеджера не было ошибок - значит пустой файл был считан и тест пройден. @@ -72,15 +67,11 @@ void testFilesOperations() { testManager.addEpic(epicItem); testManager.addSubTask(subTaskItem); - // проверяем, что файл не пустой - try { - Assertions.assertNotEquals(0, Files.size(testManager.getPath())); - } catch (IOException e) { - throw new ManagerSaveException("Нет доступа к временному файлу"); - } + // Проверяем что файл не пустой + Assertions.assertNotEquals(0, testManager.getFile().length()); // Считываем данные из файла в другой экземпляр менеджера - TaskManager testManager2 = Managers.getFile(testManager.getPath()); + TaskManager testManager2 = Managers.getFile(testManager.getFile()); // Проверяем что данные из файла были считаны правильно и равны исходным Assertions.assertEquals(testManager.getAllTasks(), testManager2.getAllTasks()); @@ -102,11 +93,7 @@ void testFilesOperations() { Assertions.assertTrue(testManager2.getAllEpics().isEmpty()); Assertions.assertTrue(testManager2.getAllSubTasks().isEmpty()); // Проверяем, что файл второго менеджера пустой - try { - Assertions.assertEquals(0, Files.size(testManager2.getPath())); - } catch (IOException e) { - throw new ManagerSaveException("Нет доступа к временному файлу"); - } + Assertions.assertEquals(0, testManager2.getFile().length()); } @@ -128,14 +115,14 @@ void addItem() { // Проверяем, что globalId имеет последний свободный id номер Assertions.assertEquals(4, testManager.getGlobalId()); - // Проверяем, что элементы добавлены в менеджер + // Проверяем, что элементы добавлены в менеджере // затем ищем элемент в менеджере по его id // и сравниваем с элементом созданным в тесте Assertions.assertEquals(taskItem, testManager.getTask(taskItem.getId())); Assertions.assertEquals(epicItem, testManager.getEpic(epicItem.getId())); Assertions.assertEquals(subTaskItem, testManager.getSubTask(subTaskItem.getId())); - // Проверяем идентичность отправляемых элементов в менеджер с сохранёнными в менеджере по всем значениям + // Проверяем идентичность отправляемых элементов в менеджере с сохранёнными в менеджере по всем значениям // Проверяем обычные задачи Assertions.assertEquals(taskItem.getName(), testManager.getTask(taskItem.getId()).getName()); Assertions.assertEquals(taskItem.getDescription(), testManager.getTask(taskItem.getId()).getDescription()); @@ -260,7 +247,7 @@ void testHistory2() { taskItem1 = testManager.getTask(1); taskItem1 = testManager.getSubTask(3); taskItem1 = testManager.getEpic(2); - // проверяем, что история осталась с 3 элементам. Что дублирования записей нет. + // Проверяем, что история осталась с 3 элементам. Что дублирования записей нет. Assertions.assertEquals(3, testManager.getHistory().size(), "В истории появились дубли."); // удаляем задачу и проверяем состояние истории - уменьшилась ли она, и есть ли запись с удалённой задачей. testManager.deleteTask(1); diff --git a/src/test/TestInMemory.java b/src/test/TestInMemory.java index 6d504ac..1bff317 100644 --- a/src/test/TestInMemory.java +++ b/src/test/TestInMemory.java @@ -25,7 +25,7 @@ void initializeTaskManager() { Assertions.assertNotNull(testManager); // проверяем что менеджер создан Assertions.assertNotNull(testManager.getAllTasks()); // проверяем что список задач создан Assertions.assertNotNull(testManager.getAllEpics()); // проверяем что список эпиков создан - Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список субзадач создан + Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список подзадач создан Assertions.assertNotNull(testManager.getHistory()); // проверяем что история создана // Создаём элементы для добавления в менеджер @@ -48,14 +48,14 @@ void addItem() { // Проверяем, что globalId имеет последний свободный id номер Assertions.assertEquals(4, testManager.getGlobalId()); - // Проверяем, что элементы добавлены в менеджер + // Проверяем, что элементы добавлены в менеджере // затем ищем элемент в менеджере по его id // и сравниваем с элементом созданным в тесте Assertions.assertEquals(taskItem, testManager.getTask(taskItem.getId())); Assertions.assertEquals(epicItem, testManager.getEpic(epicItem.getId())); Assertions.assertEquals(subTaskItem, testManager.getSubTask(subTaskItem.getId())); - // Проверяем идентичность отправляемых элементов в менеджер с сохранёнными в менеджере по всем значениям + // Проверяем идентичность отправляемых элементов в менеджере с сохранёнными в менеджере по всем значениям // Проверяем обычные задачи Assertions.assertEquals(taskItem.getName(), testManager.getTask(taskItem.getId()).getName()); Assertions.assertEquals(taskItem.getDescription(), testManager.getTask(taskItem.getId()).getDescription()); @@ -138,7 +138,7 @@ void testHistory2() { taskItem1 = testManager.getTask(1); taskItem1 = testManager.getSubTask(3); taskItem1 = testManager.getEpic(2); - // проверяем, что история осталась с 3 элементам. Что дублирования записей нет. + // Проверяем, что история осталась с 3 элементам. Что дублирования записей нет. Assertions.assertEquals(3, testManager.getHistory().size(), "В истории появились дубли."); // удаляем задачу и проверяем состояние истории - уменьшилась ли она, и есть ли запись с удалённой задачей. testManager.deleteTask(1); From e0bdd71eae1eb64ba3e8414763d03936aaa36bad Mon Sep 17 00:00:00 2001 From: Sergey Filippovskikh Date: Wed, 4 Dec 2024 21:51:40 +0300 Subject: [PATCH 10/10] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=207=20=D1=81=D0=BF=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/TestInFile.java | 39 +++++++++++++-------------------------- test/TestInMemory.java | 8 ++++---- 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/test/TestInFile.java b/test/TestInFile.java index db1455a..5de1ce7 100644 --- a/test/TestInFile.java +++ b/test/TestInFile.java @@ -13,8 +13,6 @@ import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.ArrayList; class TestInFile { @@ -27,20 +25,17 @@ class TestInFile { @BeforeEach void initializeTaskManager() { // Создаем пустой файл для менеджера задач - Path testFile; + File testFile; try { - testFile = File.createTempFile("test", ".csv").toPath(); + testFile = File.createTempFile("test", ".csv"); } catch (IOException e) { throw new ManagerSaveException("Не удалось создать временный файл"); } // Проверяем что файл создан и он пустой - Assertions.assertTrue(Files.exists(testFile)); - try { - Assertions.assertEquals(0, Files.size(testFile)); - } catch (IOException e) { - throw new ManagerSaveException("Нет доступа к временному файлу"); - } + Assertions.assertNotNull(testFile); + // Проверяем что файл пустой + Assertions.assertEquals(0, testFile.length()); // Проверяем создание менеджера через утилитарный класс, используем его в тестах testManager = Managers.getFile(testFile); @@ -48,7 +43,7 @@ void initializeTaskManager() { Assertions.assertNotNull(testManager); // проверяем что менеджер создан Assertions.assertNotNull(testManager.getAllTasks()); // проверяем что список задач создан Assertions.assertNotNull(testManager.getAllEpics()); // проверяем что список эпиков создан - Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список субзадач создан + Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список подзадач создан Assertions.assertNotNull(testManager.getHistory()); // проверяем что история создана // Если при создании менеджера не было ошибок - значит пустой файл был считан и тест пройден. @@ -72,15 +67,11 @@ void testFilesOperations() { testManager.addEpic(epicItem); testManager.addSubTask(subTaskItem); - // проверяем, что файл не пустой - try { - Assertions.assertNotEquals(0, Files.size(testManager.getPath())); - } catch (IOException e) { - throw new ManagerSaveException("Нет доступа к временному файлу"); - } + // Проверяем что файл не пустой + Assertions.assertNotEquals(0, testManager.getFile().length()); // Считываем данные из файла в другой экземпляр менеджера - TaskManager testManager2 = Managers.getFile(testManager.getPath()); + TaskManager testManager2 = Managers.getFile(testManager.getFile()); // Проверяем что данные из файла были считаны правильно и равны исходным Assertions.assertEquals(testManager.getAllTasks(), testManager2.getAllTasks()); @@ -102,11 +93,7 @@ void testFilesOperations() { Assertions.assertTrue(testManager2.getAllEpics().isEmpty()); Assertions.assertTrue(testManager2.getAllSubTasks().isEmpty()); // Проверяем, что файл второго менеджера пустой - try { - Assertions.assertEquals(0, Files.size(testManager2.getPath())); - } catch (IOException e) { - throw new ManagerSaveException("Нет доступа к временному файлу"); - } + Assertions.assertEquals(0, testManager2.getFile().length()); } @@ -128,14 +115,14 @@ void addItem() { // Проверяем, что globalId имеет последний свободный id номер Assertions.assertEquals(4, testManager.getGlobalId()); - // Проверяем, что элементы добавлены в менеджер + // Проверяем, что элементы добавлены в менеджере // затем ищем элемент в менеджере по его id // и сравниваем с элементом созданным в тесте Assertions.assertEquals(taskItem, testManager.getTask(taskItem.getId())); Assertions.assertEquals(epicItem, testManager.getEpic(epicItem.getId())); Assertions.assertEquals(subTaskItem, testManager.getSubTask(subTaskItem.getId())); - // Проверяем идентичность отправляемых элементов в менеджер с сохранёнными в менеджере по всем значениям + // Проверяем идентичность отправляемых элементов в менеджере с сохранёнными в менеджере по всем значениям // Проверяем обычные задачи Assertions.assertEquals(taskItem.getName(), testManager.getTask(taskItem.getId()).getName()); Assertions.assertEquals(taskItem.getDescription(), testManager.getTask(taskItem.getId()).getDescription()); @@ -260,7 +247,7 @@ void testHistory2() { taskItem1 = testManager.getTask(1); taskItem1 = testManager.getSubTask(3); taskItem1 = testManager.getEpic(2); - // проверяем, что история осталась с 3 элементам. Что дублирования записей нет. + // Проверяем, что история осталась с 3 элементам. Что дублирования записей нет. Assertions.assertEquals(3, testManager.getHistory().size(), "В истории появились дубли."); // удаляем задачу и проверяем состояние истории - уменьшилась ли она, и есть ли запись с удалённой задачей. testManager.deleteTask(1); diff --git a/test/TestInMemory.java b/test/TestInMemory.java index 6d504ac..1bff317 100644 --- a/test/TestInMemory.java +++ b/test/TestInMemory.java @@ -25,7 +25,7 @@ void initializeTaskManager() { Assertions.assertNotNull(testManager); // проверяем что менеджер создан Assertions.assertNotNull(testManager.getAllTasks()); // проверяем что список задач создан Assertions.assertNotNull(testManager.getAllEpics()); // проверяем что список эпиков создан - Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список субзадач создан + Assertions.assertNotNull(testManager.getAllSubTasks()); // проверяем что список подзадач создан Assertions.assertNotNull(testManager.getHistory()); // проверяем что история создана // Создаём элементы для добавления в менеджер @@ -48,14 +48,14 @@ void addItem() { // Проверяем, что globalId имеет последний свободный id номер Assertions.assertEquals(4, testManager.getGlobalId()); - // Проверяем, что элементы добавлены в менеджер + // Проверяем, что элементы добавлены в менеджере // затем ищем элемент в менеджере по его id // и сравниваем с элементом созданным в тесте Assertions.assertEquals(taskItem, testManager.getTask(taskItem.getId())); Assertions.assertEquals(epicItem, testManager.getEpic(epicItem.getId())); Assertions.assertEquals(subTaskItem, testManager.getSubTask(subTaskItem.getId())); - // Проверяем идентичность отправляемых элементов в менеджер с сохранёнными в менеджере по всем значениям + // Проверяем идентичность отправляемых элементов в менеджере с сохранёнными в менеджере по всем значениям // Проверяем обычные задачи Assertions.assertEquals(taskItem.getName(), testManager.getTask(taskItem.getId()).getName()); Assertions.assertEquals(taskItem.getDescription(), testManager.getTask(taskItem.getId()).getDescription()); @@ -138,7 +138,7 @@ void testHistory2() { taskItem1 = testManager.getTask(1); taskItem1 = testManager.getSubTask(3); taskItem1 = testManager.getEpic(2); - // проверяем, что история осталась с 3 элементам. Что дублирования записей нет. + // Проверяем, что история осталась с 3 элементам. Что дублирования записей нет. Assertions.assertEquals(3, testManager.getHistory().size(), "В истории появились дубли."); // удаляем задачу и проверяем состояние истории - уменьшилась ли она, и есть ли запись с удалённой задачей. testManager.deleteTask(1);