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 a1ffa39..01dbf7e 100644 --- a/src/main/Main.java +++ b/src/main/Main.java @@ -4,102 +4,125 @@ 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.util.ArrayList; public class Main { public static void main(String[] args) { - TaskManagerService exampleTaskManagerService = Managers.getDefault(); + + // Проверяем работу менеджера задач + File testFile; + try { + testFile = File.createTempFile("test", ".csv"); + } 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(), "Работа", "Просто задача", - 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)); + exampleTM1.addTask(new Task(exampleTM1.getGlobalId(), + "Работа", "Просто задача", Status.NEW)); + exampleTM1.addEpic(new Epic(exampleTM1.getGlobalId(), + "Этапы", "Поэтапная работа", Status.NEW, new ArrayList<>())); + exampleTM1.addSubTask(new SubTask(exampleTM1.getGlobalId(), + "Этап 1", "Подготовка к работе", Status.NEW, 2)); + exampleTM1.addTask(new Task(exampleTM1.getGlobalId(), + "Отдых", "Поехать в отпуск", Status.NEW)); + exampleTM1.addEpic(new Epic(exampleTM1.getGlobalId(), + "Обед", "Нужно утолить голод", Status.NEW, new ArrayList<>())); + exampleTM1.addSubTask(new SubTask(exampleTM1.getGlobalId(), + "Закупка", "Надо в магазин", Status.NEW, 5)); + 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, "Работа", "Работу работаем", Status.IN_PROGRESS)); - System.out.println("стало - " + exampleTaskManagerService.getTask(1)); + System.out.println("было - " + exampleTM2.getTask(1)); + exampleTM2.updateTask(new Task(1, "Работа", + "Работу работаем", Status.IN_PROGRESS)); + System.out.println("стало - " + exampleTM2.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); - } - })); - System.out.println("стало/было - " + exampleTaskManagerService.getEpic(5)); + System.out.println("было - " + exampleTM2.getEpic(5)); + exampleTM2.updateEpic(new Epic(5, "Обед", + "Время покушать", Status.IN_PROGRESS, new ArrayList<>() {{ add(6); + add(7); + } + })); + System.out.println("стало/было - " + exampleTM2.getEpic(5)); // обновляем эпику "Обед" его подзадачу для проверки изменения статуса эпика - exampleTaskManagerService.updateSubTask( - new SubTask(6, "Закупка", "Пошли в магазин", Status.IN_PROGRESS, 5)); - System.out.println("стало - " + exampleTaskManagerService.getEpic(5)); + exampleTM2.updateSubTask(new SubTask(6, "Закупка", + "Пошли в магазин", Status.IN_PROGRESS, 5)); + System.out.println("стало - " + exampleTM2.getEpic(5)); System.out.println(); // обновляем эпику "Этапы" его подзадачу для проверки изменения статуса эпика - System.out.println("было - " + exampleTaskManagerService.getEpic(2)); - exampleTaskManagerService.updateSubTask( - new SubTask(3, "Этап 1", "Подготовка к работе", Status.DONE, 2)); - System.out.println("стало - " + exampleTaskManagerService.getEpic(2)); + System.out.println("было - " + exampleTM2.getEpic(2)); + exampleTM2.updateSubTask(new SubTask(3, "Этап 1", + "Подготовка к работе", Status.DONE, 2)); + System.out.println("стало - " + exampleTM2.getEpic(2)); System.out.println("============================"); System.out.println(); @@ -107,67 +130,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/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/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..a5908d9 --- /dev/null +++ b/src/main/service/FileBackedTaskManager.java @@ -0,0 +1,209 @@ +package main.service; + +import main.classes.*; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + + +public class FileBackedTaskManager extends InMemoryTaskManager { + + private final File file; + + public FileBackedTaskManager(File file) { + super(); + this.file = file; + this.loadFromFile(); + } + + public File getFile() { + return file; + } + + public void loadFromFile() { + + // если файл существует, то считываем из него данные + + 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); + + 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; + } + } + } + + 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))); + 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 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 4d93dba..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; @@ -85,4 +85,4 @@ public List getHistory() { return result; } -} \ No newline at end of file +} 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..6d1dcbe 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.io.File; 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 File getFile() { + 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..52a2296 100644 --- a/src/main/service/Managers.java +++ b/src/main/service/Managers.java @@ -1,9 +1,15 @@ package main.service; +import java.io.File; + public class Managers { - public static TaskManagerImpl getDefault() { - return new TaskManagerImpl(); + public static InMemoryTaskManager getDefault() { + return new InMemoryTaskManager(); + } + + public static FileBackedTaskManager getFile(File file) { + return new FileBackedTaskManager(file); } public static HistoryManagerImpl getDefaultHistory() { diff --git a/src/main/service/TaskManagerService.java b/src/main/service/TaskManager.java similarity index 96% rename from src/main/service/TaskManagerService.java rename to src/main/service/TaskManager.java index 29e5d0f..1c234cd 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.io.File; 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(); + File getFile(); } diff --git a/src/test/TestInFile.java b/src/test/TestInFile.java new file mode 100644 index 0000000..5de1ce7 --- /dev/null +++ b/src/test/TestInFile.java @@ -0,0 +1,264 @@ +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.util.ArrayList; + +class TestInFile { + + private static TaskManager testManager; + private static Task taskItem; + private static Epic epicItem; + private static SubTask subTaskItem; + + @BeforeEach + void initializeTaskManager() { + // Создаем пустой файл для менеджера задач + File testFile; + try { + testFile = File.createTempFile("test", ".csv"); + } catch (IOException e) { + throw new ManagerSaveException("Не удалось создать временный файл"); + } + + // Проверяем что файл создан и он пустой + Assertions.assertNotNull(testFile); + // Проверяем что файл пустой + Assertions.assertEquals(0, testFile.length()); + + // Проверяем создание менеджера через утилитарный класс, используем его в тестах + 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); + + // Проверяем что файл не пустой + Assertions.assertNotEquals(0, testManager.getFile().length()); + + // Считываем данные из файла в другой экземпляр менеджера + TaskManager testManager2 = Managers.getFile(testManager.getFile()); + + // Проверяем что данные из файла были считаны правильно и равны исходным + 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()); + // Проверяем, что файл второго менеджера пустой + Assertions.assertEquals(0, testManager2.getFile().length()); + + } + + @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 96% rename from src/test/TestCase.java rename to src/test/TestInMemory.java index dca6ff8..1bff317 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; @@ -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); diff --git a/test/TestInFile.java b/test/TestInFile.java new file mode 100644 index 0000000..5de1ce7 --- /dev/null +++ b/test/TestInFile.java @@ -0,0 +1,264 @@ +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.util.ArrayList; + +class TestInFile { + + private static TaskManager testManager; + private static Task taskItem; + private static Epic epicItem; + private static SubTask subTaskItem; + + @BeforeEach + void initializeTaskManager() { + // Создаем пустой файл для менеджера задач + File testFile; + try { + testFile = File.createTempFile("test", ".csv"); + } catch (IOException e) { + throw new ManagerSaveException("Не удалось создать временный файл"); + } + + // Проверяем что файл создан и он пустой + Assertions.assertNotNull(testFile); + // Проверяем что файл пустой + Assertions.assertEquals(0, testFile.length()); + + // Проверяем создание менеджера через утилитарный класс, используем его в тестах + 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); + + // Проверяем что файл не пустой + Assertions.assertNotEquals(0, testManager.getFile().length()); + + // Считываем данные из файла в другой экземпляр менеджера + TaskManager testManager2 = Managers.getFile(testManager.getFile()); + + // Проверяем что данные из файла были считаны правильно и равны исходным + 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()); + // Проверяем, что файл второго менеджера пустой + Assertions.assertEquals(0, testManager2.getFile().length()); + + } + + @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 94% rename from test/TestCase.java rename to test/TestInMemory.java index 3768b28..1bff317 100644 --- a/test/TestCase.java +++ b/test/TestInMemory.java @@ -5,27 +5,27 @@ 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()); // проверяем что список задач создан 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);