From 63cfa6f94e48e2c4dbe68053bd3cb9cbfe31dcf5 Mon Sep 17 00:00:00 2001 From: Aleksey Gurzhiev Date: Tue, 3 Dec 2024 12:44:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D1=80=D0=B8=D0=BD=D1=82=206=20=20(?= =?UTF-8?q?#2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Сделать бесконечную историю со скоростью доступа О(1). * Сделать бесконечную историю со скоростью доступа О(1). * Спринт 6. Сделать бесконечную историю со скоростью доступа О(1) * Спринт 6. Сделать бесконечную историю со скоростью доступа О(1) * Изменить кодстайл * Кодстайл * Кодстайл * Кодстайл * Кодстайл * Кодстайл * Изменить таксономию, чтобы автотесты при PR запускались * Изменение таксономии, чтобы пройти PR автотесты * Изменение таксономии, чтобы пройти PR автотесты * Изменение таксономии, чтобы пройти PR автотесты * Разбить файл тестов на файлы и папки, сделать Node класс внутренним и приватным, удалить clear из интерфейса HistoryManager --- src/Main.java | 146 +++++- .../kanban/service/HistoryManager.java | 2 +- .../service/InMemoryHistoryManager.java | 123 ++++- .../kanban/service/InMemoryTaskManager.java | 15 +- src/ru/alexgur/kanban/tests/Tests.java | 467 ------------------ test/ru/alexgur/kanban/MainTest.java | 253 ++++++++++ test/ru/alexgur/kanban/model/EpicTest.java | 58 +++ test/ru/alexgur/kanban/model/SubTaskTest.java | 44 ++ test/ru/alexgur/kanban/model/TaskTest.java | 90 ++++ .../kanban/service/HistoryManagerTest.java | 38 ++ .../service/InMemoryHistoryManagerTest.java | 92 ++++ .../service/InMemoryTaskManagerTest.java | 57 +++ .../alexgur/kanban/service/ManagersTest.java | 30 ++ 13 files changed, 924 insertions(+), 491 deletions(-) delete mode 100644 src/ru/alexgur/kanban/tests/Tests.java create mode 100644 test/ru/alexgur/kanban/MainTest.java create mode 100644 test/ru/alexgur/kanban/model/EpicTest.java create mode 100644 test/ru/alexgur/kanban/model/SubTaskTest.java create mode 100644 test/ru/alexgur/kanban/model/TaskTest.java create mode 100644 test/ru/alexgur/kanban/service/HistoryManagerTest.java create mode 100644 test/ru/alexgur/kanban/service/InMemoryHistoryManagerTest.java create mode 100644 test/ru/alexgur/kanban/service/InMemoryTaskManagerTest.java create mode 100644 test/ru/alexgur/kanban/service/ManagersTest.java diff --git a/src/Main.java b/src/Main.java index 3c79d14..8eed86e 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,8 +1,148 @@ -import ru.alexgur.kanban.tests.Tests; +import java.util.List; +import ru.alexgur.kanban.model.Epic; +import ru.alexgur.kanban.model.SubTask; +import ru.alexgur.kanban.model.Task; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.Status; +import ru.alexgur.kanban.service.TaskManager; public class Main { public static void main(String[] args) { - Tests tests = new Tests(); - tests.startManual(); + Main ex = new Main(); + ex.startManual(); + } + + public void startManual() { + + TaskManager tm = Managers.getDefault(); + HistoryManager hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + + // Создаём первую эпик задачу + SubTask subTask1 = new SubTask(); + SubTask subTask2 = new SubTask(); + SubTask subTask3 = new SubTask(); + Epic epic1 = new Epic(); + + tm.addSubTask(subTask1); + tm.addSubTask(subTask2); + tm.addSubTask(subTask3); + tm.addEpic(epic1); + + subTask1.setName("Первая подзадача").setText("Собрать коробки"); + subTask1.setName("Втоаря подзадача").setText("Упаковать кошку"); + subTask1.setName("Третья подзадача").setText("Сказать слова прощания"); + epic1.setName("Переезд").setText("Перва эпик задача"); + + epic1.setSubTasksIds(List.of(subTask1.id, subTask2.id, subTask3.id)); + subTask1.setEpicId(epic1.id); + subTask2.setEpicId(epic1.id); + subTask3.setEpicId(epic1.id); + + // Создаём вторую эпик задачу + SubTask subTask4 = new SubTask(); + Epic epic2 = new Epic(); + + tm.addSubTask(subTask4); + tm.addEpic(epic2); + + subTask4.setName("Небольшое дело").setText("закончить программу"); + epic2.setName("Вторая эпик задача").setText("Описание задачи"); + + epic2.setSubTasksIds(List.of(subTask4.id)); + subTask4.setEpicId(epic2.id); + + // Изменяем статусы созданных объектов и печатаем их + SubTask st1 = tm.getEpicSubTasks(epic1.id).get(0); + SubTask st2 = tm.getEpicSubTasks(epic1.id).get(1); + SubTask st3 = tm.getEpicSubTasks(epic2.id).get(0); + st1.setStatus(Status.IN_PROGRESS); + st2.setStatus(Status.DONE); + st3.setStatus(Status.DONE); + tm.updateSubTask(st1); + tm.updateSubTask(st2); + tm.updateSubTask(st3); + + // Печатаем всё + printAllTasks(tm); + + // Теты + System.out.println("Автотесты:"); + + // Проверяем - статус подзадачи изменился + Status status; + status = tm.getSubTask(st1.id).getStatus(); + if (status == Status.IN_PROGRESS) + System.out.println("✅ - Статус подзадачи успешно изменился на: " + status); + else + System.out.println("❌ - Ошибка проверки изменения статуса - 1"); + + status = tm.getSubTask(st2.id).getStatus(); + if (status == Status.DONE) + System.out.println("✅ - Статус подзадачи успешно изменился на: " + status); + else + System.out.println("❌ - Ошибка проверки изменения статуса - 2"); + + status = tm.getSubTask(st3.id).getStatus(); + if (status == Status.DONE) + System.out.println("✅ - Статус подзадачи успешно изменился на: " + status); + else + System.out.println("❌ - Ошибка проверки изменения статуса - 3"); + + // Проверяем - статус эпика 1 изменился + status = tm.getEpic(epic1.id).getStatus(); + if (status == Status.IN_PROGRESS) + System.out.println("✅ - Статус эпичной задачи 1 успешно изменился на: " + status); + else + System.out.println("❌ - Ошибка изменения статуса эпичной задачи"); + + // Проверяем - статус эпика 2 изменился + status = tm.getEpic(epic2.id).getStatus(); + if (status == Status.DONE) + System.out.println("✅ - Статус эпичной задачи 2 успешно изменился на: " + status); + else + System.out.println("❌ - Ошибка изменения статуса эпичной задачи"); + + // Удалим одну задачу из эпика + List st = tm.getEpicSubTasks(epic1.id); + int stSize = st.size(); + tm.deleteSubTask(st.get(0).id); + if (tm.getEpicSubTasks(epic1.id).size() == --stSize) + System.out + .println("✅ - Успешно удалена задача из эпика. В эпике осталось " + stSize + " задач. Все верно."); + else + System.out.println("❌ - Ошибка удаления задачи из эпика"); + + // Удаляем один эпик + tm.deleteEpic(epic2.id); + if (tm.getEpic(epic2.id) == null) + System.out.println("✅ - Эпик задачи успешно удаляются"); + else + System.out.println("❌ - Ошибка удаления эпик задачи"); + } + + private static void printAllTasks(TaskManager manager) { + System.out.println("Задачи:"); + for (Task task : manager.getTasks()) { + System.out.println(task); + } + System.out.println("Эпики:"); + for (Task epic : manager.getEpics()) { + System.out.println(epic); + + for (Task task : manager.getEpicSubTasks(epic.id)) { + System.out.println("--> " + task); + } + } + System.out.println("Подзадачи:"); + for (Task subtask : manager.getSubTasks()) { + System.out.println(subtask); + } + + System.out.println("История:"); + for (Task task : manager.getHistoryManager().getHistory()) { + System.out.println(task); + } } } diff --git a/src/ru/alexgur/kanban/service/HistoryManager.java b/src/ru/alexgur/kanban/service/HistoryManager.java index 58c8cf3..246c9c3 100644 --- a/src/ru/alexgur/kanban/service/HistoryManager.java +++ b/src/ru/alexgur/kanban/service/HistoryManager.java @@ -8,7 +8,7 @@ public interface HistoryManager { void add(Task task); - void clear(); + void remove(int id); List getHistory(); diff --git a/src/ru/alexgur/kanban/service/InMemoryHistoryManager.java b/src/ru/alexgur/kanban/service/InMemoryHistoryManager.java index c350e8c..2f125cd 100644 --- a/src/ru/alexgur/kanban/service/InMemoryHistoryManager.java +++ b/src/ru/alexgur/kanban/service/InMemoryHistoryManager.java @@ -1,21 +1,26 @@ package ru.alexgur.kanban.service; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import ru.alexgur.kanban.model.Task; public class InMemoryHistoryManager implements HistoryManager { + private Node head; + private Node tail; + private HashMap history = new HashMap<>(); - public static final int HISTORY_MAX_SIZE = 10; - - private ArrayList history = new ArrayList<>(); - - @Override public void clear() { clearImpl(); } + @Override + public void remove(int id) { + removeImpl(id); + } + @Override public void add(Task task) { addImpl(task); @@ -23,25 +28,119 @@ public void add(Task task) { @Override public List getHistory() { - return getHistoryImpl(); + List listTasks = new ArrayList<>(); + for (Node node : getTasks()) { + listTasks.add(node.getTask()); + } + return listTasks; + } + + private Node linkLast(Task task) { + final Node oldtail = tail; + final Node newNode = new Node(oldtail, task, null); + tail = newNode; + if (oldtail == null) { + head = newNode; + } else { + oldtail.setNext(newNode); + } + return newNode; + } + + private ArrayList getTasks() { + ArrayList nodes = new ArrayList<>(); + Node currentNode = head; + while (currentNode != null) { + nodes.add(currentNode); + currentNode = currentNode.getNext(); + } + Collections.reverse(nodes); + return nodes; } private void addImpl(Task task) { if (task != null) { - history.add(task); - if (history.size() > HISTORY_MAX_SIZE) { - history.remove(0); + if (history.containsKey(task.getId())) { + Node node = history.remove(task.getId()); + removeNode(node); } + Node node = linkLast(task); + history.put(task.getId(), node); } } - private List getHistoryImpl() { - List res = history; - return List.copyOf(res); + private void removeNode(Node node) { + Node prev = node.getPrev(); + Node next = node.getNext(); + + if (prev != null && next != null) { + // Удаляетяся элемент в середине списка + next.setPrev(prev); + prev.setNext(next); + } else if (prev == null && next != null) { + // Удаляетяся первый элемент + head = next; + next.setPrev(null); + } else if (prev != null && next == null) { + // Удаляетяся последний элемент + tail = prev; + prev.setNext(null); + } + + history.remove(node.getTask().getId()); + } + + private void removeImpl(int id) { + history.remove(id); } private void clearImpl() { + head = null; + tail = null; history.clear(); } + private class Node { + private Task task; + private Node next; + private Node prev; + + public Node(Node prev, Task task, Node next) { + this.task = task; + this.next = next; + this.prev = prev; + } + + @Override + public int hashCode() { + return task.hashCode(); + } + + @Override + public boolean equals(Object obj) { + Node other = (Node) obj; + return task.equals(other.task); + } + + public Task getTask() { + return task; + } + + public Node getNext() { + return next; + } + + public void setNext(Node next) { + this.next = next; + } + + public Node getPrev() { + return prev; + } + + public void setPrev(Node prev) { + this.prev = prev; + } + } + } diff --git a/src/ru/alexgur/kanban/service/InMemoryTaskManager.java b/src/ru/alexgur/kanban/service/InMemoryTaskManager.java index 3a3a788..786a3ec 100644 --- a/src/ru/alexgur/kanban/service/InMemoryTaskManager.java +++ b/src/ru/alexgur/kanban/service/InMemoryTaskManager.java @@ -1,16 +1,15 @@ package ru.alexgur.kanban.service; import java.util.List; -import java.util.ArrayList; -import java.util.HashMap; import ru.alexgur.kanban.model.Epic; import ru.alexgur.kanban.model.SubTask; import ru.alexgur.kanban.model.Task; +import java.util.ArrayList; +import java.util.HashMap; + public class InMemoryTaskManager implements TaskManager { - - // Ключ хеша совпадает с Task.id, используется для быстрого поиска private HashMap tasks = new HashMap<>(); private HashMap subTasks = new HashMap<>(); private HashMap epics = new HashMap<>(); @@ -169,12 +168,12 @@ private void updateEpicStatus(Epic epic, List subTasks) { Status newStatus; if (isNew) { + // все подзадачи имеют статус NEW или их нет newStatus = Status.NEW; - } // все подзадачи имеют статус NEW или их нет - else if (isDone) { + } else if (isDone) { + // все подзадачи имеют DONE newStatus = Status.DONE; - } // все подзадачи имеют DONE - else { + } else { newStatus = Status.IN_PROGRESS; } diff --git a/src/ru/alexgur/kanban/tests/Tests.java b/src/ru/alexgur/kanban/tests/Tests.java deleted file mode 100644 index eb273b3..0000000 --- a/src/ru/alexgur/kanban/tests/Tests.java +++ /dev/null @@ -1,467 +0,0 @@ -package ru.alexgur.kanban.tests; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import java.util.ArrayList; -import java.util.List; - -import ru.alexgur.kanban.model.Epic; -import ru.alexgur.kanban.model.SubTask; -import ru.alexgur.kanban.model.Task; -import ru.alexgur.kanban.service.Status; -import ru.alexgur.kanban.service.TaskManager; -import ru.alexgur.kanban.service.HistoryManager; -import ru.alexgur.kanban.service.InMemoryHistoryManager; -import ru.alexgur.kanban.service.Managers; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; - -public class Tests { - private static TaskManager tm; - private static HistoryManager hm; - - @BeforeAll - public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { - tm = Managers.getDefault(); - hm = Managers.getDefaultHistory(); - tm.setHistoryManager(hm); - } - - // проверьте, что экземпляры класса Task равны друг другу; - @Test - public void shouldBeEqualTwoTasks() { - Task task1 = new Task(); - Task task2 = new Task(); - - task1.setName("Название").setText("Описание"); - task2.setName("Название").setText("Описание"); - - Assertions.assertEquals(task1, task2); - } - - // проверьте, что наследники класса Task равны друг другу; - @Test - public void shouldBeEqualTwoSubTasks() { - SubTask subTask1 = new SubTask(); - SubTask subTask2 = new SubTask(); - - subTask1.setName("Название SubTask").setText("Описание SubTask"); - subTask2.setName("Название SubTask").setText("Описание SubTask"); - - Assertions.assertEquals(subTask1, subTask2); - } - - // проверьте, что объект Epic нельзя добавить в самого себя в виде подзадачи; - @Test - public void shouldNotBePossibleToAddEpicAsSubTask() { - Epic epic = new Epic(); - List sbtasks_ids = new ArrayList<>(); - - sbtasks_ids.add(epic.id); - epic.setSubTasksIds(sbtasks_ids); - - Assertions.assertEquals(0, epic.getSubTasksIds().size()); - } - - // проверьте, что объект Subtask нельзя сделать своим же эпиком; - @Test - public void shouldNotBePossibleToSetSubTaskAsItsOwnEpic() { - SubTask subTask = new SubTask(); - - subTask.setEpicId(subTask.id); - - Assertions.assertNotEquals(subTask.id, subTask.getEpicId()); - } - - // убедитесь, что утилитарный класс всегда возвращает проинициализированные и - // готовые к работе экземпляры менеджеров; - @Test - public void shouldReturnInitAndRedyManagers() { - Assertions.assertTrue(Managers.getDefault() instanceof TaskManager); - Assertions.assertTrue(Managers.getDefaultHistory() instanceof HistoryManager); - } - - // проверьте, что InMemoryTaskManager действительно добавляет задачи разного - // типа и может найти их по id; - @Test - public void shouldSaveAllTypesToInMemoryTaskManager() { - Task task = new Task(); - SubTask subTask = new SubTask(); - Epic epic = new Epic(); - - int taskId = tm.addTask(task); - int subTaskId = tm.addSubTask(subTask); - int epicId = tm.addEpic(epic); - - Assertions.assertEquals(task, tm.getTask(taskId)); - Assertions.assertEquals(subTask, tm.getSubTask(subTaskId)); - Assertions.assertEquals(epic, tm.getEpic(epicId)); - } - - // проверьте, что задачи с заданным id и сгенерированным id не конфликтуют - // внутри менеджера; ?????? Это вообще как? - - // создайте тест, в котором проверяется неизменность задачи (по всем полям) при - // добавлении задачи в менеджер - @Test - public void shouldPersistTaskAfterSave() { - Task task = new Task(); - - int taskId = tm.addTask(task); - - Assertions.assertEquals(task, tm.getTask(taskId)); - } - - // убедитесь, что задачи, добавляемые в HistoryManager, сохраняют предыдущую - // версию задачи и её данных. - @Test - public void shouldPersistTaskAfterAddMoreTasks() { - Task task = new Task(); - int taskId = tm.addTask(task); - - tm.addTask(new Task()); - tm.addTask(new Task()); - tm.addTask(new Task()); - tm.addTask(new Task()); - - Assertions.assertEquals(task, tm.getTask(taskId)); - } - - @Test - public void shouldIncrementCountByOneAfterTaskCreate() { - Task task1 = new Task(); - Task task2 = new Task(); - - Assertions.assertEquals(task1.id + 1, task2.id); - } - - @Test - public void shouldCreateTaskAndSetProperies() { - Task task = new Task(); - - task.setName("Название"); - task.setText("Описание"); - - Assertions.assertEquals("Название", task.getName()); - Assertions.assertEquals("Описание", task.getText()); - } - - @Test - public void shouldCreateSubTaskAndSetProperies() { - SubTask subTask = new SubTask(); - - subTask.setName("Название"); - subTask.setText("Описание"); - - Assertions.assertEquals("Название", subTask.getName()); - Assertions.assertEquals("Описание", subTask.getText()); - } - - // проверка добавления в историю и чтения из неё - @Test - public void shouldSaveAndReturnOneRecordFromHistory() { - clearHistory(); - Task task = new Task(); - - int taskId = tm.addTask(task); - tm.getTask(taskId); - List hist = tm.getHistoryManager().getHistory(); - - Assertions.assertEquals(taskId, hist.get(0).id); - Assertions.assertEquals(1, hist.size()); - } - - // проверка добавления в историю и чтения из неё ровно MAX элементов - @Test - public void shouldSaveAndReturnOneRecordsFromHistory() { - clearHistory(); - int max_hist_size = InMemoryHistoryManager.HISTORY_MAX_SIZE; - - for (int i = 0; i < max_hist_size; i++) { - Task task = new Task(); - tm.addTask(task); - tm.getTask(task.id); - } - List hist = tm.getHistoryManager().getHistory(); - - Assertions.assertTrue(max_hist_size == hist.size()); - } - - // проверка добавления в историю и чтения из неё ровно MAX+1 элементов - @Test - public void shouldSaveAndReturnMaxPlusOneRecordFromHistory() { - clearHistory(); - int max_hist_size = InMemoryHistoryManager.HISTORY_MAX_SIZE; - - for (int i = 0; i < max_hist_size + 1; i++) { - Task task = new Task(); - tm.addTask(task); - tm.getTask(task.id); - } - - List hist = tm.getHistoryManager().getHistory(); - Assertions.assertTrue(max_hist_size == hist.size()); - } - - @Test - public void shouldCreateEpicAndAddSubTaskAndSetProperies() { - Epic epic = new Epic(); - SubTask subTask1 = new SubTask(); - SubTask subTask2 = new SubTask(); - List sbtasks_ids = new ArrayList<>(); - - epic.setName("Название Epic").setText("Описание Epic"); - subTask1.setName("Название SubTask").setText("Описание SubTask"); - subTask2.setName("Название SubTask").setText("Описание SubTask"); - sbtasks_ids.add(subTask1.id); - sbtasks_ids.add(subTask2.id); - epic.setSubTasksIds(sbtasks_ids); - - Assertions.assertEquals("Название Epic", epic.getName()); - Assertions.assertEquals("Описание Epic", epic.getText()); - Assertions.assertEquals(2, epic.getSubTasksIds().size()); - } - - @Test - void addToHistory() { - clearHistory(); - Task task = new Task(); - - tm.addTask(task); - tm.getTask(task.id); - final List history = hm.getHistory(); - - assertNotNull(history, "История не пустая."); - assertEquals(1, history.size(), "История не пустая."); - } - - @Test - void addNewTask() { - Task task = new Task(); - - task.setName("Название").setText("Описание"); - final int taskSizeInit = tm.getTasks().size(); - final int taskId = tm.addTask(task); - final Task savedTask = tm.getTask(taskId); - final List tasks = tm.getTasks(); - - assertNotNull(savedTask, "Задача не найдена."); - assertEquals(task, savedTask, "Задачи не совпадают."); - assertNotNull(tasks, "Задачи не возвращаются."); - assertEquals(taskSizeInit+1, tasks.size(), "Неверное количество задач."); - assertEquals(task, tasks.get(tasks.size()-1), "Задачи не совпадают."); - } - - @Test - public void shouldWorkAllTaskTogatherLikeInProduction() { - - // Создаём первую эпик задачу - String[][] subs1 = { - { "Первая подзадача", "Собрать коробки" }, - { "Втоаря подзадача", "Упаковать кошку" }, - { "Третья подзадача", "Сказать слова прощания" } - }; - Epic epic1 = createEpic( - tm, - "Переезд", - "Перва эпик задача", - subs1); - - // Создаём вторую эпик задачу - String[][] subs2 = { - { "Небольшое дело", "закончить программу" } - }; - Epic epic2 = createEpic( - tm, - "Вторая эпик задача", - "Описание задачи", - subs2); - - // Изменяем статусы созданных объектов и печатаем их - SubTask st1 = tm.getEpicSubTasks(epic1.id).get(0); - SubTask st2 = tm.getEpicSubTasks(epic1.id).get(1); - SubTask st3 = tm.getEpicSubTasks(epic2.id).get(0); - st1.setStatus(Status.IN_PROGRESS); - st2.setStatus(Status.DONE); - st3.setStatus(Status.DONE); - tm.updateSubTask(st1); - tm.updateSubTask(st2); - tm.updateSubTask(st3); - - // Проверяем - статус подзадачи изменился - Status status; - status = tm.getSubTask(st1.id).getStatus(); - Assertions.assertTrue(status == Status.IN_PROGRESS); - - status = tm.getSubTask(st2.id).getStatus(); - Assertions.assertTrue(status == Status.DONE); - - status = tm.getSubTask(st3.id).getStatus(); - Assertions.assertTrue(status == Status.DONE); - - status = tm.getEpic(epic1.id).getStatus(); - Assertions.assertTrue(status == Status.IN_PROGRESS); - - // Проверяем - статус эпика 2 изменился - status = tm.getEpic(epic2.id).getStatus(); - Assertions.assertTrue(status == Status.DONE); - - // Удалим одну задачу из эпика - List st = tm.getEpicSubTasks(epic1.id); - int st_size = st.size(); - tm.deleteSubTask(st.get(0).id); - Assertions.assertTrue(tm.getEpicSubTasks(epic1.id).size() == --st_size); - - // Удаляем один эпик - tm.deleteEpic(epic2.id); - Assertions.assertTrue(tm.getEpic(epic2.id) == null); - } - - public void startManual() { - - TaskManager tm = Managers.getDefault(); - HistoryManager hm = Managers.getDefaultHistory(); - tm.setHistoryManager(hm); - - // Создаём первую эпик задачу - String[][] subs1 = { - { "Первая подзадача", "Собрать коробки" }, - { "Втоаря подзадача", "Упаковать кошку" }, - { "Третья подзадача", "Сказать слова прощания" } - }; - Epic epic1 = createEpic( - tm, - "Переезд", - "Перва эпик задача", - subs1); - - // Создаём вторую эпик задачу - String[][] subs2 = { - { "Небольшое дело", "закончить программу" } - }; - Epic epic2 = createEpic( - tm, - "Вторая эпик задача", - "Описание задачи", - subs2); - - // Изменяем статусы созданных объектов и печатаем их - SubTask st1 = tm.getEpicSubTasks(epic1.id).get(0); - SubTask st2 = tm.getEpicSubTasks(epic1.id).get(1); - SubTask st3 = tm.getEpicSubTasks(epic2.id).get(0); - st1.setStatus(Status.IN_PROGRESS); - st2.setStatus(Status.DONE); - st3.setStatus(Status.DONE); - tm.updateSubTask(st1); - tm.updateSubTask(st2); - tm.updateSubTask(st3); - - // Печатаем всё - printAllTasks(tm); - - // Теты - System.out.println("Автотесты:"); - - // Проверяем - статус подзадачи изменился - Status status; - status = tm.getSubTask(st1.id).getStatus(); - if (status == Status.IN_PROGRESS) - System.out.println("✅ - Статус подзадачи успешно изменился на: " + status); - else - System.out.println("❌ - Ошибка проверки изменения статуса - 1"); - - status = tm.getSubTask(st2.id).getStatus(); - if (status == Status.DONE) - System.out.println("✅ - Статус подзадачи успешно изменился на: " + status); - else - System.out.println("❌ - Ошибка проверки изменения статуса - 2"); - - status = tm.getSubTask(st3.id).getStatus(); - if (status == Status.DONE) - System.out.println("✅ - Статус подзадачи успешно изменился на: " + status); - else - System.out.println("❌ - Ошибка проверки изменения статуса - 3"); - - // Проверяем - статус эпика 1 изменился - status = tm.getEpic(epic1.id).getStatus(); - if (status == Status.IN_PROGRESS) - System.out.println("✅ - Статус эпичной задачи 1 успешно изменился на: " + status); - else - System.out.println("❌ - Ошибка изменения статуса эпичной задачи"); - - // Проверяем - статус эпика 2 изменился - status = tm.getEpic(epic2.id).getStatus(); - if (status == Status.DONE) - System.out.println("✅ - Статус эпичной задачи 2 успешно изменился на: " + status); - else - System.out.println("❌ - Ошибка изменения статуса эпичной задачи"); - - // Удалим одну задачу из эпика - List st = tm.getEpicSubTasks(epic1.id); - int st_size = st.size(); - tm.deleteSubTask(st.get(0).id); - if (tm.getEpicSubTasks(epic1.id).size() == --st_size) - System.out - .println("✅ - Успешно удалена задача из эпика. В эпике осталось " + st_size + " задач. Все верно."); - else - System.out.println("❌ - Ошибка удаления задачи из эпика"); - - // Удаляем один эпик - tm.deleteEpic(epic2.id); - if (tm.getEpic(epic2.id) == null) - System.out.println("✅ - Эпик задачи успешно удаляются"); - else - System.out.println("❌ - Ошибка удаления эпик задачи"); - } - - private static void printAllTasks(TaskManager manager) { - System.out.println("Задачи:"); - for (Task task : manager.getTasks()) { - System.out.println(task); - } - System.out.println("Эпики:"); - for (Task epic : manager.getEpics()) { - System.out.println(epic); - - for (Task task : manager.getEpicSubTasks(epic.id)) { - System.out.println("--> " + task); - } - } - System.out.println("Подзадачи:"); - for (Task subtask : manager.getSubTasks()) { - System.out.println(subtask); - } - - System.out.println("История:"); - for (Task task : manager.getHistoryManager().getHistory()) { - System.out.println(task); - } - } - - private Epic createEpic(TaskManager tm, String name, String text, String[][] subTaskInfo) { - Epic epic = new Epic(); - epic.setName(name).setText(text); - - List sbtasks_ids = new ArrayList<>(); - for (String[] pair : subTaskInfo) { - SubTask st = new SubTask(); - st.setEpicId(epic.id); - st.setName(pair[0]); - st.setText(pair[1]); - int st_id = tm.addSubTask(st); - sbtasks_ids.add(st_id); - } - epic.setSubTasksIds(sbtasks_ids); - - tm.addEpic(epic); - - return epic; - } - - private void clearHistory() { - tm.getHistoryManager().clear(); - } -} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/MainTest.java b/test/ru/alexgur/kanban/MainTest.java new file mode 100644 index 0000000..5f9d46c --- /dev/null +++ b/test/ru/alexgur/kanban/MainTest.java @@ -0,0 +1,253 @@ +package test.ru.alexgur.kanban; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.model.Epic; +import ru.alexgur.kanban.model.SubTask; +import ru.alexgur.kanban.model.Task; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.InMemoryHistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.Status; +import ru.alexgur.kanban.service.TaskManager; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class MainTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + // Создайте две задачи, эпик с тремя подзадачами и эпик без подзадач. + // Запросите созданные задачи несколько раз в разном порядке. + // После каждого запроса выведите историю и убедитесь, что в ней нет повторов. + @Test + void shouldCreateTwoTasksAndOneEpicWithThreeSubtasksAndOneEptyEpic() { + clearHistory(); + List hist = tm.getHistoryManager().getHistory(); + + Task task1 = new Task(); + tm.addTask(task1); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При создании задачи история просмотров не должна изменяться."); + + Task task2 = new Task(); + tm.addTask(task2); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При создании задачи история просмотров не должна изменяться."); + + Epic epic1 = new Epic(); + tm.addEpic(epic1); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При создании эпик задачи история просмотров не должна изменяться."); + + Epic epic2 = new Epic(); + tm.addEpic(epic2); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При создании эпик задачи история просмотров не должна изменяться."); + + SubTask subTask1 = new SubTask(); + tm.addSubTask(subTask1); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При создании подзадачи история просмотров не должна изменяться."); + + SubTask subTask2 = new SubTask(); + tm.addSubTask(subTask2); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При создании подзадачи история просмотров не должна изменяться."); + + SubTask subTask3 = new SubTask(); + tm.addSubTask(subTask3); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При создании подзадачи история просмотров не должна изменяться."); + + task1.setName("Название1").setText("Описание1"); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При изменении параметров задачи история просмотров не должна изменяться."); + + task2.setName("Название2").setText("Описание2"); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При изменении параметров задачи история просмотров не должна изменяться."); + + epic1.setName("Название Epic 1").setText("Описание Epic 1"); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При изменении параметров эпик задачи история просмотров не должна изменяться."); + + epic2.setName("Название Epic 2").setText("Описание Epic 2"); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При изменении параметров эпик задачи история просмотров не должна изменяться."); + + subTask1.setName("Название SubTask 1").setText("Описание SubTask 1"); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При изменении параметров подзадачи история просмотров не должна изменяться."); + + subTask2.setName("Название SubTask 2").setText("Описание SubTask 2"); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При изменении параметров подзадачи история просмотров не должна изменяться."); + + subTask3.setName("Название SubTask 3").setText("Описание SubTask 3"); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При изменении параметров подзадачи история просмотров не должна изменяться."); + + List sbTasksIds = new ArrayList<>(); + sbTasksIds.add(subTask1.id); + sbTasksIds.add(subTask2.id); + sbTasksIds.add(subTask3.id); + epic1.setSubTasksIds(sbTasksIds); + subTask1.setEpicId(epic1.id); + subTask2.setEpicId(epic1.id); + subTask3.setEpicId(epic1.id); + hist = tm.getHistoryManager().getHistory(); + assertEquals(hist.size(), 0, "При добавлении подзадачи к эпику история просмотров не должна изменяться."); + + tm.getTask(task1.id); + hist = tm.getHistoryManager().getHistory(); + assertTrue(hist.get(0).equals(task1)); + assertTrue(hist.size() == 1); + + tm.getTask(task2.id); + hist = tm.getHistoryManager().getHistory(); + assertTrue(hist.get(0).equals(task2)); + assertTrue(hist.get(1).equals(task1)); + assertTrue(hist.size() == 2); + + clearHistory(); + + tm.getTask(task2.id); + hist = tm.getHistoryManager().getHistory(); + assertTrue(hist.get(0).equals(task2)); + assertTrue(hist.size() == 1); + + tm.getTask(task1.id); + hist = tm.getHistoryManager().getHistory(); + assertTrue(hist.get(0).equals(task1)); + assertTrue(hist.get(1).equals(task2)); + assertTrue(hist.size() == 2); + + clearHistory(); + + tm.getTask(task1.id); + tm.getTask(task2.id); + tm.getTask(task1.id); + hist = tm.getHistoryManager().getHistory(); + assertTrue(hist.get(0).equals(task1)); + assertTrue(hist.get(1).equals(task2)); + assertTrue(hist.size() == 2); + + clearHistory(); + + tm.getTask(task1.id); + tm.getTask(task2.id); + tm.getTask(task1.id); + tm.getEpic(epic2.id); + tm.getSubTask(subTask2.id); + tm.getSubTask(subTask1.id); + tm.getEpic(epic1.id); + tm.getTask(task1.id); + tm.getEpic(epic2.id); + hist = tm.getHistoryManager().getHistory(); + + assertTrue(hist.get(0).equals(epic2)); + assertTrue(hist.get(1).equals(task1)); + assertTrue(hist.get(2).equals(epic1)); + assertTrue(hist.get(3).equals(subTask1)); + assertTrue(hist.get(4).equals(subTask2)); + assertTrue(hist.get(5).equals(task2)); + assertTrue(hist.size() == 6); + } + + @Test + public void shouldWorkAllTaskTogatherLikeInProduction() { + + // Создаём первую эпик задачу + SubTask subTask1 = new SubTask(); + SubTask subTask2 = new SubTask(); + SubTask subTask3 = new SubTask(); + Epic epic1 = new Epic(); + + tm.addSubTask(subTask1); + tm.addSubTask(subTask2); + tm.addSubTask(subTask3); + tm.addEpic(epic1); + + subTask1.setName("Первая подзадача").setText("Собрать коробки"); + subTask1.setName("Втоаря подзадача").setText("Упаковать кошку"); + subTask1.setName("Третья подзадача").setText("Сказать слова прощания"); + epic1.setName("Переезд").setText("Перва эпик задача"); + + epic1.setSubTasksIds(List.of(subTask1.id, subTask2.id, subTask3.id)); + subTask1.setEpicId(epic1.id); + subTask2.setEpicId(epic1.id); + subTask3.setEpicId(epic1.id); + + // Создаём вторую эпик задачу + SubTask subTask4 = new SubTask(); + Epic epic2 = new Epic(); + + tm.addSubTask(subTask4); + tm.addEpic(epic2); + + subTask4.setName("Небольшое дело").setText("закончить программу"); + epic2.setName("Вторая эпик задача").setText("Описание задачи"); + + epic2.setSubTasksIds(List.of(subTask4.id)); + subTask4.setEpicId(epic2.id); + + // Изменяем статусы созданных объектов и печатаем их + SubTask st1 = tm.getEpicSubTasks(epic1.id).get(0); + SubTask st2 = tm.getEpicSubTasks(epic1.id).get(1); + SubTask st3 = tm.getEpicSubTasks(epic2.id).get(0); + st1.setStatus(Status.IN_PROGRESS); + st2.setStatus(Status.DONE); + st3.setStatus(Status.DONE); + tm.updateSubTask(st1); + tm.updateSubTask(st2); + tm.updateSubTask(st3); + + // Проверяем - статус подзадачи изменился + Status status; + status = tm.getSubTask(st1.id).getStatus(); + Assertions.assertTrue(status == Status.IN_PROGRESS); + + status = tm.getSubTask(st2.id).getStatus(); + Assertions.assertTrue(status == Status.DONE); + + status = tm.getSubTask(st3.id).getStatus(); + Assertions.assertTrue(status == Status.DONE); + + status = tm.getEpic(epic1.id).getStatus(); + Assertions.assertTrue(status == Status.IN_PROGRESS); + + // Проверяем - статус эпика 2 изменился + status = tm.getEpic(epic2.id).getStatus(); + Assertions.assertTrue(status == Status.DONE); + + // Удалим одну задачу из эпика + List st = tm.getEpicSubTasks(epic1.id); + int stSize = st.size(); + tm.deleteSubTask(st.get(0).id); + Assertions.assertTrue(tm.getEpicSubTasks(epic1.id).size() == --stSize); + + // Удаляем один эпик + tm.deleteEpic(epic2.id); + Assertions.assertTrue(tm.getEpic(epic2.id) == null); + } + + private void clearHistory() { + InMemoryHistoryManager thm = (InMemoryHistoryManager) tm.getHistoryManager(); + thm.clear(); + } +} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/model/EpicTest.java b/test/ru/alexgur/kanban/model/EpicTest.java new file mode 100644 index 0000000..d5b88a7 --- /dev/null +++ b/test/ru/alexgur/kanban/model/EpicTest.java @@ -0,0 +1,58 @@ +package test.ru.alexgur.kanban.model; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.model.Epic; +import ru.alexgur.kanban.model.SubTask; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.TaskManager; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class EpicTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + @Test + public void shouldCreateEpicAndAddSubTaskAndSetProperies() { + Epic epic = new Epic(); + SubTask subTask1 = new SubTask(); + SubTask subTask2 = new SubTask(); + List sbTasksIds = new ArrayList<>(); + + epic.setName("Название Epic").setText("Описание Epic"); + subTask1.setName("Название SubTask").setText("Описание SubTask"); + subTask2.setName("Название SubTask").setText("Описание SubTask"); + sbTasksIds.add(subTask1.id); + sbTasksIds.add(subTask2.id); + epic.setSubTasksIds(sbTasksIds); + + Assertions.assertEquals("Название Epic", epic.getName()); + Assertions.assertEquals("Описание Epic", epic.getText()); + Assertions.assertEquals(2, epic.getSubTasksIds().size()); + } + + // проверьте, что объект Epic нельзя добавить в самого себя в виде подзадачи; + @Test + public void shouldNotBePossibleToAddEpicAsSubTask() { + Epic epic = new Epic(); + List sbTasksIds = new ArrayList<>(); + + sbTasksIds.add(epic.id); + epic.setSubTasksIds(sbTasksIds); + + Assertions.assertEquals(0, epic.getSubTasksIds().size()); + } +} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/model/SubTaskTest.java b/test/ru/alexgur/kanban/model/SubTaskTest.java new file mode 100644 index 0000000..a177847 --- /dev/null +++ b/test/ru/alexgur/kanban/model/SubTaskTest.java @@ -0,0 +1,44 @@ +package test.ru.alexgur.kanban.model; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.model.SubTask; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.TaskManager; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class SubTaskTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + @Test + public void shouldCreateSubTaskAndSetProperies() { + SubTask subTask = new SubTask(); + + subTask.setName("Название"); + subTask.setText("Описание"); + + Assertions.assertEquals("Название", subTask.getName()); + Assertions.assertEquals("Описание", subTask.getText()); + } + + // проверьте, что объект Subtask нельзя сделать своим же эпиком; + @Test + public void shouldNotBePossibleToSetSubTaskAsItsOwnEpic() { + SubTask subTask = new SubTask(); + + subTask.setEpicId(subTask.id); + + Assertions.assertNotEquals(subTask.id, subTask.getEpicId()); + } +} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/model/TaskTest.java b/test/ru/alexgur/kanban/model/TaskTest.java new file mode 100644 index 0000000..560f850 --- /dev/null +++ b/test/ru/alexgur/kanban/model/TaskTest.java @@ -0,0 +1,90 @@ +package test.ru.alexgur.kanban.model; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.model.SubTask; +import ru.alexgur.kanban.model.Task; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.TaskManager; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.util.List; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class TaskTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + @Test + public void shouldIncrementCountByOneAfterTaskCreate() { + Task task1 = new Task(); + Task task2 = new Task(); + + Assertions.assertEquals(task1.id + 1, task2.id); + } + + @Test + public void shouldCreateTaskAndSetProperies() { + Task task = new Task(); + + task.setName("Название"); + task.setText("Описание"); + + Assertions.assertEquals("Название", task.getName()); + Assertions.assertEquals("Описание", task.getText()); + } + + // проверьте, что экземпляры класса Task равны друг другу; + @Test + public void shouldBeEqualTwoTasks() { + Task task1 = new Task(); + Task task2 = new Task(); + + task1.setName("Название").setText("Описание"); + task2.setName("Название").setText("Описание"); + + Assertions.assertEquals(task1, task2); + } + + @Test + void addNewTask() { + Task task = new Task(); + + task.setName("Название").setText("Описание"); + final int taskSizeInit = tm.getTasks().size(); + final int taskId = tm.addTask(task); + final Task savedTask = tm.getTask(taskId); + final List tasks = tm.getTasks(); + + assertNotNull(savedTask, "Задача не найдена."); + assertEquals(task, savedTask, "Задачи не совпадают."); + assertNotNull(tasks, "Задачи не возвращаются."); + assertEquals(taskSizeInit + 1, tasks.size(), "Неверное количество задач."); + assertEquals(task, tasks.get(tasks.size() - 1), "Задачи не совпадают."); + } + + // проверьте, что наследники класса Task равны друг другу; + @Test + public void shouldBeEqualTwoSubTasks() { + SubTask subTask1 = new SubTask(); + SubTask subTask2 = new SubTask(); + + subTask1.setName("Название SubTask").setText("Описание SubTask"); + subTask2.setName("Название SubTask").setText("Описание SubTask"); + + Assertions.assertEquals(subTask1, subTask2); + } + +} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/service/HistoryManagerTest.java b/test/ru/alexgur/kanban/service/HistoryManagerTest.java new file mode 100644 index 0000000..25ca099 --- /dev/null +++ b/test/ru/alexgur/kanban/service/HistoryManagerTest.java @@ -0,0 +1,38 @@ +package test.ru.alexgur.kanban.service; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.model.Task; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.TaskManager; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class HistoryManagerTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + // убедитесь, что задачи, добавляемые в HistoryManager, сохраняют предыдущую + // версию задачи и её данных. + @Test + public void shouldPersistTaskAfterAddMoreTasks() { + Task task = new Task(); + int taskId = tm.addTask(task); + + tm.addTask(new Task()); + tm.addTask(new Task()); + tm.addTask(new Task()); + tm.addTask(new Task()); + + Assertions.assertEquals(task, tm.getTask(taskId)); + } +} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/service/InMemoryHistoryManagerTest.java b/test/ru/alexgur/kanban/service/InMemoryHistoryManagerTest.java new file mode 100644 index 0000000..120e388 --- /dev/null +++ b/test/ru/alexgur/kanban/service/InMemoryHistoryManagerTest.java @@ -0,0 +1,92 @@ +package test.ru.alexgur.kanban.service; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.util.List; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.model.Task; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.InMemoryHistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.TaskManager; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class InMemoryHistoryManagerTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + // проверка добавления в историю и чтения из неё + @Test + public void shouldSaveAndReturnOneRecordFromHistory() { + clearHistory(); + Task task = new Task(); + + int taskId = tm.addTask(task); + tm.getTask(taskId); + List hist = tm.getHistoryManager().getHistory(); + + Assertions.assertEquals(taskId, hist.get(0).id); + Assertions.assertEquals(1, hist.size()); + } + + // проверка добавления в историю и чтения из неё ровно 10 элементов + @Test + public void shouldSaveAndReturnTenRecordsFromHistory() { + clearHistory(); + int maxHistSize = 10; + + for (int i = 0; i < maxHistSize; i++) { + Task task = new Task(); + tm.addTask(task); + tm.getTask(task.id); + } + List hist = tm.getHistoryManager().getHistory(); + + Assertions.assertTrue(maxHistSize == hist.size()); + } + + // проверка добавления в историю и чтения из неё ровно 10+1 элементов + @Test + public void shouldSaveAndReturnTenPlusOneRecordFromHistory() { + clearHistory(); + int maxHistSize = 10; + + for (int i = 0; i < maxHistSize + 1; i++) { + Task task = new Task(); + tm.addTask(task); + tm.getTask(task.id); + } + + List hist = tm.getHistoryManager().getHistory(); + Assertions.assertTrue(maxHistSize + 1 == hist.size()); + } + + @Test + void addToHistory() { + clearHistory(); + Task task = new Task(); + + tm.addTask(task); + tm.getTask(task.id); + final List history = hm.getHistory(); + + assertNotNull(history, "История не пустая."); + assertEquals(1, history.size(), "История не пустая."); + } + + private void clearHistory() { + InMemoryHistoryManager thm = (InMemoryHistoryManager) tm.getHistoryManager(); + thm.clear(); + } +} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/service/InMemoryTaskManagerTest.java b/test/ru/alexgur/kanban/service/InMemoryTaskManagerTest.java new file mode 100644 index 0000000..9d83053 --- /dev/null +++ b/test/ru/alexgur/kanban/service/InMemoryTaskManagerTest.java @@ -0,0 +1,57 @@ +package test.ru.alexgur.kanban.service; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.model.Epic; +import ru.alexgur.kanban.model.SubTask; +import ru.alexgur.kanban.model.Task; +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.TaskManager; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class InMemoryTaskManagerTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + // создайте тест, в котором проверяется неизменность задачи (по всем полям) при + // добавлении задачи в менеджер + @Test + public void shouldPersistTaskAfterSave() { + Task task = new Task(); + + int taskId = tm.addTask(task); + + Assertions.assertEquals(task, tm.getTask(taskId)); + } + + // проверьте, что InMemoryTaskManager действительно добавляет задачи разного + // типа и может найти их по id; + @Test + public void shouldSaveAllTypesToInMemoryTaskManager() { + Task task = new Task(); + SubTask subTask = new SubTask(); + Epic epic = new Epic(); + + int taskId = tm.addTask(task); + int subTaskId = tm.addSubTask(subTask); + int epicId = tm.addEpic(epic); + + Assertions.assertEquals(task, tm.getTask(taskId)); + Assertions.assertEquals(subTask, tm.getSubTask(subTaskId)); + Assertions.assertEquals(epic, tm.getEpic(epicId)); + } + + // проверьте, что задачи с заданным id и сгенерированным id не конфликтуют + // внутри менеджера; ?????? Это вообще как? + +} \ No newline at end of file diff --git a/test/ru/alexgur/kanban/service/ManagersTest.java b/test/ru/alexgur/kanban/service/ManagersTest.java new file mode 100644 index 0000000..2668548 --- /dev/null +++ b/test/ru/alexgur/kanban/service/ManagersTest.java @@ -0,0 +1,30 @@ +package test.ru.alexgur.kanban.service; + +import org.junit.jupiter.api.Test; + +import ru.alexgur.kanban.service.HistoryManager; +import ru.alexgur.kanban.service.Managers; +import ru.alexgur.kanban.service.TaskManager; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; + +public class ManagersTest { + private static TaskManager tm; + private static HistoryManager hm; + + @BeforeAll + public static void createTaskManagerAndHistoryManagerVarsSetHistoryManager() { + tm = Managers.getDefault(); + hm = Managers.getDefaultHistory(); + tm.setHistoryManager(hm); + } + + // убедитесь, что утилитарный класс всегда возвращает проинициализированные и + // готовые к работе экземпляры менеджеров; + @Test + public void shouldReturnInitAndRedyManagers() { + Assertions.assertTrue(Managers.getDefault() instanceof TaskManager); + Assertions.assertTrue(Managers.getDefaultHistory() instanceof HistoryManager); + } +} \ No newline at end of file