diff --git a/src/Main.java b/src/Main.java index 1b69531..381251a 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,14 +1,20 @@ +import managers.FileBackedTaskManager; import statuses.*; import managers.TaskManager; import tasks.*; import util.Managers; +import java.io.File; + public class Main { public static void main(String[] args) { System.out.println("Поехали!"); TaskManager inMemoryTaskManager = Managers.getDefault(); - printHistoryDeleteTaskWorkExample(inMemoryTaskManager); + TaskManager fileBackedTaskManager = Managers.getDefaultFileBackend(); +// printHistoryDeleteTaskWorkExample(inMemoryTaskManager); + printWorkingExampleWithFile(fileBackedTaskManager); +// printWorkingExampleFromFile(file); } private static void printWorkingExample(TaskManager manager) { @@ -120,6 +126,7 @@ private static void printHistoryWorkExample(TaskManager manager) { private static void printHistoryDeleteTaskWorkExample(TaskManager manager) { manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Сделать ДЗ", "Сделать ДЗ за 1 час")); manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 3)); @@ -177,4 +184,80 @@ private static void printHistoryDeleteTaskWorkExample(TaskManager manager) { System.out.println(task); } } + + private static void printWorkingExampleWithFile(TaskManager manager) { + manager.addTask(new Task("Выгулять собаку", "Погулять с Джеком 20 минут")); + manager.addEpic(new Epic("Написать курсовую работу", "Написать курсовую по теме Маркетинг")); + manager.addSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", 2)); + manager.addSubtask(new Subtask("Сформировать содержание", "Автоматически", 2)); + manager.addSubtask(new Subtask("Выполнить практическую часть", "Провести игру", 2)); + manager.addEpic(new Epic("Покрасить волосы", "На праздник")); + manager.addSubtask(new Subtask("Оформить реферат", "Для выступления", 6)); + System.out.println("Задачи:"); + for (Task task : manager.getTasks()) { + System.out.println(task); + } + System.out.println("Эпики:"); + for (Epic epic : manager.getEpics()) { + System.out.println(epic); + } + System.out.println("Подзадачи:"); + for (Subtask subtask : manager.getSubtasks()) { + System.out.println(subtask); + } + manager.updateTask(new Task("Выгулять псину", "Погулять с Джеком 40 минут", 1)); + manager.updateSubtask(new Subtask("Собрать теоретическую часть", "Искать в интернете", StatusTask.DONE, 2, 3)); + System.out.println("После выполнения работ:"); + System.out.println("Задачи:"); + for (Task task : manager.getTasks()) { + System.out.println(task); + } + System.out.println("Эпики:"); + for (Epic epic : manager.getEpics()) { + System.out.println(epic); + } + System.out.println("Подзадачи:"); + for (Subtask subtask : manager.getSubtasks()) { + System.out.println(subtask); + } + manager.deleteSubtask(3); + manager.deleteEpic(2); + manager.updateSubtask(new Subtask("Оформить реферат", "Для выступления", StatusTask.DONE, 6, 7)); + System.out.println("После выполнения работ:"); + System.out.println("Задачи:"); + for (Task task : manager.getTasks()) { + System.out.println(task); + } + System.out.println("Эпики:"); + for (Epic epic : manager.getEpics()) { + System.out.println(epic); + } + System.out.println("Подзадачи:"); + for (Subtask subtask : manager.getSubtasks()) { + System.out.println(subtask); + } + } + + private static void printWorkingExampleFromFile(File file) { + FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(file); + System.out.println("Задачи:"); + for (Task task : manager.getTasks()) { + System.out.println(task); + } + System.out.println("Эпики:"); + for (Epic epic : manager.getEpics()) { + System.out.println(epic); + } + System.out.println("Подзадачи:"); + for (Subtask subtask : manager.getSubtasks()) { + System.out.println(subtask); + } + manager.addTask(new Task("Тест1", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Тест2", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Тест3", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Тест4", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Тест5", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Тест6", "Погулять с Джеком 20 минут")); + manager.addTask(new Task("Тест7", "Погулять с Джеком 20 минут")); + } } diff --git a/src/exceptions/ManagerLoadFromFileException.java b/src/exceptions/ManagerLoadFromFileException.java new file mode 100644 index 0000000..16e12cf --- /dev/null +++ b/src/exceptions/ManagerLoadFromFileException.java @@ -0,0 +1,17 @@ +package exceptions; + +import java.io.File; +import java.util.NoSuchElementException; + +public class ManagerLoadFromFileException extends NoSuchElementException { + File file; + + public ManagerLoadFromFileException(String message, File file) { + super(message); + this.file = file; + } + + public String getDetailMessage() { + return String.format("%s из файла - %s", getMessage(), file.getAbsolutePath()); + } +} diff --git a/src/exceptions/ManagerSaveException.java b/src/exceptions/ManagerSaveException.java new file mode 100644 index 0000000..d1d2cb6 --- /dev/null +++ b/src/exceptions/ManagerSaveException.java @@ -0,0 +1,18 @@ +package exceptions; + +import java.io.File; +import java.util.NoSuchElementException; + +public class ManagerSaveException extends NoSuchElementException { + File file; + + public ManagerSaveException(String message, File file) { + super(message); + this.file = file; + } + + public String getDetailMessage() { + return String.format("%s в файл - %s", getMessage(), file.getAbsolutePath()); + } + +} diff --git a/src/managers/FileBackedTaskManager.java b/src/managers/FileBackedTaskManager.java new file mode 100644 index 0000000..1ff4866 --- /dev/null +++ b/src/managers/FileBackedTaskManager.java @@ -0,0 +1,168 @@ +package managers; + +import exceptions.ManagerLoadFromFileException; +import exceptions.ManagerSaveException; +import tasks.Epic; +import tasks.Subtask; +import tasks.Task; +import tasks.TaskType; + +import java.io.*; +import java.util.ArrayList; + +public class FileBackedTaskManager extends InMemoryTaskManager { + + private final File managerFile; + + public FileBackedTaskManager(String path) { + this.managerFile = new File(path); + } + + public FileBackedTaskManager(File manager) { + this.managerFile = manager; + } + + public FileBackedTaskManager() { + this.managerFile = new File("manager.csv"); + } + + @Override + public void addTask(Task task) { + super.addTask(task); + save(); + } + + @Override + public void addSubtask(Subtask subtask) { + super.addSubtask(subtask); + save(); + } + + @Override + public void addEpic(Epic epic) { + super.addEpic(epic); + save(); + } + + @Override + public void deleteTask(int id) { + super.deleteTask(id); + save(); + } + + @Override + public void deleteSubtask(int id) { + super.deleteSubtask(id); + save(); + } + + @Override + public void deleteEpic(int id) { + super.deleteEpic(id); + save(); + } + + @Override + public void clearTasks() { + super.clearTasks(); + save(); + } + + @Override + public void clearSubtasks() { + super.clearSubtasks(); + save(); + } + + @Override + public void clearEpics() { + super.clearEpics(); + } + + @Override + public void updateTask(Task task) { + super.updateTask(task); + save(); + } + + @Override + public void updateSubtask(Subtask subtask) { + super.updateSubtask(subtask); + save(); + } + + @Override + public void updateEpic(Epic epic) { + super.updateEpic(epic); + save(); + } + + public File getManagerFile() { + return this.managerFile; + } + + public static FileBackedTaskManager loadFromFile(File file) throws ManagerLoadFromFileException { + try (BufferedReader buffer = new BufferedReader(new FileReader(file))) { + FileBackedTaskManager manager = new FileBackedTaskManager(); + ArrayList tasks = new ArrayList<>(buffer.lines().toList()); + String header = "id,type,name,status,description,epic"; + tasks.remove(header); + for (String task : tasks) { + String[] taskInfo = task.split(","); + switch (TaskType.valueOf(taskInfo[1])) { + case TaskType.TASK: + manager.addTask(Task.fromString(task)); + break; + case TaskType.SUBTASK: + manager.addSubtask(Subtask.fromString(task)); + break; + case TaskType.EPIC: + manager.addEpic(Epic.fromString(task)); + break; + default: + System.out.println("Не определена задача в файле"); + } + } + return manager; + } catch (IOException e) { + throw new ManagerLoadFromFileException("Возникла ошибка при загрузке данных из файла", file); + } + } + + + private void save() throws ManagerSaveException { + try (FileWriter writer = new FileWriter(managerFile)) { + String header = "id,type,name,status,description,epic\n"; + writer.write(header); + for (Task task : getTasks()) { + writer.write(String.format("%s\n", task.toString())); + } + + for (Epic epic : getEpics()) { + writer.write(String.format("%s\n", epic.toString())); + } + + for (Subtask subtask : getSubtasks()) { + writer.write(String.format("%s\n", subtask.toString())); + } + } catch (IOException e) { + throw new ManagerSaveException("Возникла ошибка при автосохранении менеджера", managerFile); + } + } + + public static void main(String[] args) { + FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(new File("manager.csv")); + System.out.println("Задачи:"); + for (Task task : manager.getTasks()) { + System.out.println(task); + } + System.out.println("Эпики:"); + for (Epic epic : manager.getEpics()) { + System.out.println(epic); + } + System.out.println("Подзадачи:"); + for (Subtask subtask : manager.getSubtasks()) { + System.out.println(subtask); + } + } +} diff --git a/src/managers/InMemoryTaskManager.java b/src/managers/InMemoryTaskManager.java index 5bbc012..1af140a 100644 --- a/src/managers/InMemoryTaskManager.java +++ b/src/managers/InMemoryTaskManager.java @@ -74,12 +74,16 @@ public List getHistory() { @Override public void addTask(Task task) { - if (checkNotContainsTask(task)) { - taskId++; - task.setId(taskId); + if (task.getId() == 0) { + do { + taskId++; + task.setId(taskId); + } while (checkContainsAllTasks(task)); + tasks.put(taskId, task); + } else if (!checkContainsAllTasks(task)) { tasks.put(task.getId(), task); } else { - System.out.println("Данная задача уже существует в списке!"); + System.out.println("Данные с таким id существуют в списке"); } } @@ -87,14 +91,20 @@ public void addTask(Task task) { public void addSubtask(Subtask subtask) { Epic epic = epics.get(subtask.getEpicId()); if (epic != null) { - if (checkNotContainsSubtask(subtask)) { - taskId++; - subtask.setId(taskId); + if (subtask.getId() == 0) { + do { + taskId++; + subtask.setId(taskId); + } while (checkContainsAllTasks(subtask)); subtasks.put(taskId, subtask); epic.addSubtask(subtask); updateEpicStatus(subtask.getEpicId()); + } else if (!checkContainsAllTasks(subtask)) { + subtasks.put(subtask.getId(), subtask); + epic.addSubtask(subtask); + updateEpicStatus(subtask.getEpicId()); } else { - System.out.println("Данная подзадача уже существует в списке!"); + System.out.println("Данные с таким id существуют в списке"); } } else { System.out.println("Эпик не существует. Подзадачу невозможно создать без эпика"); @@ -103,15 +113,20 @@ public void addSubtask(Subtask subtask) { @Override public void addEpic(Epic epic) { - if (checkNotContainsEpic(epic)) { - taskId++; - epic.setId(taskId); + if (epic.getId() == 0) { + do { + taskId++; + epic.setId(taskId); + } while (checkContainsAllTasks(epic)); epics.put(taskId, epic); + } else if (!checkContainsAllTasks(epic)) { + epics.put(epic.getId(), epic); } else { - System.out.println("Данный эпик уже существует в списке!"); + System.out.println("Данные с таким id существуют в списке"); } } + @Override public void deleteTask(int id) { tasks.remove(id); @@ -213,25 +228,11 @@ public void updateEpic(Epic epic) { epics.put(id, epic); } - private boolean checkNotContainsTask(Task task) { + private boolean checkContainsAllTasks(T task) { if (task == null) { return false; } - return !tasks.containsKey(task.getId()) && task.getId() == 0; - } - - private boolean checkNotContainsSubtask(Subtask subtask) { - if (subtask == null) { - return false; - } - return !subtasks.containsKey(subtask.getId()) && subtask.getId() == 0; - } - - private boolean checkNotContainsEpic(Epic epic) { - if (epic == null) { - return false; - } - return !epics.containsKey(epic.getId()) && epic.getId() == 0; + return tasks.containsKey(task.getId()) || subtasks.containsKey(task.getId()) || epics.containsKey(task.getId()); } private void updateEpicStatus(int epicId) { diff --git a/src/managers/TaskManager.java b/src/managers/TaskManager.java index 6f680c2..e3389cb 100644 --- a/src/managers/TaskManager.java +++ b/src/managers/TaskManager.java @@ -1,6 +1,7 @@ package managers; import tasks.*; + import java.util.ArrayList; import java.util.List; diff --git a/src/tasks/Epic.java b/src/tasks/Epic.java index 6936c17..4a2a247 100644 --- a/src/tasks/Epic.java +++ b/src/tasks/Epic.java @@ -1,11 +1,18 @@ package tasks; +import statuses.StatusTask; + import java.util.ArrayList; -import java.util.StringJoiner; public class Epic extends Task { + protected TaskType type = TaskType.EPIC; private ArrayList subtasks; + public Epic(String name, String description, StatusTask status, int id) { + super(name, description, status, id); + this.subtasks = new ArrayList<>(); + } + public Epic(String name, String description, int id) { super(name, description, id); this.subtasks = new ArrayList<>(); @@ -41,15 +48,14 @@ public void setSubtasks(ArrayList subtasks) { this.subtasks = subtasks; } + public static Epic fromString(String value) { + String[] taskInfo = value.split(","); + return new Epic(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + } + @Override public String toString() { - return new StringJoiner(", ", Epic.class.getSimpleName() + "[", "]") - .add("id=" + id) - .add("name='" + name + "'") - .add("description='" + description + "'") - .add("subtasks size=" + subtasks.size()) - .add("status=" + status) - .toString(); + return String.format("%d,%s,%s,%s,%s,", id, type, name, status, description); } private boolean checkNotContainsSubtask(Subtask subtask) { diff --git a/src/tasks/Subtask.java b/src/tasks/Subtask.java index cd74d67..2644e9b 100644 --- a/src/tasks/Subtask.java +++ b/src/tasks/Subtask.java @@ -1,9 +1,9 @@ package tasks; -import java.util.StringJoiner; import statuses.StatusTask; public class Subtask extends Task { + protected TaskType type = TaskType.SUBTASK; private int epicId; public Subtask(String name, String description, StatusTask status, int epicId, int id) { @@ -34,14 +34,14 @@ public void setEpicId(int epicId) { this.epicId = epicId; } + public static Subtask fromString(String value) { + String[] taskInfo = value.split(","); + return new Subtask(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[5]), + Integer.parseInt(taskInfo[0])); + } + @Override public String toString() { - return new StringJoiner(", ", Subtask.class.getSimpleName() + "[", "]") - .add("id=" + id) - .add("epicId=" + epicId) - .add("name='" + name + "'") - .add("description='" + description + "'") - .add("status=" + status) - .toString(); + return String.format("%d,%s,%s,%s,%s,%d", id, type, name, status, description, epicId); } } diff --git a/src/tasks/Task.java b/src/tasks/Task.java index 4bd5cf2..640a8cf 100644 --- a/src/tasks/Task.java +++ b/src/tasks/Task.java @@ -1,14 +1,15 @@ package tasks; import statuses.StatusTask; + import java.util.Objects; -import java.util.StringJoiner; public class Task { protected String name; protected String description; protected StatusTask status; protected int id; + protected TaskType type = TaskType.TASK; public Task(String name, String description, StatusTask status, int id) { this.name = name; @@ -68,14 +69,15 @@ public void setStatus(StatusTask status) { this.status = status; } + + public static Task fromString(String value) { + String[] taskInfo = value.split(","); + return new Task(taskInfo[2], taskInfo[4], StatusTask.valueOf(taskInfo[3]), Integer.parseInt(taskInfo[0])); + } + @Override public String toString() { - return new StringJoiner(", ", Task.class.getSimpleName() + "[", "]") - .add("id=" + id) - .add("name='" + name + "'") - .add("description='" + description + "'") - .add("status=" + status) - .toString(); + return String.format("%d,%s,%s,%s,%s,", id, type, name, status, description); } @Override diff --git a/src/tasks/TaskType.java b/src/tasks/TaskType.java new file mode 100644 index 0000000..f054232 --- /dev/null +++ b/src/tasks/TaskType.java @@ -0,0 +1,7 @@ +package tasks; + +public enum TaskType { + TASK, + SUBTASK, + EPIC +} diff --git a/src/util/Managers.java b/src/util/Managers.java index 954985f..94c1204 100644 --- a/src/util/Managers.java +++ b/src/util/Managers.java @@ -13,4 +13,8 @@ public static HistoryManager getDefaultHistory() { return new InMemoryHistoryManager(); } + public static TaskManager getDefaultFileBackend() { + return new FileBackedTaskManager(); + } + } diff --git a/test/EpicTest.java b/test/EpicTest.java index a525b00..965f382 100644 --- a/test/EpicTest.java +++ b/test/EpicTest.java @@ -11,12 +11,13 @@ public class EpicTest { Subtask subtask1; Subtask subtask2; Subtask subtask3; + @BeforeEach void setUp() { - epic = new Epic("TestEpic","TestDescription", 1); - subtask1 = new Subtask("TestSubtask1","TestDescription1", StatusTask.NEW, 0, 2); - subtask2 = new Subtask("TestSubtask2","TestDescription2", StatusTask.DONE, 0, 3); - subtask3 = new Subtask("TestSubtask3","TestDescription3", StatusTask.IN_PROGRESS, 0, 4); + epic = new Epic("TestEpic", "TestDescription", 1); + subtask1 = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 0, 2); + subtask2 = new Subtask("TestSubtask2", "TestDescription2", StatusTask.DONE, 0, 3); + subtask3 = new Subtask("TestSubtask3", "TestDescription3", StatusTask.IN_PROGRESS, 0, 4); } @Test @@ -58,4 +59,17 @@ void clearSubtaskList() { Assertions.assertEquals(0, epic.getSubtasks().size()); } + + @Test + void epicToString() { + Assertions.assertEquals("1,EPIC,TestEpic,NEW,TestDescription,", epic.toString()); + } + + @Test + void epicFromString() { + Epic epic1 = Epic.fromString("1,EPIC,TestEpic,NEW,TestDescription,"); + Epic epic2 = Epic.fromString("5,EPIC,TestEpic2,NEW,TestDescription,"); + Assertions.assertEquals(epic, epic1); + Assertions.assertNotEquals(epic, epic2); + } } diff --git a/test/FileBackendTaskManagerTest.java b/test/FileBackendTaskManagerTest.java new file mode 100644 index 0000000..150f56d --- /dev/null +++ b/test/FileBackendTaskManagerTest.java @@ -0,0 +1,135 @@ +import managers.FileBackedTaskManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import tasks.Epic; +import tasks.Subtask; +import tasks.Task; + +import java.io.*; +import java.util.ArrayList; + +public class FileBackendTaskManagerTest { + String header = "id,type,name,status,description,epic"; + FileBackedTaskManager manager; + File testTmpFile; + Task task1; + Task task2; + Epic epic1; + Epic epic2; + Epic epic3; + Subtask subtask1; + Subtask subtask2; + Subtask subtask3; + + @BeforeEach + public void setUp() throws IOException { + + testTmpFile = File.createTempFile("manager", ".csv"); + manager = new FileBackedTaskManager(testTmpFile); + task1 = new Task("TestName1", "TestDescription1"); + task2 = new Task("TestName4", "TestDescription4"); + epic1 = new Epic("TestName2", "TestDescription2"); + epic2 = new Epic("TestName5", "TestDescription5"); + epic3 = new Epic("TestName6", "TestDescription6"); + subtask2 = new Subtask("TestName8", "TestDescription8", 4); + subtask3 = new Subtask("TestName9", "TestDescription9", 5); + } + + @AfterEach + public void tearDown() { + manager.getManagerFile().deleteOnExit(); + } + + @Test + public void saveEmptyFileFromManager() { + System.out.println(manager.getManagerFile().getAbsolutePath()); + Assertions.assertEquals(0, manager.getManagerFile().length()); + } + + @Test + public void loadManagerFromEmptyFile() { + FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(testTmpFile); + Assertions.assertEquals(0, manager.getTasks().size()); + Assertions.assertEquals(0, manager.getSubtasks().size()); + Assertions.assertEquals(0, manager.getEpics().size()); + Assertions.assertEquals(0, manager.getHistory().size()); + } + + @Test + public void saveTasksFileFromManager() { + manager.addTask(task1); + manager.addEpic(epic1); + manager.addSubtask(new Subtask("TestName7", "TestDescription7", 2)); + try (BufferedReader buffer = new BufferedReader(new FileReader(testTmpFile))) { + ArrayList tasks = new ArrayList<>(buffer.lines().toList()); + tasks.remove(header); + String[] arrTasks = tasks.toArray(new String[0]); + Task taskFromFile = Task.fromString(arrTasks[0]); + Epic epicFromFile = Epic.fromString(arrTasks[1]); + Subtask subtaskFromFile = Subtask.fromString(arrTasks[2]); + Assertions.assertEquals(manager.getTask(1), taskFromFile); + Assertions.assertEquals(manager.getEpic(2), epicFromFile); + Assertions.assertEquals(manager.getSubtask(3), subtaskFromFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void loadTasksFromFileToManager() { + task1 = new Task("TestName1", "TestDescription1", 1); + task2 = new Task("TestName4", "TestDescription4", 2); + epic1 = new Epic("TestName2", "TestDescription2", 3); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4); + try (FileWriter writer = new FileWriter(testTmpFile)) { + writer.write(String.format("%s\n", header)); + writer.write(String.format("%s\n", task1.toString())); + writer.write(String.format("%s\n", task2.toString())); + writer.write(String.format("%s\n", epic1.toString())); + writer.write(String.format("%s\n", subtask1.toString())); + } catch (IOException e) { + e.printStackTrace(); + } + + FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(testTmpFile); + Assertions.assertEquals(manager.getTask(1), task1); + Assertions.assertEquals(manager.getTask(2), task2); + Assertions.assertEquals(manager.getEpic(3), epic1); + Assertions.assertEquals(manager.getSubtask(4), subtask1); + } + + @Test + public void loadTasksFromFileToManagerAddOtherTasks() { + task1 = new Task("TestName1", "TestDescription1", 1); + task2 = new Task("TestName4", "TestDescription4", 2); + epic1 = new Epic("TestName2", "TestDescription2", 3); + subtask1 = new Subtask("TestName8", "TestDescription8", 3, 4); + try (FileWriter writer = new FileWriter(testTmpFile)) { + writer.write(String.format("%s\n", header)); + writer.write(String.format("%s\n", task1.toString())); + writer.write(String.format("%s\n", task2.toString())); + writer.write(String.format("%s\n", epic1.toString())); + writer.write(String.format("%s\n", subtask1.toString())); + } catch (IOException e) { + e.printStackTrace(); + } + + FileBackedTaskManager manager = FileBackedTaskManager.loadFromFile(testTmpFile); + Task task3 = new Task("TestName1", "TestDescription1"); + Task task4 = new Task("TestName4", "TestDescription4"); + Epic epic4 = new Epic("TestName4", "TestDescription4"); + Subtask subtask4 = new Subtask("TestName8", "TestDescription8", 7); + manager.addTask(task3); + manager.addTask(task4); + manager.addEpic(epic4); + manager.addSubtask(subtask4); + Assertions.assertEquals(manager.getTask(5), task3); + Assertions.assertEquals(manager.getTask(6), task4); + Assertions.assertEquals(manager.getEpic(7), epic4); + Assertions.assertEquals(manager.getSubtask(8), subtask4); + } + + +} diff --git a/test/InMemoryHistoryManagerTest.java b/test/InMemoryHistoryManagerTest.java index 5c77d31..373780b 100644 --- a/test/InMemoryHistoryManagerTest.java +++ b/test/InMemoryHistoryManagerTest.java @@ -20,6 +20,7 @@ public class InMemoryHistoryManagerTest { static Subtask subtask10; static Subtask subtask11; static Subtask subtask12; + @BeforeAll public static void setup() { task1 = new Task("Task1", "Description1", 1); diff --git a/test/SubtaskTest.java b/test/SubtaskTest.java new file mode 100644 index 0000000..910c591 --- /dev/null +++ b/test/SubtaskTest.java @@ -0,0 +1,32 @@ +import statuses.StatusTask; +import tasks.Epic; +import tasks.Subtask; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class SubtaskTest { + Subtask subtask; + Epic epic; + + @BeforeEach + void setUp() { + epic = new Epic("TestEpic", "TestDescription", 1); + subtask = new Subtask("TestSubtask1", "TestDescription1", StatusTask.NEW, 1, 2); + } + + @Test + void subtaskToString() { + Assertions.assertEquals("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1", subtask.toString()); + } + + @Test + void subtaskFromString() { + Subtask subtask1 = Subtask.fromString("2,SUBTASK,TestSubtask1,NEW,TestDescription1,1"); + Subtask subtask2 = Subtask.fromString("5,SUBTASK,TestSubtask5,NEW,TestDescription,1"); + Assertions.assertEquals(subtask, subtask1); + Assertions.assertNotEquals(subtask, subtask2); + } + + +} diff --git a/test/TaskTest.java b/test/TaskTest.java index 35b5525..23402bc 100644 --- a/test/TaskTest.java +++ b/test/TaskTest.java @@ -28,6 +28,7 @@ void setUp() { epic2 = new Epic("TestName2", "TestDescription2", 6); epic3 = new Epic("TestName3", "TestDescription3", 5); } + @Test void shouldEqualsIsSameIds() { Assertions.assertEquals(task1, task3); @@ -42,4 +43,16 @@ void shouldNotEqualsIsDifferentIds() { Assertions.assertNotEquals(epic1, epic2); } + @Test + void taskToString() { + Assertions.assertEquals("1,TASK,TestName1,NEW,TestDescription1,", task1.toString()); + } + + @Test + void taskFromString() { + Task task = Task.fromString("1,TASK,TestName1,NEW,TestDescription1,"); + Assertions.assertEquals(task1, task); + Assertions.assertNotEquals(task2, task); + } + }